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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于MATLAB的数值积分问题求解

發布時間:2024/1/1 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于MATLAB的数值积分问题求解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一. 由給定數據進行梯形求積

例題一

例題二

二. 單變量數值積分問題求積

例題三

例題四

例題五

例題六


一. 由給定數據進行梯形求積

梯形求積的圖形理解可看如下圖:

把函數分解成無數個這種類似的梯形,如下:

?

積分形式:

梯形面積形式:

上式中向量

梯形面積對應的MATLAB代碼:

sum((2*y(1:end-1,:)+diff(y)).*diff(x))/2

MATLAB自帶有函數:trapz()?來計算數值梯形積分。調用格式為:

trapz(x,y)

來看幾道例題。

例題一

用梯形法求區間內,函數的定積分值。

解:

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) %調用函數求解

運行結果:

S1 =1.998171961343654 ? 0.000000000000000 ? 1.999543052990808


S2 =1.998171961343654 ? 0.000000000000000 ? 1.999543052990808

結果分析:兩種方法得出的結果完全一致

例題二

用定步長方法求解積分

解:

MATLAB代碼如下:

clc;clear;%畫圖 x=[0:0.01:3*pi/2]; %這樣賦值能確保3*pi/2點包含在內 y=cos(15*x); plot(x,y)%求取理論值 syms x; A=int(cos(15*x),0,3*pi/2)%數值方法 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

運行結果

A =1/15

結果的解釋:第一列為不同的步長,第二列為對應求出的積分值,第三列為與標準積分結果的差值。

二. 單變量數值積分問題求積

首先引入辛普森(Simpson)公式。Simpson方法求解上的積分如下:

上式子中

形成圖形解釋,如下:

?MATLAB中可以調用函數直接計算如下:

y=quad(Fun,a,b) y=quadl(Fun,a,b) % 求定積分 y=quad(Fun,a,b,c) y=quadl(Fun,a,b,c) %兩種函數均為變步長 %Fun為函數的字符串變量 %限定精度的定積分求解,默認精度為10-6。 %quadl函數使用的算法是自適應Lobatto算法其精度和速度均遠高于quad函數

例題三

求解

代碼如下:?

clc;clear;%運用符號工具箱 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) %設置高精度error=abs(y-y0)

運行結果:

?
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]; %為減少視覺上的誤差,對端點與間斷點(有跳躍)進行處理。fill(x,y,'g')

運行結果:

?(2)求積分

代碼如下:?

clc;clear; f=@(x)exp(x.^2).*(x<=2)+80./(4-sin(16*pi*x)).*(x>2);%直接調用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))

運行結果:

I1 =57.764450169467679
I2 =57.76445012505301033331523538518

以下介紹一個新的MATLAB可調用的函數:integral數值積分

q=integral(fun,xmin,xmax,Name,Value)

例題五

計算函數的積分,。(此題為廣義積分)

解:

MATLAB代碼如下:

clc;clear; fun=@(x)exp(-x.^2).*log(x).^2; q=integral(fun,0,Inf)

運行結果:q =1.947522220295560

例題六

計算參數化函數?的積分,。

MATLAB代碼如下:

clc;clear; c=5; fun=@(x,c)1./(x.^3-2*x-c); q=integral(@(x)fun(x,c),0,2)

運行結果:q =?-0.460501533846733

再補充舉一個例子:

代碼:

clc;clear; fun=@(x)log(x); format long q1=integral(fun,0,1) q2=integral(fun,0,1,'RelTol',0,'AbsTol',1e-12)

運行結果:


q1 =-1.000000010959678


q2 =-1.000000000000010

總結

以上是生活随笔為你收集整理的基于MATLAB的数值积分问题求解的全部內容,希望文章能夠幫你解決所遇到的問題。

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