利用python求非线性方程

最近在做的东西中有一件任务,相当于一个函数已知y来求x,网上找了各种办法最终得以实现。在此说明方法,并记录一些坑。

要求的函数比如:log(x) - log(1-x) + 2.2 * (1 -2x)

最好用的方法,利用Scipy.optimize中的fsolve函数。

在该方法中,我们可以调用scipy.optimize.fsolve来求解非线性方程(组),具体方法如下:

from scipy.optimize import fsolve
import numpy as np

# 按格式要求定义我们需要求的函数
def f(x):
    return np.log(x) -np.log(1-x) + 2.2*(1-2x)
# 调用fsolve函数
sol_fsolve = fsolve(f, [0.1, 0.9]) # 第一个参数为我们需要求解的方程,第二个参数为方程解的估计值
print(sol_fsolve)

[0.17071517 0.82928483]
# 输入两个解意味着根据你的估计值来进行梯度下降等算法找到的方程解。解的值域为(0,1),因此我估计为[0.1, 0.9]从而让函数从两边开始梯度下降,找到左右两个解
# 其实该方程有三个解,只是我不需要中间值的解,因此从左右两端估计

手动实现牛顿迭代法

牛顿迭代法是求非线性方程常用方法之一,具体原理如下:

https://blog.csdn.net/Robin__Chou/article/details/52103009

随后,附上python实现代码:

from sympy import *

x = symbols('x')
f = log(x) - log(1-x) +2.2*(1 - 2*x)
t = 0.01 # x每次的替代值
f1 = f.subs(x, t) # 表示t赋值给x

while abs(f1) > 0.0001:  #我们设定的精度
    dify = diff(f, x) # f对x求导
    dify = dify.subs(x, t)
    t = t - f1/dify
    f1 = f.subs(x, t)

print('x=', x)

注:该方法只能找到你首次赋值t进行牛顿法的第一个解,要得到其余解还需自行调整t值

第三种方法失败的,用sympy

网上看到人说sympy求方程很好用,用了sympy.solve 以及sympy.solveset均发生错误,貌似是该函数无法解决非线性方程。
该包具体怎么用来实现求解非线性方程还没深究,也许以后会补上。

转载于:https://www.cnblogs.com/guiguiguoguo/p/11409348.html

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,可以使用多种方法来解非线性方程。以下是几种常用的方法: 1. 数值方法:数值方法是一种通过迭代逼近来解非线性方程的方法。其中,最常用的方法是牛顿法(Newton's method)和二分法(Bisection method)。 - 牛顿法:通过选择初始猜测值,利用导数和函数值的信息来逐步逼近方程的根。在Python中,可以使用SciPy库中的`newton()`函数来实现牛顿法。 - 二分法:通过选择一个区间,并使用区间的中点来不断缩小区间范围,直到找到方程的根。在Python中,可以编写自己的二分法函数来解非线性方程。 2. 符号计算方法:符号计算方法是一种利用计算机代数系统来解析非线性方程的方法。其中,最常用的库是SymPy。 - SymPy:SymPy是一个强大的符号计算库,可以用于非线性方程。你可以使用`solve()`函数来非线性方程。例如,`solve(expr, x)`可以方程`expr = 0`关于未知量x的根。 3. 最优化方法:最优化方法可以用于非线性方程的根,其中最常用的方法是解无约束优化问题。在Python中,可以使用SciPy库中的`root()`函数来实现最优化方法。 这些方法只是解非线性方程的一部分,具体选择哪种方法取决于方程的特性和要的精度。你可以根据具体情况选择适合的方法来解非线性方程。同时,你也可以参考相关库的官方文档和示例代码来进一步了解和应用这些方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值