




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)題目2 Romberg積分法摘要 考慮積分欲求其近似值,可以采用如下公式: (復(fù)化)梯形公式 (復(fù)化)辛卜生公式 (復(fù)化)柯特斯公式 這里,梯形公式顯得算法簡(jiǎn)單,具有如下遞推關(guān)系因此,很容易實(shí)現(xiàn)從低階的計(jì)算結(jié)果推算出高階的近似值,而只需要花費(fèi)較少的附加函數(shù)計(jì)算。但是,由于梯形公式收斂階較低,收斂速度緩慢。所以,如何提高收斂速度,自然是人們極為關(guān)心的課題。為此,記為將區(qū)間進(jìn)行等份的復(fù)化梯形積分結(jié)果,為將區(qū)間進(jìn)行等份的復(fù)化辛卜生積分結(jié)果,為將區(qū)間進(jìn)行等份的復(fù)化柯特斯積分結(jié)果。根據(jù)李查遜(Richardson)外推加速方法,可得到 可以證明,如果充分光滑,則有 (固定) 這是一個(gè)收斂速度更快的一
2、個(gè)數(shù)值求積公式,我們稱為龍貝格積分法。 該方法的計(jì)算可按下表進(jìn)行 很明顯,龍貝格計(jì)算過程在計(jì)算機(jī)上實(shí)現(xiàn)時(shí),只需開辟一個(gè)一維數(shù)組,即每次計(jì)算的結(jié)果,可存放在位置上,其最終結(jié)果是存放在位置上。前言利用龍貝格積分法計(jì)算積分程序設(shè)計(jì)流程: 1準(zhǔn)備初值,計(jì)算且(為等份次數(shù)) 2按梯形公式的遞推關(guān)系,計(jì)算 3按龍貝格公式計(jì)算加速值 4精度控制。對(duì)給定的精度,若則終止計(jì)算,并取作為所求結(jié)果;否則,重復(fù)24步,直到滿足精度為止。問題1(1) 程序運(yùn)行如下:I = Romberginterg(inline(x.2.*exp(x),0,1,25,1e-6)I = 0.7183(2) 程序運(yùn)行如下:I = Romb
3、erginterg(inline(exp(x).*sin(x),1,3,25,1e-6)I = 10.9502(3) 程序運(yùn)行如下:I = Romberginterg(inline(4./(1+x.2),0,1,25,1e-6)I = 3.1416(4) 程序運(yùn)行如下:I = Romberginterg(inline(1./(1+x),0,1,25,1e-6)I = 0.6931問題2(1) 程序運(yùn)行如下:I = Romberginterg(inline(cos(x)./sqrt(1-x),0,1,25,1e-6)I = NaN因?yàn)楹瘮?shù)在x=0處出現(xiàn)了0/0的情況,極限為1,所以Matlab的
4、結(jié)果顯示為NaN非數(shù),解決方法是把下限0改為一個(gè)小數(shù)eps。I = Romberginterg(inline(sin(x)./x),eps,1,25,1e-6)I = 0.9461(2) 程序運(yùn)行如下:I = Romberginterg(inline(cos(x)./sqrt(1-x),0,1,25,1e-6)I = NaN與(1)的原因相同,函數(shù)在x=1處出現(xiàn)了0/0的情況,結(jié)果為無窮,此時(shí)應(yīng)選擇變換,將積分變?yōu)?,再進(jìn)行變換,將積分變?yōu)?,變換后輸入命令:I = RombergInterg(inline(2*sin(x).*cos(sin(x).2),0,pi/2,25,1e-6)I = 1.
5、4996(3) 程序運(yùn)行如下:I = Romberginterg(inline(cos(x)./sqrt(x),0,1,25,1e-6)I = NaN函數(shù)在x=0處出現(xiàn)了1/0的情況,結(jié)果為無窮。先將積分變?yōu)?,再做變換,I = 2*Romberginterg(inline(cos(x.2),0,1,25,1e-6)I = 1.8090(4) 程序運(yùn)行如下:I = Romberginterg(inline(x.*sin(x)./(1-x.2),-1,1,25,1e-6)I = NaN函數(shù)在x=1,-1處出現(xiàn)了sin1/0的情況,結(jié)果為無窮。被積函數(shù)為偶函數(shù),做變換,積分變?yōu)镮 = 2*Rombe
6、rginterg(inline(sin(x).*sin(sin(x),0,pi/2,25,1e-6)I = 1.3825或者使用Gauss-Chebyshev求積公式:I = GaussInterg(inline(x.*sin(x),Chebyshev,-1,1,1e-6)I = 1.3825由于Gauss-Chebyshev求積公式求的是在的積分因此此處的為。問題3(1) 程序運(yùn)行如下:I = Romberginterg(inline(exp(-x.2),-10,10,25,1e-6)I = 1.7725由于積分區(qū)間無限,而函數(shù)在-10,10外很小,可以用函數(shù)在-10,10上的積分近似這個(gè)無
7、窮積分?;蛘呤褂肎auss-Hermite求積公式:I = GaussInterg(inline(x+1-x),Hermite,0,0,1e-6)I = 1.7725由于Gauss-Hermite求積公式求的是在的積分因此此處的為1。(2) 程序運(yùn)行如下:先做變換,則原積分變?yōu)镮 = 2*Romberginterg(inline(1./(1+x.2),0,1,25,1e-6)I = 1.5708(3) 程序運(yùn)行如下:使用Gauss-Hermite求積公式:I = GaussInterg(inline(cos(x).3),Hermite,0,0,1e-6)I = 1.0820由于Gauss-He
8、rmite求積公式求的是在的積分因此此處的為。(4) 程序運(yùn)行如下:使用Gauss-Laguerre求積公式:I = GaussInterg(inline(sin(x).2),Laguerre,0,0,1e-6)I = 0.4000由于Gauss-Laguerre求積公式求的是在的積分因此此處的為。使用的函數(shù)function I = RombergInterg(fun, a, b, npanel, tol, flag)% RombergInterg 用Romberg方法求積分% Synopsis: I = RombergInteg(fun,a,b,n,tol)% Input: fun = (s
9、tring) 被積函數(shù)的函數(shù)名% a, b = 積分下限和積分上限% npanel = (optional) 將積分區(qū)間平分的段數(shù),默認(rèn)為25% tol = (optional) 計(jì)算誤差上限,默認(rèn)為5e-9% flag = (optional) 是否顯示Romberg-T數(shù)表,默認(rèn)為0為不顯示% Output: I = 通過Romberg方法求積分的近似值 if nargin 4 npanel = 25; end if nargin 5 tol = 5e-9; end if nargin = tol T(m,1) = TrapezoidInteg(fun, a, b, 2m*npanel);
10、 %計(jì)算第m行T0(h/2m) T(m,m) = 0; %將矩陣T變成m*m for n = 2:m T(m,n) = ( 4(n-1)*T(m,n-1) - T(m-1,n-1) / (4(n-1) - 1); %Tm(h/2k)與Tm-1(h/2(k+1)和Tm-1(h/2k)的遞推關(guān)系 end err = abs( T(m,m) - T(m-1,m-1) ); %計(jì)算誤差值 m = m + 1; %計(jì)算下一行 end I = T(m-1,m-1); if flag = 0 disp(T); endfunction I = TrapezoidInteg(fun, a, b, npanel)
11、% TrapezoidInteg 用復(fù)化梯形公式求積分% Synopsis: I = TrapezoidInteg(fun,a,b,n)% Input: fun = (string) 被積函數(shù)的函數(shù)名% a, b = 積分下限和積分上限% npanel = (optional) 將積分區(qū)間平分的段數(shù),默認(rèn)為25% Output: I = 通過復(fù)化梯形公式求積分的近似值 if nargin 4 npanel = 25; end nnode = npanel + 1; %節(jié)點(diǎn)數(shù) = 段數(shù) + 1 h = (b-a)/(nnode-1); %步長(zhǎng) x = a:h:b; %將積分區(qū)間分段 f = fe
12、val(fun,x); %求節(jié)點(diǎn)處被積函數(shù)的值 I = h * ( 0.5*f(1) + sum(f(2:nnode-1) + 0.5*f(nnode) );function I = GaussInterg(fun, type, a, b, tol)% GaussInterg 用Gauss型求積公式求積分,具體形式由使用者選取% Synopsis: I = GaussInterg(fun, type, a, b)% I = GaussInterg(fun, type, a, b, tol)% Input: fun = (string) 被積函數(shù)的函數(shù)名% type = (string) 具體G
13、auss求積公式的形式% a,b = 積分上下限,Laguerre只計(jì)算0到inf,Hermite只計(jì)算-inf到inf,所以a,b對(duì)這兩種形式無效% tol = (optional) 誤差容忍限度,默認(rèn)為5e-5% Output: I = 通過Gauss型求積公式求積分的近似值 if nargin = tol switch type case Legendre %計(jì)算無奇點(diǎn)被積函數(shù)在-1到1的積分 I = GaussLegendreInterg(fun, a, b, n); case Chebyshev %計(jì)算被積函數(shù)形如 f(x)/sqrt(1-x2)在-1到1的積分 I = GaussC
14、hebyshevInterg(fun, a, b, n); case Laguerre %計(jì)算被積函數(shù)形如 exp(-x)*f(x)的在0到inf的積分 I = GaussLaguerreInterg(fun, n); case Hermite %計(jì)算被積函數(shù)形如 exp(-x2)*f(x)的在-inf到inf的積分 I = GaussHermiteInterg(fun, n); otherwise error(No such type!); end err = abs(I - IOld); %計(jì)算誤差 IOld = I; %把IOld賦值為I進(jìn)行下次迭代 n = n+1; %多項(xiàng)式節(jié)點(diǎn)遞增
15、endfunction I = GaussLegendreInterg(fun, a, b, n)% GaussLegendreInterg 用Gauss-Legendre型求積公式計(jì)算無奇點(diǎn)被積函數(shù)在-1到1的積分% Synopsis: I = GaussLegendreInterg(fun, a, b)% Input: fun = (string) 被積函數(shù)的函數(shù)名% a,b = 積分下限和積分上限% n = (optional) 高斯節(jié)點(diǎn)的個(gè)數(shù),默認(rèn)為7% Output: I = 通過Gauss型求積公式求積分的近似值 if nargin 4 n = 7; end if round(n)
16、 = n | n 1 error(Gauss節(jié)點(diǎn)個(gè)數(shù)必須為正整數(shù)); end p = LegendreIter(n); %構(gòu)造n階勒讓德多項(xiàng)式 p = p/polyval(p,1); %使Pn(1) = 1; for i = 1:n+1 %構(gòu)造p的導(dǎo)數(shù)p1 p1(i) = (n-i+1)*p(i); end p1(n+1) = ; r = roots(p); %計(jì)算勒讓德多項(xiàng)式的根 L = polyval(p1,r); %計(jì)算與勒讓德多項(xiàng)式的根匹配的高斯積分系數(shù) A = 2./(1-r.2)./L.2; xi = ( (b-a)*r + (a+b) ) / 2; %找出勒讓德多項(xiàng)式的根在a,b
17、上對(duì)應(yīng)的數(shù)值xi yi = feval(fun, xi); %計(jì)算f(xi) I = (b-a)/2 * (A*yi); %I = sum(Ai*yi),前面的系數(shù)是積分區(qū)間改變是增加的常數(shù) function I = GaussChebyshevInterg(fun, a, b, n)% GaussChebyshevInterg 用Gauss-Chebyshev型求積公式求積分計(jì)算被積函數(shù)形如 f(x)/sqrt(1-x2)在-1到1的積分% Synopsis: I = GaussChebyshevInterg(fun, a, b)% Input: fun = (string) 被積函數(shù)的函數(shù)
18、名% a,b = 積分下限和積分上限% n = (optional) 高斯節(jié)點(diǎn)的個(gè)數(shù),默認(rèn)為7% Output: I = 通過Gauss型求積公式求積分的近似值 if nargin 4 n = 7; end if round(n) = n | n 1 error(Gauss節(jié)點(diǎn)個(gè)數(shù)必須為正整數(shù)); end p = ChebyshevIter(n); %構(gòu)造n階切比雪夫多項(xiàng)式 A = pi/n * ones(n,1); %計(jì)算與切比雪夫多項(xiàng)式的根匹配的高斯積分系數(shù) r = roots(p); %計(jì)算切比雪夫多項(xiàng)式的根 xi = ( (b-a)*r + (a+b) ) / 2; %找出切比雪夫多項(xiàng)
19、式的根在a,b上對(duì)應(yīng)的數(shù)值xi yi = feval(fun, xi); %計(jì)算f(xi) I = (b-a)/2 * (A*yi); %I = sum(Ai*yi),前面的系數(shù)是積分區(qū)間改變是增加的常數(shù) function I = GaussLaguerreInterg(fun, n)% GaussLaguerreInterg 用Gauss-Laguerre型求積公式求積分計(jì)算被積函數(shù)形如 exp(-x)*f(x)的在0到inf的積分% Synopsis: I = GaussLaguerreInterg(fun)% I = GaussLaguerreInterg(fun, n)% Input:
20、 fun = (string) 被積函數(shù)的函數(shù)名% n = (optional) 高斯節(jié)點(diǎn)的個(gè)數(shù),默認(rèn)為7% Output: I = 通過Gauss型求積公式求積分的近似值 if nargin 2 n = 7; end if round(n) = n | n 1 error(Gauss節(jié)點(diǎn)個(gè)數(shù)必須為正整數(shù)); end p = LaguerreIter(n); %構(gòu)造n階拉蓋爾多項(xiàng)式 p1 = LaguerreIter(n+1); %構(gòu)造n+1階拉蓋爾多項(xiàng)式 xi = roots(p); %計(jì)算拉蓋爾多項(xiàng)式的根 L = polyval(p1,xi); %計(jì)算與拉蓋爾多項(xiàng)式的根匹配的高斯積分系數(shù)
21、A = xi./(n+1)2*L.2); yi = feval(fun, xi); %計(jì)算f(xi) I = A*yi; %I = sum(Ai*yi),前面的系數(shù)是積分區(qū)間改變是增加的常數(shù) function I = GaussHermiteInterg(fun, n)% GaussHermiteInterg 用Gauss-Hermite型求積公式求積分計(jì)算被積函數(shù)形如 exp(-x2)*f(x)的在-inf到inf的積分% Synopsis: I = GaussHermiteInterg(fun)% I = GaussHermiteInterg(fun, n)% Input: fun = (
22、string) 被積函數(shù)的函數(shù)名% n = (optional) 高斯節(jié)點(diǎn)的個(gè)數(shù),默認(rèn)為7% Output: I = 通過Gauss型求積公式求積分的近似值 if nargin 2 n = 7; end if round(n) = n | n 1 error(Gauss節(jié)點(diǎn)個(gè)數(shù)必須為正整數(shù)); end p = HermiteIter(n); %構(gòu)造n階埃爾米特多項(xiàng)式 p1 = HermiteIter(n-1); %構(gòu)造n-1階埃爾米特多項(xiàng)式 xi = roots(p); %計(jì)算埃爾米特多項(xiàng)式的根 L = polyval(p1(1:n),xi); %計(jì)算與埃爾米特多項(xiàng)式的根匹配的高斯積分系數(shù) A
23、 = 2(n-1)*sqrt(pi)*factorial(n) ./ (n2 * L.2); yi = feval(fun, xi); %計(jì)算f(xi) I = A*yi; %I = sum(Ai*yi),前面的系數(shù)是積分區(qū)間改變是增加的常數(shù) function p = LegendreIter(n)% LegendreIter 用遞推的方法計(jì)算n次勒讓德多項(xiàng)式的系數(shù)向量 Pn+2(x) = (2*i+3)/(i+2) * x*Pn+1(x) - (i+1)/(i+2) * Pn(x)% Synopsis: p = LegendreIter(n)% Input: n = 勒讓德多項(xiàng)式的次數(shù)% O
24、utput: p = n次勒讓德多項(xiàng)式的系數(shù)向量 if round(n) = n | n 0 error(n必須是一個(gè)非負(fù)整數(shù)); end if n = 0 %P0(x) = 1 p = 1; return; elseif n = 1 %P1(x) = x p = 1 0; return; end pBk = 1; %初始化三項(xiàng)遞推公式后項(xiàng)為P0 pMid = 1 0; %初始化三項(xiàng)遞推公式中項(xiàng)為P1 for i = 0:n-2 pMidCal = zeros(1,i+3); %構(gòu)造用于計(jì)算的x*Pn+1 pMidCal(1:i+2) = pMid; pBkCal = zeros(1,i+3)
25、; %構(gòu)造用于計(jì)算的Pn pBkCal(3:i+3) = pBk; pFwd = (2*i+3)/(i+2) * pMidCal - (i+1)/(i+2) * pBkCal; %勒讓德多項(xiàng)式三項(xiàng)遞推公式Pn+2(x) = (2*i+3)/(i+2) * x*Pn+1(x) - (i+1)/(i+2) * Pn(x) pBk = pMid; %把中項(xiàng)變?yōu)楹箜?xiàng)進(jìn)行下次迭代 pMid = pFwd; %把前項(xiàng)變?yōu)橹许?xiàng)進(jìn)行下次迭代 end p = pFwd;function p = ChebyshevIter(n)% ChebyshevIter 用遞推的方法計(jì)算n次勒讓德-切比雪夫多項(xiàng)式的系數(shù)向量
26、Tn+2(x) = 2*x*Tn+1(x) - Tn(x)% Synopsis: p = ChebyshevIter(n)% Input: n = 勒讓德-切比雪夫多項(xiàng)式的次數(shù)% Output: p = n次勒讓德-切比雪夫多項(xiàng)式的系數(shù)向量 if round(n) = n | n 0 error(n必須是一個(gè)非負(fù)整數(shù)); end if n = 0 %T0(x) = 1 p = 1; return; elseif n = 1 %T1(x) = x p = 1 0; return; end pBk = 1; %初始化三項(xiàng)遞推公式后項(xiàng)為T0 pMid = 1 0; %初始化三項(xiàng)遞推公式中項(xiàng)為T1 f
27、or i = 0:n-2 pMidCal = zeros(1,i+3); %構(gòu)造用于計(jì)算的x*Tn+1 pMidCal(1:i+2) = pMid; pBkCal = zeros(1,i+3); %構(gòu)造用于計(jì)算的Pn pBkCal(3:i+3) = pBk; pFwd = 2*pMidCal - pBkCal; %勒讓德-切比雪夫多項(xiàng)式三項(xiàng)遞推公式Tn+2(x) = 2*x*Tn+1(x) - Tn(x) pBk = pMid; %把中項(xiàng)變?yōu)楹箜?xiàng)進(jìn)行下次迭代 pMid = pFwd; %把前項(xiàng)變?yōu)橹许?xiàng)進(jìn)行下次迭代 end p = pFwd;function p = LaguerreIter(n
28、)% LaguerreIter 用遞推的方法計(jì)算n次拉蓋爾多項(xiàng)式的系數(shù)向量 Ln+2(x) = (2*n+3-x)*Ln+1(x) - (n+1)*Ln(x)% Synopsis: p = LaguerreIter(n)% Input: n = 拉蓋爾多項(xiàng)式的次數(shù)% Output: p = n次拉蓋爾多項(xiàng)式的系數(shù)向量 if round(n) = n | n 0 error(n必須是一個(gè)非負(fù)整數(shù)); end if n = 0 %L0(x) = 1 p = 1; return; elseif n = 1 %L1(x) = -x+1 p = -1 1; return; end pBk = 1; %初
29、始化三項(xiàng)遞推公式后項(xiàng)為L(zhǎng)0 pMid = -1 1; %初始化三項(xiàng)遞推公式中項(xiàng)為L(zhǎng)1 for i = 0:n-2 pMidCal1 = zeros(1,i+3); %構(gòu)造用于計(jì)算的x*Ln+1(x) pMidCal1(1:i+2) = pMid; pMidCal2 = zeros(1,i+3); %構(gòu)造用于計(jì)算的Ln+1(x) pMidCal2(2:i+3) = pMid; pBkCal = zeros(1,i+3); %構(gòu)造用于計(jì)算的Ln(x) pBkCal(3:i+3) = pBk; pFwd =( (2*i+3)*pMidCal2 - pMidCal1 - (i+1)*pBkCal )/ (i+2); %拉蓋爾多項(xiàng)式三項(xiàng)遞推公式Ln+2(x) = (2*n+3-x)*Ln+1(x) - (n+1)2*Ln(x) pBk = pMid; %把中項(xiàng)變?yōu)楹箜?xiàng)進(jìn)行下次迭代 pMid = pFwd; %把前項(xiàng)變?yōu)橹许?xiàng)進(jìn)行下次迭代 end p = pFwd;function p = HermiteIter(n)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 山西省晉源區(qū)第七小學(xué)2025屆三下數(shù)學(xué)期末學(xué)業(yè)質(zhì)量監(jiān)測(cè)試題含解析
- 重慶醫(yī)科大學(xué)《建筑師職業(yè)基礎(chǔ)(含務(wù)實(shí)與法規(guī))》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東省聊城莘縣聯(lián)考2025屆初三下學(xué)期中考試英語試題含答案
- 伊寧縣2025屆五下數(shù)學(xué)期末調(diào)研模擬試題含答案
- 上海市第八中學(xué)2025屆中考預(yù)測(cè)金卷:數(shù)學(xué)試題(浙江卷)含解析
- 西南科技大學(xué)《電視綜藝欄目編導(dǎo)》2023-2024學(xué)年第二學(xué)期期末試卷
- 接收發(fā)展對(duì)象大會(huì)流程
- 2025數(shù)據(jù)中心服務(wù)器采購(gòu)與維護(hù)工程合同
- 《2025高速數(shù)據(jù)傳輸接入服務(wù)合同》
- 2025設(shè)備租賃合同「樣式」
- 國(guó)家開放大學(xué)畢業(yè)生登記表-
- 電腦故障診斷卡說明書
- 企業(yè)重組所得稅特殊性處理實(shí)務(wù)(深圳市稅務(wù)局)課件
- 2022年7月2日江蘇省事業(yè)單位招聘考試《綜合知識(shí)和能力素質(zhì)》(管理崗客觀題)及答案
- 瓦斯超限事故專項(xiàng)應(yīng)急預(yù)案
- 苗木質(zhì)量保證措施
- 【公司利潤(rùn)質(zhì)量研究國(guó)內(nèi)外文獻(xiàn)綜述3400字】
- 水利工程分部分項(xiàng)劃分表
- 學(xué)生班級(jí)衛(wèi)生值日表模板下載
- 責(zé)任商業(yè)聯(lián)盟RBA(CSR)知識(shí)培訓(xùn)
- 放射工作人員培訓(xùn)考核試題及答案
評(píng)論
0/150
提交評(píng)論