非线性方程求解
方程到代码
简单一个试一下,方程
$$
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](https://yuhldr.github.io/posts/6261.html)
版权声明:转载请注明出处!