matlab近似计算求积分,matlab 实验二 定积分的近似计算
實驗二定積分的近似計算
利用牛頓—萊布尼茲公式雖然可以精確地計算定積分的值,但它僅適用于被積函數的原函數能用初等函數表達出來的情形.如果這點辦不到或者不容易辦到,這就有必要考慮近似計算的方法.在定積分的很多應用問題中,被積函數甚至沒有解析表達式,可能只是一條實驗記錄曲線,或者是一組離散的采樣值,這時只能應用近似方法去計算相應的定積分.
本實驗將主要研究定積分的三種近似計算算法:矩形法、梯形法、拋物線法.對于定積分的近似數值計算,Matlab有專門函數可用.
1.sum(a):求數組a的和.
2.format long:長格式,即屏幕顯示15位有效數字.
(注:由于本實驗要比較近似解法和精確求解間的誤差,需要更高的精度).
3.double():若輸入的是字符則轉化為相應的ASCII碼;若輸入的是整型數值則轉化為相應的實型數值.
4.quad():拋物線法求數值積分.
格式:quad(fun,a,b),注意此處的fun是函數,并且為數值形式的,所以使用*、/、^等運算時要在其前加上小數點,即.*、./、.^等.
例:Q = quad('1./(x.^3-2*x-5)',0,2);
5.trapz():梯形法求數值積分.
格式:trapz(x,y)
其中x為帶有步長的積分區間;y為數值形式的運算(相當于上面介紹的函數fun)
例:計算
x=0:pi/100:pi;y=sin(x);
trapz(x,y)
6.dblquad():拋物線法求二重數值積分.
格式:dblquad(fun,xmin,xmax,ymin,ymax),fun可以用inline定義,也可以通過某個函數文件的句柄傳遞.
例1:Q1 = dblquad(inline('y*sin(x)'), pi, 2*pi, 0, pi)
順便計算下面的Q2,通過計算,比較Q1與Q2結果(或加上手工驗算),找出積分變量x、y的上下限的函數代入方法.
Q2 = dblquad(inline('y*sin(x)'), 0, pi, pi, 2*pi)
例2:Q3 = dblquad(@integrnd, pi, 2*pi, 0, pi)
這時必須存在一個函數文件integrnd.m:
function z = integrnd(x, y)
z = y*sin(x);
7.fprintf(文件地址,格式,寫入的變量):把數據寫入指定文件.
例:x = 0:.1:1;
y = [x; exp(x)];
fid = fopen('exp.txt','w');?? %打開文件
fprintf(fid,'%6.2f %12.8f\n',y);??? %寫入
fclose(fid)???????????????? %關閉文件
8.syms變量1變量2…:定義變量為符號.
9.sym('表達式'):將表達式定義為符號.
解釋:Matlab中的符號運算事實上是借用了Maple的軟件包,所以當在Matlab中要對符號進行運算時,必須先把要用到的變量定義為符號.
10.int(f,v,a,b):求f關于v積分,積分區間由a到b.
11.subs(f,'x',a):將a的值賦給符號表達式f中的x,并計算出值.若簡單地使用subs(f),則將f的所有符號變量用可能的數值代入,并計算出值.
1.矩形法
根據定積分的定義,每一個積分和都可以看作是定積分的一個近似值,即
在幾何意義上,這是用一系列小矩形面積近似小曲邊梯形的結果,所以把這個近似計算方法稱為矩形法.不過,只有當積分區間被分割得很細時,矩形法才有一定的精確度.
針對不同的取法,計算結果會有不同,我們以為例(取),
(1)左點法:對等分區間
,
在區間上取左端點,即取,
0.78789399673078,
理論值,此時計算的相對誤差
(2)右點法:同(1)中劃分區間,在區間上取右端點,即取,
0.78289399673078,
理論值,此時計算的相對誤差
(3)中點法:同(1)中劃分區間,在區間上取中點,即取,
0.78540024673078,
理論值,此時計算的相對誤差
如果在分割的每個小區間上采用一次或二次多項式來近似代替被積函數,那么可以期望得到比矩形法效果好得多的近似計算公式.下面介紹的梯形法和拋物線法就是這一指導思想的產物.
2.梯形法
等分區間
,
相應函數值為
().
曲線上相應的點為
()
將曲線的每一段弧用過點,的弦(線性函數)來代替,這使得每個上的曲邊梯形成為真正的梯形,其面積為
,.
于是各個小梯形面積之和就是曲邊梯形面積的近似值,
,
即
,
稱此式為梯形公式.
仍用的近似計算為例,取,
0.78539399673078,
理論值,此時計算的相對誤差
很顯然,這個誤差要比簡單的矩形左點法和右點法的計算誤差小得多.
3.拋物線法
由梯形法求近似值,當為凹曲線時,它就偏小;當為凸曲線時,它就偏大.若每段改用與它凸性相接近的拋物線來近似時,就可減少上述缺點,這就是拋物線法.
將積分區間作等分,分點依次為
,,
對應函數值為
(),
曲線上相應點為
().
現把區間上的曲線段用通過三點,,的拋物線
來近似代替,然后求函數從到的定積分:
由于,代入上式整理后得
同樣也有
……
將這個積分相加即得原來所要計算的定積分的近似值:
,
即
這就是拋物線法公式,也稱為辛卜生(Simpson)公式.
仍用的近似計算為例,取,
=0.78539816339745,
理論值,此時計算的相對誤差
4.直接應用Matlab命令計算結果
(1)數值計算
方法1:int('1/(1+x^2)','x',0,1)??? (符號求積分)
方法2:quad('1./(1+x.^2)',0,1)(拋物線法求數值積分)
方法3:x=0:0.001:1;
y=1./(1+x.^2);
trapz(x,y)(梯形法求數值積分)
(2)數值計算
方法1:int(int('x+y^2','y',-1,1),'x',0,2)(符號求積分)
方法2:dblquad(inline('x+y^2'),0,2,-1,1)(拋物線法二重數值積分)
1.實現實驗內容中的例子,即分別采用矩形法、梯形法、拋物線法計算,取,并比較三種方法的精確程度.
2.分別用梯形法與拋物線法,計算,取.并嘗試直接使用函數trapz()、quad()進行計算求解,比較結果的差異.
3.試計算定積分.(注意:可以運用trapz()、quad()或附錄程序求解嗎?為什么?)
4.將的近似計算結果與Matlab中各命令的計算結果相比較,試猜測Matlab中的數值積分命令最可能采用了哪一種近似計算方法?并找出其他例子支持你的觀點.
5.通過整個實驗內容及練習,你能否作出一些理論上的小結,即針對什么類型的函數(具有某種單調特性或凹凸特性),用某種近似計算方法所得結果更接近于實際值?
6.學習fulu2sum.m的程序設計方法,嘗試用函數sum改寫附錄1和附錄3的程序,避免for循環.
總結
以上是生活随笔為你收集整理的matlab近似计算求积分,matlab 实验二 定积分的近似计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ppi协议源码 c语言,S7-200 P
- 下一篇: 【matlab】 隐函数作图函数 ezp