使用fsolve求解3个非线性方程

时间:2017-12-08 21:01:50

标签: python np

我想找到a,b,c的valuews。它给了我错误:

from scipy.optimize import fsolve
def equations(p):
    a,b,c = p
    return (a*np.log10([-b])+c, a*np.log10([100-b])+c-100, a*np.log10([80-b])+c-20)

a,b,c =  fsolve(equations, (1, 1, 1))

print(a,b,c)
> print(a,b,c)

TypeError:fsolve:' func'的输入和输出形状之间存在不匹配。参数'方程'。形状应为(3,),但它是(3,1)。

1 个答案:

答案 0 :(得分:0)

您不能在等式中使用方括号[]。它们在Python中具有特殊含义。您应该使用圆括号来强制执行数学运算序列。以下代码消除了错误,但您需要在数学上进行更多工作,因为fsolve没有收敛到您的系统的解决方案。您将b的初始猜测设为1,然后执行log10(-b)。没有定义负数的日志。

import numpy as np
from scipy.optimize import fsolve
def equations(p):
    a,b,c = p
    return ( a*np.log10(-b)+c, a*np.log10(100-b)+c-100,
        a*np.log10(80-b)+c-20 )

a,b,c =  fsolve(equations, ( 1, 1, 1 ))

print(a,b,c)

如果我们在纸上写下您的系统,您有以下3个等式。

替换第二个和第三个中的第一个等式,剩下

上述两个方程不能同时成立。所以你的系统没有答案。