我想找到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)。
答案 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个等式。
替换第二个和第三个中的第一个等式,剩下
上述两个方程不能同时成立。所以你的系统没有答案。