A. 用matlab,龍貝格演算法計算∫(0到1)[x/(4+x²)]dx的近似值。 求程序代碼!!!
%龍貝格求積演算法function I=romberg(a,b)h=b-a;T(1)=h/2*(fun(a)+fun(b));m=1;while 1 h=h/2; S(1)=1/2*T(1)+h*sumf(2^(m-1),a,h); for j=1:m S(j+1)=S(j)+(S(j)-T(j))/(4^j-1); end if abs(S(m+1)-T(m))<1e-6 break; end T=S;m=m+1;endI=S(m+1);end
function f=sumf(m,a,h)for j=1:m y(j)=fun(a+(2*j-1)*h);endf=sum(y);end
function f=fun(x)f=x/(4+x^2);end結果:
>> I=romberg(0,1)
I =
0.111571775646293
>>
B. 龍貝格演算法 橢圓周長 請幫忙修改一下程序~!!!!!!
1、在for(i=1;i<=pow(2,k-1);i++)之前加t=0;否則t重復累加;
2、for(i=1;i<pow(2,k-1);i++)改成for(i=1;i<=pow(2,k-1);i++),i需執行到i=pow(2,k-1);
3、調換for(k=0;k<20;k++)
{
for(m=1;m<4;m++)
的順序,改為
for(m=1;m<4;m++)
{
for(k=0;k<21-m;k++)否則在算T[k][m]時,T[k+1][m-1]還未知
4、並把k<20改成k<21-m;因為辛普森序列比梯形序列少一項,科茨序列比辛普森序列少一項,龍貝格序列比科茨序列少一項
話說哦。k取20是不太大了點啊,2的20次方可是很大的咯。其實k取6應該就能達到精度要求了吧。
C. 什麼是龍貝格演算法
http://ke..com/view/2352953.html
D. 龍貝格演算法就積分的c語言程序
C++實現如下:
#include<iostream>
#include<cmath>
using namespace std;
const int MAXRepeat = 100; //最大允許重復
double function(double x)//被積函數,根據自己的需要手工輸入
{
double s;
s = 1.0 / (1 + x);
return s;
}
void Romberg(double a, double b, double epsion, double f(double x))
{
int m = 1;
int n = 1;
int k;
double h;
double ep;
double p;
double xk;
double s;
double q;
double T[MAXRepeat];
h = b - a;
T[0] = 0.5 * h * (f(a) + f(b));
ep = epsion + 1.0;
while ((ep >= epsion) && (m < MAXRepeat))
{
p = 0.0;
for (k = 0; k < n; k++)
{
xk = a + (k + 0.5) * h; // n-1
p = p + f(xk); //計算∑f(xk+h/2),T
} // k=0
p = (T[0] + h * p) / 2.0; //T`m`(h/2),變步長梯形求積公式
s = 1.0;
for (k = 1; k <= m; k++)
{
s = 4.0 * s; //[pwww.hbbz08.com ow(4,m)T`m`(h/2)-T`m`(h)]/[pow(4,m)-1],2m階牛頓柯斯特公式,即龍貝格公式
q = (s * p - T[k - 1]) / (s - 1.0);
T[k-1] = p;
p = q;
}
ep = fabs(q - T[m - 1]);
m++;
T[m - 1] = q;
n++; // 2 4 8 16
h /= 2.0;
}
for (int i = 0; i < m; i++)
{
int j;
if (!(i % j))
{
cout<<T[i]<<endl;
}
else
{
cout<<T[i]<<" ";
}
j++;
E. 龍貝格求積公式的演算法
對區間[a, b],令h=b-a構造梯形值序列{T2K}。
T1=h[f(a)+f(b)]/2
把區間二等分,每個小區間長度為 h/2=(b-a)/2,於是
T2 =T1/2+[h/2]f(a+h/2)
把區間四(2)等分,每個小區間長度為h/2 =(b-a)/4,於是
T4 =T2/2+[h/2][f(a+h/4)+f(a+3h/4).....................
把[a,b] 2等分,分點xi=a+(b-a)/ 2 ·i (i =0,1,2 · · · 2k)每個小區間長度為(b-a)/ 2 .
例:
I = ∫(4/(1+X) )dx 積分區間為0到1.
解 按上述五步計算,此處 f(x)=4/(1+x) a=0 b=1 f(0)=4 f(1)=2
由梯形公式得
T1=1/2[f(0)+f(1)]=3
計算f(1/2)=16/5 用變步長梯形公式得
T2=1/2[T1+f(1/2)]=3.1
由加速公式得
S1=1/3(4T2-T1)=3.133333333
求出f(1/4) f(3/4) 進而求得
T4=1/2{T2+1/2[f(1/4)+f(3/4)]}
=3.131176471
S2=1/3(4T4-T2)=3.141568628
C1=1/15(16S2-S1)=3.142117648
計算f(1/8) f(3/8) f(5/8) f(7/8)進而求得
T8=1/2{T4+1/4[f(1/8)+f(3/8)+f(5/8)+f(7/8)]}
=3.138988495
S4=1/3(4T8-T4)=3.141592503
C2=1/15(16S4-S2)=3.141594095
R1=1/63(64C2-C1)=3.141585784
把區間再二分,重復上述步驟算得
T16=3.140941613 S8=3.141592652
C4=3.141592662 R2=3.141592640
由於 |R1-R2|<=0.00001,計算可停止,取R2=3.14159 N Tn Sn Cn Rn 1 3 3.133333333 3.142117648 3.141585784 2 3.1 3.141568628 3.141594095 3.141592640 4 3.131176471 3.141592503 3.141592662 8 3.138988495 3.141592652 16 3.140941613
F. 用龍貝格演算法計算∫(0到1)[x/(4+x²)]dx的近似值。
% 自定義函數
function y = f(x)
y = x/(4+x^2);
end
% 龍貝格演算法
function result = romberg(f,a,b,e)
h = b-a;
k = 0;
T(1,1)=(b-a)*(f(a)+f(b))/2;
while true
k = k+1;
sum = 0;
for i=1:2:2^k
sum = sum + f(a+i*h/2^k);
end
T(k+1,1) = T(k,1)/2 + (h/2^k)*sum;
for i=1:k
T(k+1,i+1) = ((4^i)*T(k+1,i)-T(k,i))/(4^i-1);
end
if abs(T(k+1,1)-T(k,1))<e
result = T(k+1,1);
return;
end
end
%主程序
clc;
clear;
%精確顯示
format long e;
disp('標准答案:');
(1/2)*log(5/4)
disp('龍貝格積分:');
romberg(@f,0,1,0.000000001)
運行結果:
標准答案:
ans =
1.115717756571049e-01
龍貝格積分:
ans =
1.115717754956757e-01
>>
G. 龍貝格演算法用二維數組的存儲方式如何實現
使用字元串拷貝函數strcpy(recordset2[j*iNum+tempi][FILE_NAME_LENGTH],recordset[j*iNum+tempi][FILE_NAME_LENGTH]);
H. 龍貝格求積公式的簡介
龍貝格求積公式也稱為逐次分半加速法。它是在梯形公式、辛普森公式和柯特斯公式之間的關系的基礎上,構造出一種加速計算積分的方法。 作為一種外推演算法, 它在不增加計算量的前提下提高了誤差的精度.
在等距基點的情況下,用計算機計算積分值通常都採用把區間逐次分半的方法進行。這樣,前一次分割得到的函數值在分半以後仍可被利用,且易於編程。
I. 用matlab龍貝格演算法
主程序
clc;
clear;
format long e;%精確顯示
y=18;
T=zeros(y,y);%定義長度為y的矩陣T
for i=0:y-1
T(i+1)=i;%對矩陣T的第一行賦初值
end
a=0;
b=1;
T(1,2)=(b-a)*(1+f(b))/2;%算出T1
for l=2:y
sum=0;
for j=1:2^(l-1)
sum=sum+f(a+(2*j-1)*(b-a)/2^l);
end
T(l,2)=T(l-1,2)/2+((b-a)/2^l)*sum; %算出梯形序列
if (T(l,2)-T(l-1,2))<0.0000005; %判斷是否符合精度
break;
end
end
h=1;
for m=1:y-2
for k=h:(y+h-m-1)
T(k+1,m+2)=((4^m)*T(k+1,m+1)-T(k,m+1))/(4^m-1);
%按公式算出接下去的序列
if (T(k+1,m+2)-T(k,m+2))<0.0000005;
break;
end
end
h=h+1;
end
J. 求龍貝格演算法 c語言代碼
《C++ 數值演算法》一書上有完整的代碼和討論