How to solve a pair of nonlinear equations using Python? 在这个问题中,解决了一对非线性方程,每个方程都有两个参数。
现在我有两个以上的方程式,每个方程都有许多参数。参数的数量多于方程的数量。
通过使用问题中的方法。 例如:
'''
def func0(a,b,c,d,local1=α,local2=β):
#process
return function
# func0==0
def func1():
return
#etc
def multi_equ(p):
a,b,c,d,e = p
return (func0(a,b,c,d,local1,local2),func1(c,d,e),func2(a,b,c,d,e,local),etc)
'''
我的问题是:
如何编写fsolve()以解决此类函数,例如,某些时候参数c已知,我正在尝试解决这些问题。
答案 0 :(得分:0)
要使用fsolve
,您需要
一个至少带有一个(可能是矢量)参数的函数,并返回一个长度相同的 。
因此,方程的数量必须等于未知数。如果你有一个类似输入的函数,除了其中一个输入变量是已知的,那么将它包装在另一个函数中,如下所示:
def f(a, b, c, d):
return [a-b, b-c, c-d]
def func(p):
a, b, d = p
c = 0.5
return f(a, b, c, d)
此处func
适合在fsolve
中使用,例如
fsolve(func, [0, 0, 0]) # returns [0.5, 0.5, 0.5]
如果数学问题比方程具有更多(或更少)未知数,则不能使用fsolve
。我将使用的工具是least_squares
,它最小化func
的平方和。
def func(p):
a, b, c, d = p
return [a-b, b-c, c-d]
least_squares(func, [3, 2, 5, 1])
这找到了最小二乘问题的解决方案[2.75, 2.75, 2.75, 2.75]
。它还返回几乎为零的成本,告诉我们func
确实在找到的点处变为零。这个解决方案并不是唯一的。