使用MATLAB求解方程求根——學習筆記
碎碎念:終於參加完了某比賽,連續大約摸了兩天的魚,就在昨天由於自己的操作失誤,親手將電腦給燒了,這就是上天在暗示我是時候加油爲接下來的兩場比賽和一個考試努力啦~下面淺談一下MATLAB各種求解方程的根的方法。
求方程的根
法一:
求方程的全部根。
在MATLAB命令窗口輸入:
p=[1,7,0,9,-20]; %建立多項式係數向量
x=roots(p) %求根
法二:
使用solve函數:
s=solve(f,v):求方程關於指定自變量的解;
s=solve(f):求方程關於默認自變量的解。
其中 f可以是用字符串表示的方程,或符號表達式;若f 中不含等號,則表示解 方程 f=0。
解方程 x^3-3*x+1=0
>>syms x; f=x^3-3*x+1;
>>s=solve(f,x)
>>s=solve(‘x^3-3*x+1’,‘x’)
>>s=solve(‘x^3-3*x+1=0’,‘x’)
Solve函數還可以用來求解方程組!
solve(f1,f2,...,fN,v1,v2,...,vN)
求解由 f1,f2,...,fN 確定的方程組關於 v1, v2,...,vN 的解。
解方程組:
>>[x,y,z]=solve(‘x+2*y-z=27’,‘x+z=3’, ...
‘x^2+3*y^2=28’,‘x’,‘y’,‘z’)
注意:輸出變量的順序要書寫正確!
Solve在得不到解析解時,會給出數值解。
非線性方程組求解:
fzero(f,x0):求方程f=0在x0附近的根。
幾點說明:
- 方程可能有多個根,但是fzero只能給出距離x0最近的一個根;
- 若x0是一個標量,則fzero先找出一個包含x0的區間,使得f在這個區間兩個端點上的值異號,然後再在這個區間內尋找方程f=0的根;如果找不到這樣的區間,則返回NaN。
- 若x0是一個2維向量,則表示在[x0(1),x0(2)]區間內求方程的根,此時必須滿足f在這兩個端點上的值異號。
- 由於fzero是根據函數是否船業橫軸來決定零點。因此它無法確定函數曲線僅觸及橫軸但是不穿越的零點,如|sin(x)|的所有零點。
- 函數中的f是一個函數句柄,通過以下方式給出:
字符串形式:fzero(‘x^3-3*x+1’,2);
通過@調用的函數句柄:fzero(@sin,4);
- f不能用符號表達式!
線性方程組求解:
linsolve(A,b):解線性方程組
>> A=[1 2 –1; 1 0 1; 1 3 0];
>> b=[2;3;8];
>> X=linsolve(A,b)
注意這裏的b是列向量。
求解方程函數小結
roots(p):多項式的所有零點,p是多項式係數向量。
fzero(f,x0):求f=0在x0附近的根,f是函數句柄,可以由字符串給出或使用@, 但不能是符號表達式!
solve(f,v):求方程關於指定自變量的解,f可以是用字符串表示的方程,或符號表 達式,若不含等號表示f=0;
也可解方程組(包含非線性);得不到解析解時,給出數值解。
linsolve(A,b):解線性方程組。