定步长复化Simpson解积分方程2007-03-09 21:17/**
***定步长复化Simpson解积分方程***
n-1
定步长复化Simpson公式:Sn=h/6{f(a)-f(b)+ ∑ [ 4f(x(k-1/2)) + 2f(x(k)) ]}
k=0
属性:数值积分法
误差(精度):I - Sn ≈ - 1/180 * (h*h*h*h)/2 * [ f'''(b) - f'''(a) ]
h = ( b - a ) / n
《数值分析简明教程》-2 Editon -高等教育出版社- page 65 算法流程图
**/
**/
#include<iostream.h>
#include<math.h>
#include<stdio.h>
double f(double x)
{
double f;
if(x==0)f=1; // 1
else f=sin(x)/x; // 举例方程 I = ∫ sin(x)/x dx
return f; // 0
}
int main()
{
double h,s,a,b,n,x;
while(cin>>a>>b>>n)
{
h=(b-a)/n;
s=f(a)-f(b);
x=a;
for(int i=0;i<n;i++)
{
x=x+h/2;
s=s+4*f(x);
x=x+h/2;
s=s+2*f(x);
printf("x=%.7f f(x)=%.7f,x=%.7f f(x)=%.7f s=%.7f\n",x-h/2,f(x-h/2),x,f(x),h*s/6);
}
}
return 0;
}
/**
***定步长复化梯形求解积分方程***
n-1 n-1
定步长复化梯形公式: Tn= ∑ h/2〔 f(a) + f(b) + 2 ∑ f(x(k)) 〕
k=0 k=0
属性:数值积分法
n-1
误差(精度):I - Tn = ∑ [ - h*h/12 f''(ε(k)) ] ≈ - h*h/12 [ f'(b) - f'(a) ]
k=0
步长:h = ( b - a ) / n
《数值分析简明教程》-2 Editon -高等教育出版社- page 64 无算法流程图
**/
#include<iostream.h>
#include<math.h>
#include<stdio.h>
double f(double x)
{
double f;
if(x==0)f=1;
else f=sin(x)/x;
return f;
}
int main()
{
double h,s,a,b,n,x;
while(cin>>a>>b>>n)
{
h=(b-a)/n;
s=f(b)+f(a);
x=a;
for(int i=0;i<n;i++)
{
x=x+h;
s=s+2*f(x);
printf("x=%.7f f(x)=%.7f s=%.7f\n",x,f(x),h*s/2);
}
}
return 0;
}