非線形方程式のパイソンを探しています

タスクで行うには、最近のもの、のと同等でX-を求めるyと知られている機能、インターネットがついに実現するためのさまざまな方法を探しています。この記述方法では、ピットの一部を記録しました。

次のような機能要件(1-X) - (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]从而让函数从两边开始梯度下降,找到左右两个解
# 其实该方程有三个解,只是我不需要中间值的解,因此从左右两端估计

ニュートン法のマニュアルについて

ニュートン反復法は、非線形方程式の1つの一般的に用いられる方法であり、以下のように、特定の原則は次のとおりです。

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エラーであると言っ参照するには、インターネットには、関数が非線形方程式を解くために、一見ができません。
パッケージは、特に一番下に取得していない非線形方程式を解く実装する方法、そしておそらく将来的には、入力されます。

おすすめ

転載: www.cnblogs.com/guiguiguoguo/p/11409348.html