假设我有一个方程
x + 2*cos(x) = 0
我想解决它。然后我可以编写以下程序:
def func1(x):
out = x + 2*cos(x)
return out
Solution = fsolve(func1, StartValue)
在此示例中,StartValue 可以具有任意值。到目前为止,一切都很好!我正在编写一个模拟,该模拟创建一个我想用 fsolve() 求解的非线性方程组。现在的挑战是(!)在运行时间之前,非线性方程组的大小是未知的(!)。这意味着我可以拥有例如
x + 2*cos(x) = 0
就像我可以拥有的一样
2*x + 4*y = 0
18*y -18 = 0
为了解决最后提到的方程组(在我的程序中通常总是非线性的),我找到了以下解决方案:
def func2(x):
out = [2*x[0] + 4*x[1]]
out.append(18*x[1]-18)
return out
Solution = fsolve(func2, [1, 1])
这也很有效。但是我不能使用 func2(x) 所示的解决方案是有一定原因的:它使我的程序非常慢!函数 fsolve() 多次迭代调用函数 func2(x) 直到找到解 [-2 1]。但我的程序将处理数百到数千行的线性方程组。这意味着在每个迭代步骤中,所有这些 thounds 行都被附加,如 func2(x) 所示。因此,我正在寻找一种解决方案,即 ONCE 将方程组创建为函数 func3(x),然后 fsolve() 仅调用现成的 func3(x)。这是一个伪代码示例:
func3 = lambda x: 2*x[0] + 4*x[1]
func3.append(lambda x: 18*x[1] - 18)
Solution = fsolve(func3, [1, 1])
不幸的是,无法附加函数,因为我在上面的伪代码中显示了它。因此我的问题是:如何动态构建我的函数 func3 然后将(!)ONCE READY BUILT(!)函数 func3 传递给 fsolve() ???
非常感谢您提前