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) 2 3 ans = 4 5 1.0000 + 1.7321i 6 -8^(1/3) 7 8 ans = 9 10 -2 11 12 13 14 因為計算是按復數計算,在復數面內旋轉-1/3圈,即順時針三分之一圈,所以得到1.0000 + 1.7321i 15 使用時注意就可以了
6.matlab中畫的圖形想要加上網格線,須先plot在grid,順序反了和沒加grid一樣。
畫出衰減振盪曲線及其它的包絡線。
1 t=0:pi/50:4*pi; 2 y0=exp(-t/3); 3 y=exp(-t/3).*sin(3*t); 4 plot(t,y,'-r',t,y0,':b',t,-y0,':b') 5 grid
7.eps是matlab中最小的正數。eps=2.22044604925031e-016
在matlab的數值計算中,當發現某個值小於eps時,就把這個數當做0來處理。
歷史指令再運行(選擇全部需要的代碼,右鍵選擇evaluate section)。
8.