如何使用fsolve求解非线性方程组?

问题描述 投票:0回答:1

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

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

初始化变量wi和beta:

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

定义Alfa:

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]

但是,我需要对n_inputs的任何值进行归纳。

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

def f(x):
    w,alfa=x
    f=[sigmoid(alfa)-(sigmoid(alfa)-sigmoid(alfa)**2)*np.dot(w,x_M)-b]
    for i in range(n_inputs):
        f.append((sigmoid(alfa)-sigmoid(alfa)**2)*w[i]-k[i])
    return f

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

谁能帮忙吗?

python numerical-methods
1个回答
0
投票

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

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

应该工作。

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

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

假设xk是numpy数组。

© www.soinside.com 2019 - 2024. All rights reserved.