Python 用fsolve求解3个非线性方程组

Python 用fsolve求解3个非线性方程组,python,np,Python,Np,我想找到a,b,c的值。这给了我一个错误: 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) TypeEr

我想找到a,b,c的值。这给了我一个错误:

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)。

在等式中不能使用方括号
[]
。它们在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个方程式

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

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