非线性方程求解
方程到代码
简单一个试一下,方程
\[ y=sin(x) + x \]
如果 \(x=\frac{\pi}{2}, y = 1+\frac{\pi}{2}\),写出代码如下
1 2 3 4 5 6 7 8 9 10 11 12
| import math
def f(x): y = math.sin(x) + x return y
print(f(math.pi/2))
|
库函数转换
假设我们知道 \(y = 1+\frac{\pi}{2}\),求解x,这里我们使用 sympy
库。注意我们需要把 math
这些库的函数(比如 math.sin
和 math.pi
)替换为 sympy
库
1 2 3 4 5 6 7 8 9 10 11 12 13
| import math import sympy as sp
def f(x): y = sp.sin(x) + x return y
print(f(sp.pi/2))
|
使用 sympy
求解
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import sympy as sp
def f(x): y = sp.sin(x) + x return y
x = sp.symbols('x') y = 1 + sp.pi / 2 eqs = sp.Eq(f(x), y) solution = sp.solve(eqs, x)
print(solution)
|
很不靠谱,求解不出来
1
| No algorithms are implemented to solve equation x + sin(x) - pi/2 - 1
|
sympy
结合 scipy
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import sympy as sp from scipy.optimize import fsolve
def f(x): y = sp.sin(x) + x return y
x = sp.symbols('x') y = 1 + sp.pi / 2
initial_value = 0
func = sp.lambdify(x, f(x) - y) solution = fsolve(func, initial_value)
print(solution)
|
复杂方程求解
\[ b(v)=\sum_{m=0}^4C_4^mv^m(1-v)^{(4-m)}g(h_i, \beta) \]
其中变量是 \(v\),\(\omega_i\) 是未知数,\(tanh\) 是三角函数,其中 \(g(h_i, \beta)\) 如下
其中
\[ g(h_i,\beta)=\frac{1}{2}(1+\frac{tanh(\beta h_i)}{tanh(\beta)}) \]
其中 \(h_i\) 如下
\[ h_i=\frac{\omega_im-(4-m)}{\omega_im+(4-m)} \]
如果我们知道 \(v=\frac{1}{2}\) 时 \(b(\frac{1}{2})=0.07\),我们可以求解未知参数 \(\omega_i\) ,代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import sympy as sp from scipy.optimize import fsolve
def v2bi(v, w_z, beta=2): Cs = [1, 4, 6, 4, 1] b_i = 0 for m in range(5): h_i = (w_z * m - (4 - m)) / (w_z * m + (4 - m)) g_i = (1 + sp.tanh(beta * h_i) / sp.tanh(beta)) / 2 b_i += Cs[m] * (v**m) * ((1 - v)**(4 - m)) * g_i return b_i
initial_value = 0
w_i = sp.symbols('w_i') result = 0.07
func = sp.lambdify(w_i, v2bi(1 / 2, w_i) - result) solution = fsolve(func, initial_value)
print(solution)
|
本文作者:yuhldr
本文地址: https://yuhldr.github.io/posts/6261.html
版权声明:转载请注明出处!