你好,当我有一个方程组时,我在使用fsolve函数时遇到了问题。
我的代码只让我有和我的系统中的方程一样多的变量,但是我们都知道,在实践中,你可以拥有比变量更多的方程,特别是当解不是一个具体的数字而是一系列的数字时,一个附加的方程可以帮助缩小“干草堆”的范围。
如何插入比变量更多的方程是我的问题?
假设我有以下非线性系统:
A/B=0.4583(3)
A/C=0.25
A/D=0.72(2)
B/C=0.54(54)因此,我有以下代码:
from scipy.optimize import *
from numpy import *
def FUNC(arg):
A,B,C,D=arg
UNK=empty((4))
UNK[0]= A/B-0.458333333333333
UNK[1]= A/C-0.25
UNK[2]= A/D-0.722222222222222
UNK[3]= B/C-0.545454545454546
return UNK
SOLVED= fsolve(FUNC, [1.0]*4)
print (SOLVED)问题是,我也知道以下资料:
B/D=1.57(57)
C/D=2.8(8)如何将这两个附加方程插入到我的方程组中?
另外,如何显示解决方案的范围而不是仅显示一个解决方案,似乎fsolve只显示它遇到的第一个解决方案,而不是所有可能的解决方案。
发布于 2018-11-19 10:25:32
请注意,the的fsolve只是MINPACK的海布例程的包装器:
HYBRD的目的是通过对Powell混合方法的改进,在N个变量中寻找N个非线性函数系统的零点。用户必须提供一个计算函数的子程序。然后用正向差分近似计算雅可比。
如果您想要求解一个由6个方程组成的系统,您的函数FUNC需要是一个由6个变量组成的函数。我们可以这样做:
import numpy as np
from scipy.optimize import fsolve
def FUNC(arg):
A, B, C, D, E, F = arg
UNK=np.empty((6))
UNK[0]= A/B-0.458333333333333
UNK[1]= A/C-0.25
UNK[2]= A/D-0.722222222222222
UNK[3]= B/C-0.545454545454546
UNK[4]= B/D-1.575757575757575
UNK[5]= C/D-2.888888888888888
return UNK
fsolve(FUNC, x0=[1.0]*6)这是不可能得到所有的解决方案与解决方案。但是你可以尝试不同的初始点x0,希望得到不同的解决方案。
https://stackoverflow.com/questions/53369005
复制相似问题