基于MATLAB的数值积分问题求解
目錄
一. 由給定數(shù)據(jù)進(jìn)行梯形求積
例題一
例題二
二. 單變量數(shù)值積分問題求積
例題三
例題四
例題五
例題六
一. 由給定數(shù)據(jù)進(jìn)行梯形求積
梯形求積的圖形理解可看如下圖:
把函數(shù)分解成無數(shù)個這種類似的梯形,如下:
?
積分形式:
梯形面積形式:
上式中向量
梯形面積對應(yīng)的MATLAB代碼:
sum((2*y(1:end-1,:)+diff(y)).*diff(x))/2MATLAB自帶有函數(shù):trapz()?來計算數(shù)值梯形積分。調(diào)用格式為:
trapz(x,y)來看幾道例題。
例題一
用梯形法求區(qū)間內(nèi),函數(shù)的定積分值。
解:
MATLAB代碼:
clc;clear; x1=[0:pi/30:pi]'; y=[sin(x1) cos(x1) sin(x1/2)]; x=[x1 x1 x1];S1=sum((2*y(1:end-1,:)+diff(y)).*diff(x))/2 %直接求解S2=trapz(x1,y) %調(diào)用函數(shù)求解運(yùn)行結(jié)果:
S1 =1.998171961343654 ? 0.000000000000000 ? 1.999543052990808
S2 =1.998171961343654 ? 0.000000000000000 ? 1.999543052990808
結(jié)果分析:兩種方法得出的結(jié)果完全一致
例題二
用定步長方法求解積分
解:
MATLAB代碼如下:
clc;clear;%畫圖 x=[0:0.01:3*pi/2]; %這樣賦值能確保3*pi/2點(diǎn)包含在內(nèi) y=cos(15*x); plot(x,y)%求取理論值 syms x; A=int(cos(15*x),0,3*pi/2)%數(shù)值方法 h0=[0.1,0.01,0.001,0.0001,0.00001,0.000001]; %隨著步距h的減小,計算精度逐漸增加 v=[]; for h=h0x=[0:h:3*pi/2];y=cos(15*x);I=trapz(x,y);v=[v;h,I,1/15-I]; %1/15是積分的理論值 end format long; v運(yùn)行結(jié)果:
A =1/15
結(jié)果的解釋:第一列為不同的步長,第二列為對應(yīng)求出的積分值,第三列為與標(biāo)準(zhǔn)積分結(jié)果的差值。
二. 單變量數(shù)值積分問題求積
首先引入辛普森(Simpson)公式。Simpson方法求解上的積分如下:
上式子中
形成圖形解釋,如下:
?MATLAB中可以調(diào)用函數(shù)直接計算如下:
y=quad(Fun,a,b) y=quadl(Fun,a,b) % 求定積分 y=quad(Fun,a,b,c) y=quadl(Fun,a,b,c) %兩種函數(shù)均為變步長 %Fun為函數(shù)的字符串變量 %限定精度的定積分求解,默認(rèn)精度為10-6。 %quadl函數(shù)使用的算法是自適應(yīng)Lobatto算法其精度和速度均遠(yuǎn)高于quad函數(shù)例題三
求解
代碼如下:?
clc;clear;%運(yùn)用符號工具箱 syms x; y0=vpa(int(2/sqrt(pi)*exp(-x^2),0,1.5),60)format long %16位精度 f=@(x)2/sqrt(pi)*exp(-x.^2); y=quadl(f,0,1.5,1e-20) %設(shè)置高精度error=abs(y-y0)運(yùn)行結(jié)果:
?
y0 =0.966105146475310713936933729949905794996224943257461473285748
?
y =0.966105146475311
?
error =0.000000000000000064025228489138917324084325807202
例題四
求解I并畫出f(x)。
,其中f(x)定義為如下:
?解:
(1)畫圖
代碼如下:
x=[0:0.01:2, 2+eps:0.01:4,4]; y=exp(x.^2).*(x<=2)+80./(4-sin(16*pi*x)).*(x>2); y(end)=0; x=[eps, x]; y=[0,y]; %為減少視覺上的誤差,對端點(diǎn)與間斷點(diǎn)(有跳躍)進(jìn)行處理。fill(x,y,'g')運(yùn)行結(jié)果:
?(2)求積分
代碼如下:?
clc;clear; f=@(x)exp(x.^2).*(x<=2)+80./(4-sin(16*pi*x)).*(x>2);%直接調(diào)用quadl求解 I1=quadl(f,0,4)%解析解 syms x; I2=vpa(int(exp(x^2),0,2)+int(80/(4-sin(16*pi*x)),2,4))運(yùn)行結(jié)果:
I1 =57.764450169467679
I2 =57.76445012505301033331523538518
以下介紹一個新的MATLAB可調(diào)用的函數(shù):integral數(shù)值積分
q=integral(fun,xmin,xmax,Name,Value)
例題五
計算函數(shù)的積分,。(此題為廣義積分)
解:
MATLAB代碼如下:
clc;clear; fun=@(x)exp(-x.^2).*log(x).^2; q=integral(fun,0,Inf)運(yùn)行結(jié)果:q =1.947522220295560
例題六
計算參數(shù)化函數(shù)?的積分,。
MATLAB代碼如下:
clc;clear; c=5; fun=@(x,c)1./(x.^3-2*x-c); q=integral(@(x)fun(x,c),0,2)運(yùn)行結(jié)果:q =?-0.460501533846733
再補(bǔ)充舉一個例子:
代碼:
clc;clear; fun=@(x)log(x); format long q1=integral(fun,0,1) q2=integral(fun,0,1,'RelTol',0,'AbsTol',1e-12)運(yùn)行結(jié)果:
q1 =-1.000000010959678
q2 =-1.000000000000010
總結(jié)
以上是生活随笔為你收集整理的基于MATLAB的数值积分问题求解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python著作_Python 常用库和
- 下一篇: 英语(2)-- 实用口语100句