日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab 解函数方程,MATLAB程序设计教程(7)—MATLAB解方程与函数极值

發布時間:2023/12/14 循环神经网络 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab 解函数方程,MATLAB程序设计教程(7)—MATLAB解方程与函数极值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MATLAB程序設計教程(7)——MATLAB解方程與函數極值

第7章MATLAB解方程與函數極值

7.1? 線性方程組求解

7.2? 非線性方程數值求解

7.3? 常微分方程初值問題的數值解法

7.4 函數極值

7.1線性方程組求解

7.1.1 直接解法

1.利用左除運算符的直接解法

對于線性方程組Ax=b,可以利用左除運算符“/”求解:

x=A/b

例7-1? 用直接解法求解下列線性方程組。

命令如下:

A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];

b=[13,-9,6,0]’;

x=A/b

2.利用矩陣的分解求解線性方程組

矩陣分解是指根據一定的原理用某種算法將一個矩陣分解成若干個矩陣的乘積。常見的矩陣分解有LU分解、QR分解、Cholesky分解,以及Schur分解、Hessenberg分解、奇異分解等。

(1) LU分解

矩陣的LU分解就是將一個矩陣表示為一個交換下三角矩陣和一個上三角矩陣的乘積形式。線性代數中已經證明,只要方陣A是非奇異的,LU分解總是可以進行的。

MATLAB提供的lu函數用于對矩陣進行LU分解,其調用格式為:

[L,U]=lu(X):產生一個上三角陣U和一個變換形式的下三角陣L(行交換),使之滿足X=LU。注意,這里的矩陣X必須是方陣。

[L,U,P]=lu(X):產生一個上三角陣U和一個下三角陣L以及一個置換矩陣P,使之滿足PX=LU。當然矩陣X同樣必須是方陣。

實現LU分解后,線性方程組Ax=b的解x=U/(L/b)或x=U/(L/Pb),這樣可以大大提高運算速度。

例7-2? 用LU分解求解例7-1中的線性方程組。

命令如下:

A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];

b=[13,-9,6,0]’;

[L,U]=lu(A);

x=U/(L/b)

或采用LU分解的第2種格式,命令如下:

[L,U ,P]=lu(A);

x=U/(L/P*b)

(2) QR分解

對矩陣X進行QR分解,就是把X分解為一個正交矩陣Q和一個上三角矩陣R的乘積形式。QR分解只能對方陣進行。MATLAB的函數qr可用于對矩陣進行QR分解,其調用格式為:

[Q,R]=qr(X):產生一個一個正交矩陣Q和一個上三角矩陣R,使之滿足X=QR。

[Q,R,E]=qr(X):產生一個一個正交矩陣Q、一個上三角矩陣R以及一個置換矩陣E,使之滿足XE=QR。

實現QR分解后,線性方程組Ax=b的解x=R/(Q/b)或x=E(R/(Q/b))。

例7-3? 用QR分解求解例7-1中的線性方程組。

命令如下:

A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];

b=[13,-9,6,0]’;

[Q,R]=qr(A);

x=R/(Q/b)

或采用QR分解的第2種格式,命令如下:

[Q,R,E]=qr(A);

x=E*(R/(Q/b))

(3) Cholesky分解

如果矩陣X是對稱正定的,則Cholesky分解將矩陣X分解成一個下三角矩陣和上三角矩陣的乘積。設上三角矩陣為R,則下三角矩陣為其轉置,即X=R’R。MATLAB函數chol(X)用于對矩陣X進行Cholesky分解,其調用格式為:

R=chol(X):產生一個上三角陣R,使R‘R=X。若X為非對稱正定,則輸出一個出錯信息。

[R,p]=chol(X):這個命令格式將不輸出出錯信息。當X為對稱正定的,則p=0,R與上述格式得到的結果相同;否則p為一個正整數。如果X為滿秩矩陣,則R為一個階數為q=p-1的上三角陣,且滿足R’R=X(1:q,1:q)。

實現Cholesky分解后,線性方程組Ax=b變成R‘Rx=b,所以x=R/(R’/b)。

例7-4? 用Cholesky分解求解例7-1中的線性方程組。

命令如下:

A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4];

b=[13,-9,6,0]’;

R=chol(A)

??? Error using ==> chol

Matrix must be positive definite

命令執行時,出現錯誤信息,說明A為非正定矩陣。

7.1.2 迭代解法

迭代解法非常適合求解大型系數矩陣的方程組。在數值分析中,迭代解法主要包括 Jacobi迭代法、Gauss-Serdel迭代法、超松弛迭代法和兩步迭代法。

1.Jacobi迭代法

對于線性方程組Ax=b,如果A為非奇異方陣,即aii≠0(i=1,2,…,n),則可將A分解為A=D-L-U,其中D為對角陣,其元素為A的對角元素,L與U為A的下三角陣和上三角陣,于是Ax=b化為:

x=D-1(L+U)x+D-1b

與之對應的迭代公式為:

x(k+1)=D-1(L+U)x(k)+D-1b

這就是Jacobi迭代公式。如果序列{x(k+1)}收斂于x,則x必是方程Ax=b的解。

Jacobi迭代法的MATLAB函數文件Jacobi.m如下:

function [y,n]=jacobi(A,b,x0,eps)

if nargin==3

eps=1.0e-6;

elseif nargin<3

error

return

end

D=diag(diag(A));??? %求A的對角矩陣

L=-tril(A,-1);?????? %求A的下三角陣

U=-triu(A,1);?????? %求A的上三角陣

B=D/(L+U);

f=D/b;

y=B*x0+f;

n=1;????????????????? %迭代次數

while norm(y-x0)>=eps

x0=y;

y=B*x0+f;

n=n+1;

end

例7-5? 用Jacobi迭代法求解下列線性方程組。設迭代初值為0,迭代精度為10-6。

在命令中調用函數文件Jacobi.m,命令如下:

A=[10,-1,0;-1,10,-2;0,-2,10];

b=[9,7,6]’;

[x,n]=jacobi(A,b,[0,0,0]’,1.0e-6)

2.Gauss-Serdel迭代法

在Jacobi迭代過程中,計算時,已經得到,不必再用,即原來的迭代公式Dx(k+1)=(L+U)x(k)+b可以改進為Dx(k+1)=Lx(k+1)+Ux(k)+b,于是得到:

x(k+1)=(D-L)-1Ux(k)+(D-L)-1b

該式即為Gauss-Serdel迭代公式。和Jacobi迭代相比,Gauss-Serdel迭代用新分量代替舊分量,精度會高些。

Gauss-Serdel迭代法的MATLAB函數文件gauseidel.m如下:

function [y,n]=gauseidel(A,b,x0,eps)

if nargin==3

eps=1.0e-6;

elseif nargin<3

error

return

end

D=diag(diag(A));??? %求A的對角矩陣

L=-tril(A,-1);????? %求A的下三角陣

U=-triu(A,1);?????? %求A的上三角陣

G=(D-L)/U;

f=(D-L)/b;

y=G*x0+f;

n=1;????????????????? %迭代次數

while norm(y-x0)>=eps

x0=y;

y=G*x0+f;

n=n+1;

end

例7-6? 用Gauss-Serdel迭代法求解下列線性方程組。設迭代初值為0,迭代精度為10-6。

在命令中調用函數文件gauseidel.m,命令如下:

A=[10,-1,0;-1,10,-2;0,-2,10];

b=[9,7,6]’;

[x,n]=gauseidel(A,b,[0,0,0]’,1.0e-6)

例7-7? 分別用Jacobi迭代和Gauss-Serdel迭代法求解下列線性方程組,看是否收斂。

命令如下:

a=[1,2,-2;1,1,1;2,2,1];

b=[9;7;6];

[x,n]=jacobi(a,b,[0;0;0])

[x,n]=gauseidel(a,b,[0;0;0])

7.2非線性方程數值求解

7.2.1 單變量非線性方程求解

在MATLAB中提供了一個fzero函數,可以用來求單變量非線性方程的根。該函數的調用格式為:

z=fzero(‘fname’,x0,tol,trace)

其中fname是待求根的函數文件名,x0為搜索的起點。一個函數可能有多個根,但fzero函數只給出離x0最近的那個根。tol控制結果的相對精度,缺省時取tol=eps,trace指定迭代信息是否在運算中顯示,為1時顯示,為0時不顯示,缺省時取trace=0。

例7-8? 求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

7.2.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’。

例7-9? 求下列非線性方程組在(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

可見得到了較高精度的結果。

7.3常微分方程初值問題的數值解法

7.3.1 龍格-庫塔法簡介

7.3.2 龍格-庫塔法的實現

基于龍格-庫塔法,MATLAB提供了求常微分方程數值解的函數,一般調用格式為:

[t,y]=ode23(‘fname’,tspan,y0)

[t,y]=ode45(‘fname’,tspan,y0)

其中fname是定義f(t,y)的函數文件名,該函數文件必須返回一個列向量。tspan形式為[t0,tf],表示求解區間。y0是初始狀態列向量。t和y分別給出時間向量和相應的狀態向量。

例7-10? 設有初值問題,試求其數值解,并與精確解相比較(精確解為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為精確值,顯然兩者近似。

例7-11? 求解著名的Van der Pol方程。

例7-12? 有Lorenz模型的狀態方程,試繪制系統相平面圖。

7.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)上的最大值。

例7-13? 求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

喜歡 (0)or分享 (0)

總結

以上是生活随笔為你收集整理的matlab 解函数方程,MATLAB程序设计教程(7)—MATLAB解方程与函数极值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。