使用scipy.optimize模块的root和fsolve函数进行数值求解线性及非线性方程,下面直接贴上代码,代码很简单
python" id="highlighter_307460">
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
from scipy.integrate import odeint
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import root,fsolve
#plt.rc('text', usetex=true) #使用latex
## 使用scipy.optimize模块的root和fsolve函数进行数值求解方程
## 1、求解f(x)=2*sin(x)-x+1
rangex1 = np.linspace( - 2 , 8 )
rangey1_1,rangey1_2 = 2 * np.sin(rangex1),rangex1 - 1
plt.figure( 1 )
plt.plot(rangex1,rangey1_1, 'r' ,rangex1,rangey1_2, 'b--' )
plt.title( '$2sin(x)$ and $x-1$' )
def f1(x):
return np.sin(x) * 2 - x + 1
sol1_root = root(f1,[ 2 ])
sol1_fsolve = fsolve(f1,[ 2 ])
plt.scatter(sol1_fsolve, 2 * np.sin(sol1_fsolve),linewidths = 9 )
plt.show()
## 2、求解线性方程组{3x1+2x2=3;x1-2x2=5}
def f2(x):
return np.array([ 3 * x[ 0 ] + 2 * x[ 1 ] - 3 ,x[ 0 ] - 2 * x[ 1 ] - 5 ])
sol2_root = root(f2,[ 0 , 0 ])
sol2_fsolve = fsolve(f2,[ 0 , 0 ])
print (sol2_fsolve) # [2. -1.5]
a = np.array([[ 3 , 2 ],[ 1 , - 2 ]])
b = np.array([ 3 , 5 ])
x = np.linalg.solve(a,b)
print (x) # [2. -1.5]
## 3、求解非线性方程组
def f3(x):
return np.array([ 2 * x[ 0 ] * * 2 + 3 * x[ 1 ] - 3 * x[ 2 ] * * 3 - 7 ,
x[ 0 ] + 4 * x[ 1 ] * * 2 + 8 * x[ 2 ] - 10 ,
x[ 0 ] - 2 * x[ 1 ] * * 3 - 2 * x[ 2 ] * * 2 + 1 ])
sol3_root = root(f3,[ 0 , 0 , 0 ])
sol3_fsolve = fsolve(f3,[ 0 , 0 , 0 ])
print (sol3_fsolve)
## 4、非线性方程
def f4(x):
return np.array(np.sin( 2 * x - np.pi) * np.exp( - x / 5 ) - np.sin(x))
init_guess = np.array([[ 0 ],[ 3 ],[ 6 ],[ 9 ]])
sol4_root = root(f4,init_guess)
sol4_fsolve = fsolve(f4,init_guess)
print (sol4_fsolve)
t = np.linspace( - 2 , 12 , 2000 )
y1 = np.sin( 2 * t - np.pi) * np.exp( - t / 5 )
y2 = np.sin(t)
plt.figure( 2 )
a , = plt.plot(t,y1,label = '$sin(2x-\pi)e^{-x/5}$' )
b , = plt.plot(t,y2,label = '$sin(x)$' )
plt.scatter(sol4_fsolve,np.sin(sol4_fsolve),linewidths = 8 )
plt.title( '$sin(2x-\pi)e^{-x/5}$ and $sin(x)$' )
plt.legend()
|
以上这篇python scipy求解非线性方程的方法(fsolve/root)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/ouening/article/details/78653774