如何用已知的一些变量数值地求解多变量联立方程?

时间:2018-06-07 04:14:41

标签: python scipy equation-solving

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已知,我正在尝试解决这些问题。

1 个答案:

答案 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确实在找到的点处变为零。这个解决方案并不是唯一的。