1.線性方程數值求解
主要是用到了計算方法裡的lu分解等,不過是加快了求解速度而已(相對於inv(a)*b或者a\b)
2.非線性方程數值求解
1 單變數非線性方程求解
在matlab中提供了乙個fzero函式,可以用來求單變數非線性方程的根。該函式的呼叫格式為:
z=fzero('fname',x0,tol,trace)
其中fname是待求根的函式檔名,x0為搜尋的起點。乙個函式可能有多個根,但fzero函式只給出離x0最近的那個根。tol控制結果的相對精度,預設時取tol=eps,trace指定迭代資訊是否在運算中顯示,為1時 顯示,為0時不顯示,預設時取trace=0。
例 求f(x)=x-10x+2=0在x0=0.5附近的根。
步驟如下:
(1) 建立函式檔案funx.m。
function fx=funx(x)
fx=x-10.^x+2;
(2) 呼叫fzero函式求根。
z=fzero('funx',0.5)
z =0.3758
2 非線性方程組的求解
對於非線性方程組f(x)=0,用fsolve函式求其數值解。fsolve函式的呼叫格式為:
x=fsolve('fun',x0,option)
其中x為返回的解,fun是用於定義需求解的非線性方程組的函式檔名,x0是求根過程的初值,option為最優化工具箱的選項設定。最優化工具箱提供了20多個選項,使用者可以使用optimset命令將它們顯示出來。如果想改變其中某個選項,則可以呼叫optimset()函式來完成。例如,display選項決定函式呼叫時中間結果的顯示方式,其中『off』為不顯示,『iter』表示每步都顯示,『final』只顯示最終結果。optimset(『display』,『off』)將設定display選項為『off』。
例 求下列非線性方程組在(0.5,0.5) 附近的數值解。
(1) 建立函式檔案myfun.m。
function q=myfun(p)
x=p(1);
y=p(2);
q(1)=x-0.6*sin(x)-0.3*cos(y);
q(2)=y-0.6*cos(x)+0.3*sin(y);
(2) 在給定的初值x0=0.5,y0=0.5下,呼叫fsolve函式求方程的根。
x=fsolve('myfun',[0.5,0.5]',optimset('display','off'))
x =0.6354
0.3734
將求得的解代回原方程,可以檢驗結果是否正確,命令如下:
q=myfun(x)
q =1.0e-009 *
0.2375 0.2957
可見得到了較高精度的結果。
3. 常微分方程初值問題的數值解法
龍格-庫塔法的實現
基於龍格-庫塔法,matlab提供了求常微分方程數值解的函式,一般呼叫格式為:
[t,y]=ode23('fname',tspan,y0)
[t,y]=ode45('fname',tspan,y0)
其中fname是定義f(t,y)的函式檔名,該函式檔案必須返回乙個列向量。tspan形式為[t0,tf],表示求解區間。y0是初始狀態欄向量。t和y分別給出時間向量和相應的狀態向量。
例 設有初值問題,試求其數值解,並與精確解相比較(精確解為y(t)=)。
(1) 建立函式檔案funt.m。
function yp=funt(t,y)
yp=(y^2-t-2)/4/(t+1);
(2) 求解微分方程。
t0=0;tf=10;
y0=2;
[t,y]=ode23('funt',[t0,tf],y0); %求數值解
y1=sqrt(t+1)+1; %求精確解
t'y'
y1'y為數值解,y1為精確值,顯然兩者近似。
4. 函式極值
matlab提供了基於單純形演算法求解函式極值的函式fmin和fmins,它們分別用於單變數函式和多變數函式的最小值,其呼叫格式為:
x=fmin('fname',x1,x2)
x=fmins('fname',x0)
這兩個函式的呼叫格式相似。其中fmin函式用於求單變數函式的最小值點。fname是被最小化的目標函式名,x1和x2限定自變數的取值範圍。fmins函式用於求多變數函式的最小值點,x0是求解的初始值向量。
matlab沒有專門提供求函式最大值的函式,但只要注意到-f(x)在區間(a,b)上的最小值就是f(x)在(a,b)的最大值,所以fmin(f,x1,x2)返回函式f(x)在區間(x1,x2)上的最大值。
例 求f(x)=x3-2x-5在[0,5]內的最小值點。
(1) 建立函式檔案mymin.m。
function fx=mymin(x)
fx=x.^3-2*x-5;
(2) 呼叫fmin函式求最小值點。
x=fmin('mymin',0,5)
x=0.8165
5.複數相關
matlab裡可以直接輸入數學表示式計算。
空格三個點號為續行符,必須加空格,否則被認為是無法識別的操作符。
可以1 + 4*i或者1 + 4i表示複數,exp(x)表示指數函式。
生成複數陣,每個元素是複數,或者[1 2;4 5] - [7 8; 56 7]*i。
real(實部),imag(虛部),abs(求模),angle(求角)
1 >> (-8)^(1/3)26.matlab中畫的圖形想要加上網格線,須先plot在grid,順序反了和沒加grid一樣。3 ans =45
1.0000 + 1
.7321i
6 -8^(1/3)7
8 ans =
910 -2
1112
1314 因為計算是按複數計算,在複數面內旋轉-1/3圈,即順時針三分之一圈,所以得到1.0000 + 1
.7321i
15 使用時注意就可以了
畫出衰減振盪曲線及其它的包絡線。
7.eps是matlab中最小的正數。eps=2.22044604925031e-016
在matlab的數值計算中,當發現某個值小於eps時,就把這個數當做0來處理。
歷史指令再執行(選擇全部需要的**,右鍵選擇evaluate section)。
8.
matlab 解方程組
在matlab中解方程組是很方便的 例如,對於代數方程組ax b a為係數矩陣,非奇異 的求解,matlab中有兩種方法 1 x inv a b 採用求逆運算解方程組 2 x a b 採用左除運算解方程組。例 x1 2x2 8 2x1 3x2 13 a 1,2 2,3 b 8 13 x inv a ...
解方程及微分方程 MATLAB
x1,x2,x3,solve eq1 eq2 eq3 x1 x2 x3 s solve eq1 eq2 eq3 x1 x2 x3 第一種方式,對solve的括號中的x1,x2,x3的次序會有要求 與前面的一致 第二種無要求。eq都是等式,不是表示式。最好都打引號,不打引號也可以,但是一定要預先用sy...
MATLAB 求解方程(組)
eg.解方程x 2 x 2 0 1.roots p 函式 此 matlab 函式 以列向量的形式返回 p 表示的多項式的根。輸入 p 是乙個包含 n 1 多項式係數的向量,以 xn 係數開頭。0係數表示方程中不存在的中間冪。p 1 1,2 x roots p 2.solve函式 利用solve函式求...