用python求解欠定非线性方程组

2024-05-28 20:04:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python解决一个欠定的非线性方程组。目前我的计划如下,但不幸的是没有成功。我举个小例子

我有这个输入数据

Lins = np.array([[[1, 2, 3], [4, 5, 6], [1, 5, 2], [5, 2, 6]], 
                 [[7, 2, 3], [4, 5, 6], [5, 8, 7], [2, 1, 4]]], np.int32)

表示多项式的每条线。意义[1, 2, 3]表示1x^2+2x+3,以及[5, 8, 7]5x^2+8x+7等等

要为我的系统“创建”方程式,我执行以下操作:

def f(x):
    X = np.array([x**2, x, np.ones_like(x)]).T
    return np.sum(Lins * X[:,None], axis=(1, 2))

所以我的计划是得到这两个方程和四个未知量x1-x4:

1x1^2+2x1+3+4x2^2+5x2+6+1x3^2+5x3+6+5x4^2+2x4+6

7x1^2+2x1+3+4x2^2+5x2+6+5x3^2+8x3+7+2x4^2+1x4+4

之后,我导入解算器,并定义解向量b

from scipy.optimize import least_squares
b = np.array([52, 62])

最后,我尝试解决该系统:

x = least_squares(lambda x: f(x) - b, np.asarray((1,1,1,1,1)), bounds=(0, 1)).x

我期望四个值代表4个未知x1-x4的解。不幸的是,我得到了这个错误:

ValueError:操作数无法与形状(2,4,3)(4,1,3)一起广播

对我来说,我将数据放入least_squares解算器的方式似乎有错误。但我想不出问题所在。或者least_squares不适合解决欠定系统

提前感谢您的帮助:)


Tags: 数据系统错误nparray计划例子算器
1条回答
网友
1楼 · 发布于 2024-05-28 20:04:42

对于这个问题,Vandermonde Matrix是一个非常有用的矩阵。 如果我们使用函数f参数x([x1,x2,x3,x4])创建一个“vander”矩阵,那么我们可以创建您在计划中描述的方程

def f(x): ## x = [x1, x2, x3, x4]
    X = np.vander(x, 3)  ## Vandermonde Matrix [[x^2 x 1] ...]
    return np.sum(Lins * X, axis=(1, 2))

我对解决这些系统不太熟悉,因此我不能说程序的其余部分是否会产生正确的解决方案

相关问题 更多 >

    热门问题