2024-04-26 21:55:02 发布
网友
使用Python解决一对非线性方程的(最好的)方法是什么。(Numpy、Scipy或Sympy)
例如:
x+y^2 = 4e^x+ xy = 3
一个代码片段可以解决上述问题
如果您喜欢sympy,可以使用nsolve。
>>> nsolve([x+y**2-4, exp(x)+x*y-3], [x, y], [1, 1]) [0.620344523485226] [1.83838393066159]
第一个参数是方程组,第二个是变量组,第三个是初始猜测。
试试这个,我向你保证它会工作得很好。
import scipy.optimize as opt from numpy import exp import timeit st1 = timeit.default_timer() def f(variables) : (x,y) = variables first_eq = x + y**2 -4 second_eq = exp(x) + x*y - 3 return [first_eq, second_eq] solution = opt.fsolve(f, (0.1,1) ) print(solution) st2 = timeit.default_timer() print("RUN TIME : {0}".format(st2-st1)) -> [ 0.62034452 1.83838393] RUN TIME : 0.0009331008900937708
仅供参考。如上所述,您还可以使用“Broyden近似”将“fsolve”替换为“broyden1”。它起作用了。我做到了。
我不知道Broyden的近似是如何工作的,但它花了0.02s
我建议您不要使用Sympy的功能<;-确实很方便,但在速度方面,它相当慢。你会明白的。
对于数值解,可以使用fsolve:
http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fsolve.html#scipy.optimize.fsolve
from scipy.optimize import fsolve import math def equations(p): x, y = p return (x+y**2-4, math.exp(x) + x*y - 3) x, y = fsolve(equations, (1, 1)) print equations((x, y))
如果您喜欢sympy,可以使用nsolve。
第一个参数是方程组,第二个是变量组,第三个是初始猜测。
试试这个,我向你保证它会工作得很好。
仅供参考。如上所述,您还可以使用“Broyden近似”将“fsolve”替换为“broyden1”。它起作用了。我做到了。
我不知道Broyden的近似是如何工作的,但它花了0.02s
我建议您不要使用Sympy的功能<;-确实很方便,但在速度方面,它相当慢。你会明白的。
对于数值解,可以使用fsolve:
http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fsolve.html#scipy.optimize.fsolve
相关问题 更多 >
编程相关推荐