MATLAB 6 數值微積分與方程求解

2021-10-03 09:32:24 字數 3909 閱讀 7494

目錄

6.1數值微分與數值積分

6.2線性方程求解

6.3非線性方程求解與函式極值計算

6.4常微分方程數值求解

dx = diff(x) 計算向量x的向前差分,dx(i)=x(i+1)-x(i)

dx = diff(x, n) 計算向量x的n階向前差分

dx = diff(a, n, dim) 計算矩陣的n階差分,dim=1時(預設狀態),按列計算差分,dim=2,按行計算差分

[l, n] = quad(filename, a, b, tol, trace ) 基於自適應辛普森方法

[l, n] = quadl(filename, a, b, tol, trace ) 基於自適應辛普森方法

其中,filename是被積函式名; a和b是定積分的上限和下限(積分限必須是有限的),tol用來控制積分情況,預設時取

l = integral(filename, a, b ) 基於全域性自適應積分方法

其中,,filename是被積函式名;a和b是定積分的上限和下限(積分限可以為無窮大),返回引數i即為定積分的值

[l, err] = quadgk(filename, a, b) 基於自適應高斯-克朗羅德方法

其中,err返回近似誤差範圍,其他引數的含義和用法與quad函式相同.積分上下限可以實無窮大(-inf或inf),也可以是複數.如果積分上下限是複數,則quadgk函式在復平面上求積分.

l = trapz(x, y) 基於梯形積分法

其中,向量x,y定義函式關係y=f(x)

l = integral2(filename, a, b, c, d)

l = quad2d(filename, a, b, c, d)

l = dblquad(filename, a, b, c, d, tol) 

l = integral3(filename, a, b, c, d, e, f)

l = triplequad(filename, a, b, c, d, e, f, tol)

ax=b,因此x=a\b

若右端項為n*m的矩陣,則x=a\b可同時獲得稀疏矩陣a相同的m個線性方程組的數值解x,x為n*m的矩陣.即x(:,j)=a\b(:,j),j=1,2,...,m

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

主要分為以下三種分解方式

lu分解(以此為例)

qr分解

cholesky分解

基本思想如下:

分解函式

[l,u]=lu(a) 產生乙個上三角陣u和乙個變換形式的下三角陣l,使之滿足a=lu,注意,這裡的矩陣a必須是方陣,最後x=u\(l\b)

[l,u,p]=lu(a) 產生乙個上三角陣u和乙個下三角陣以及乙個置換矩陣p,使之滿足pa=lu,最後x=u\(l\p*b)

如果x收斂了,則就是所解的值.

function [y,n]=jacobi(a,b,x0,ep) 

d=diag(diag(a));

l=-tril(a,-1);

u=-triu(a,1);

b=d\(l+u);

f=d\b;

y=b*x0+f;

n=1;

while norm(y-x0)>=ep

x0=y;

y=b*x0+f;

n=n+1;

end

x0為設定的初值,n為迭代次數,下同

function [y,n]=gauseidel(a,b,x0,ep)

d=diag(diag(a));

l=-tril(a,-1);

u=-triu(a,1);

b=(d-l)\u;

f=(d-l)\b;

y=b*x0+f;

n=1;

while norm(y-x0)>=ep

x0=y;

y=b*x0+f;

n=n+1;

end

x=fzero(filename,x0) 其中filename是待求解方程左端的函式表示式,x0是初始值

x=fsolve(filename,x0,option) option為優化引數,可設定為optimset('display','off'),可以求解非線性方程組

f=@(x) [sin(x(1))+x(2)+x(3)^2*exp(x(1)),x(1)+x(2)+x(3),x(1)*x(2)*x(3)];

f([1,1,1])

x=fsolve(f,[1,1,1],optimset('display','off'))

f(x)

[xmin, fmin] = fminbnd(filename, x1, x2, option) 

[xmin, fmin] = fminsearch(filename, x0, option) 

[xmin, fmin] = fminunc(filename, x0, option)  

其中x1,x2為研究區間的左右邊界,x0是表示極值點的初值

線性不等式約束

線性等式約束

非線性不等式約束

非線性等式約束

x的上界和下界

[xmin, fmin] = fmincon(filename, x0, a, b, aep, bep, lbnd, ubnd, nonf, option)

其中xmin, fmin, fiename, x0, option的含義與求最小值函式相同.其餘引數為約束條件,包括線性不等式約束,線性等式約束,x的下界和上界以及定義非線性約束的函式.如果某個約束不存在,則用空矩陣表示.

[t, y] = solver(filename, tspan, y0, option)

f=@(t,y) (y^2-t-2)/4/(t+1);

[t,y]=ode23(f,[0,10],2);

y1=sqrt(t+1)+1;

plot(t,y,'b:',t,y1,'r');

求解函式ode15s,使用方法和上面的一樣

Matlab 數值微積分與方程求解

專題六 數值微積分與方程求解 目錄 一 數值微分與數值積分 1.數值微分 2.數值積分 二 線性方程組求解 先說差分。差分可以分為向前差分,向後差分和中心差分。三者分別如下表述 matlab提供了求向前差分的函式diff,其呼叫格式有3種 舉個例子 求向量 1,34,54,32,56,78 的一階向...

MATLAB 數值微積分

學習筆記 郭彥甫 yan fu kuo 台大生機系 matlab教學 10數值微積分 representing polynomials in matlab values of polynomials polyval a 9,5,3,7 x 2 0.01 5 f polyval a,x plot x,...

MATLAB數值法與微積分

函式之微分為求函式對自變數之導數,或為其斜率 利用數值方法則可以解出其他相關之問題,其應用部份已在前章討論。數值微分有兩種應用,其一是在資料收集完備後,分析其變化速度 其二為即時估計或量測速率。後者需要快速演演算法才能有立即反應。計算斜率,依其定義即為dy dx,在數值分析上必須轉化為可量測之變化量...