簡體   English   中英

在python中求解一個欠定非線性方程組

[英]Solving an underdetermined nonlinear system of equations in 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]代表1 x^2+2 x+3 ,而[5, 8, 7] 5 x^2+8 x+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 得到這兩個方程:

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

7 x1^2+2 x1+3 + 4 x2^2+5 x2+6 + 5 x3^2+8 x3+7 + 2 x4^2+1 x4+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不適合解決欠定系統?

預先感謝您的所有幫助:)

Vandermonde 矩陣是解決這個問題的一個非常有用的矩陣。 如果我們使用函數 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))

我不太熟悉解決這些系統,所以我不能說程序的其余部分是否會產生正確的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM