【问题标题】:How to solve multi-variable simultaneous equations numerically with some variables known?如何在已知变量的情况下数值求解多变量联立方程?
【发布时间】:2018-06-07 17:20:56
【问题描述】:

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

我的问题是:

例如,当参数 c 已知时,如何编写 fsolve() 来解决此类函数,我正在尝试解决其余部分。

【问题讨论】:

  • fsolve() 似乎需要一些秩序感。我正在考虑编写一个包装函数来更改 multi_equ() 中的参数顺序。有没有更好的方法,或者其他函数可以代替 fsolve()?

标签: python scipy equation-solving


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多