MATLAB解方程與函式極值

2022-01-26 04:09:02 字數 3432 閱讀 8594

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 =45

1.0000 + 1

.7321i

6 -8^(1/3)7

8 ans =

910 -2

1112

1314 因為計算是按複數計算,在複數面內旋轉-1/3圈,即順時針三分之一圈,所以得到1.0000 + 1

.7321i

15 使用時注意就可以了

6.matlab中畫的圖形想要加上網格線,須先plot在grid,順序反了和沒加grid一樣。

畫出衰減振盪曲線及其它的包絡線。

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函式求...