0


python scipy fsolve 非线性方程组求解

原文链接: python scipy fsolve 非线性方程组求解

上一篇: python numpy 和 opencv 图像拼接

下一篇: python scipy 奇异值分解 SVD

fsolve 非线性方程组求解

fsolve(fun,x0) 其中fun是计算方程组误差的函数,他的参数x是一个数组,其值为方程组 的一组可能解,fun返回将x带入方程组之后得到的每个方差的误差,x0是未知数的一组初始值

假设要对下列方程组求解

f1(u1,u2,u3)=0

f2(u1,u2,,u3)=0

f3(u1,u2,u3)=0

则fun函数可定义为

def fun(x):
    u1,u2,u3 = x
    return [f1(u1,u2,u3),f1(u1,u2,u3),f1(u1,u2,u3)]

例子

from math import sin, cos
from scipy import optimize

def f(x):
    x0, x1, x2 = x.tolist()
    return [
        5 * x1 + 3,
        4 * x0 ** 2 - 2 * sin(x1 * x2),
        x1 * x2 - 1.5
    ]

result = optimize.fsolve(f, [1, 1, 1])
print(result)
print(f(result))

[-0.70622057 -0.6        -2.5       ]
[0.0, -9.126033262418787e-14, 5.329070518200751e-15]

在求解时,会自动计算方程组在某个点对各个未知数变量的偏导数,这些偏导数组成一个二维数组,数学上成为雅可比矩阵,如果未知数过多,

而与每个方程相关连的未知数较少,即雅可比矩阵比较稀疏时,通过传递雅可比矩阵可以提高运算速度

from math import sin, cos
from scipy import optimize

def f(x):
    x0, x1, x2 = x.tolist()
    return [
        5 * x1 + 3,
        4 * x0 ** 2 - 2 * sin(x1 * x2),
        x1 * x2 - 1.5
    ]

def j(x):
    x0, x1, x2 = x.tolist()
    return [
        [0, 5, 0],
        [8 * x0, -2 * x2 * cos(x1 * x2), -2 * x1 * cos(x1 * x2)],
        [0, x2, x1]
    ]

result = optimize.fsolve(f, [1, 1, 1], fprime=j)
print(result)
print(f(result))

[-0.70622057 -0.6        -2.5       ]
[0.0, -9.126033262418787e-14, 5.329070518200751e-15]

本文转载自: https://blog.csdn.net/qq_35516360/article/details/122066046
版权归原作者 阿豪boy 所有, 如有侵权,请联系我们删除。

“python scipy fsolve 非线性方程组求解”的评论:

还没有评论