如何使用fsolve求解非线性方程的通用系统?

时间:2020-04-08 01:16:59

标签: python numerical-methods

我正在尝试解决一个非线性方程系统,该系统随着n_inputs的变化而改变变量和方程的数量。最后,我需要获取w [i](对于range(n_inputs)中的w)和alfa。

首先,我做到了,它运行良好:

初始化变量wi和beta:

<img id="image" src="https://via.placeholder.com/150x300">
<div class="button">
  <button id="button_horizontal">Flip Horizontal</button>
  <button id="button_vertical">Flip Vertical</button>
</div>

定义阿尔法:

w=[0 for i in range(n_inputs)]
beta=0

根据n_inputs选择系统:

alfa=np.dot(w,x_M)+beta

但是,我需要将其概括为n_inputs的任何值。

到那时,我明白了,但是我需要指定变量,但我不能这样做。

if n_inputs == 2:
    def f(x):
        w[0],w[1],alfa=x
        f1=sigmoid(alfa)-(sigmoid(alfa)-sigmoid(alfa)**2)*np.dot(w,x_M)-b
        f2=(sigmoid(alfa)-sigmoid(alfa)**2)*w[0]-k[0]
        f3=(sigmoid(alfa)-sigmoid(alfa)**2)*w[1]-k[1]
        return [f1,f2,f3]

elif n_inputs == 3:
    def f(x):
        w[0],w[1],w[2],alfa=x
        f1=sigmoid(alfa)-(sigmoid(alfa)-sigmoid(alfa)**2)*np.dot(w,x_M)-b
        f2=(sigmoid(alfa)-sigmoid(alfa)**2)*w[0]-k[0]
        f3=(sigmoid(alfa)-sigmoid(alfa)**2)*w[1]-k[1]
        f4=(sigmoid(alfa)-sigmoid(alfa)**2)*w[2]-k[2]
        return [f1,f2,f3,f4]

elif n_inputs == 4:
    def f(x):
        w[0],w[1],w[2],w[3],alfa=x
        f1=sigmoid(alfa)-(sigmoid(alfa)-sigmoid(alfa)**2)*np.dot(w,x_M)-b
        f2=(sigmoid(alfa)-sigmoid(alfa)**2)*w[0]-k[0]
        f3=(sigmoid(alfa)-sigmoid(alfa)**2)*w[1]-k[1]
        f4=(sigmoid(alfa)-sigmoid(alfa)**2)*w[2]-k[2]
        f5=(sigmoid(alfa)-sigmoid(alfa)**2)*w[3]-k[3]
        return [f1,f2,f3,f4,f5]

elif n_inputs == 5:
    def f(x):
        w[0],w[1],w[2],w[3],w[4],alfa=x
        f1=sigmoid(alfa)-(sigmoid(alfa)-sigmoid(alfa)**2)*np.dot(w,x_M)-b
        f2=(sigmoid(alfa)-sigmoid(alfa)**2)*w[0]-k[0]
        f3=(sigmoid(alfa)-sigmoid(alfa)**2)*w[1]-k[1]
        f4=(sigmoid(alfa)-sigmoid(alfa)**2)*w[2]-k[2]
        f5=(sigmoid(alfa)-sigmoid(alfa)**2)*w[3]-k[3]
        f6=(sigmoid(alfa)-sigmoid(alfa)**2)*w[4]-k[4]
        return [f1,f2,f3,f4,f5,f6]

elif n_inputs == 6:
    def f(x):
        w[0],w[1],w[2],w[3],w[4],w[5],alfa=x
        f1=sigmoid(alfa)-(sigmoid(alfa)-sigmoid(alfa)**2)*np.dot(w,x_M)-b
        f2=(sigmoid(alfa)-sigmoid(alfa)**2)*w[0]-k[0]
        f3=(sigmoid(alfa)-sigmoid(alfa)**2)*w[1]-k[1]
        f4=(sigmoid(alfa)-sigmoid(alfa)**2)*w[2]-k[2]
        f5=(sigmoid(alfa)-sigmoid(alfa)**2)*w[3]-k[3]
        f6=(sigmoid(alfa)-sigmoid(alfa)**2)*w[4]-k[4]
        f7=(sigmoid(alfa)-sigmoid(alfa)**2)*w[5]-k[5]
        return [f1,f2,f3,f4,f5,f6,f7]

ValueError:太多值无法解包(预期2)

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

是的,您希望python能够进入您的大脑以寻找期望的值分布。

w,alfa = x[:-1],x[-1]

应该工作。

原则上,此行之后的循环是不必要的,

f = (sigmoid(alfa)-sigmoid(alfa)**2)*w-k[:n_inputs]

假设xk是numpy数组。