#include"stdio.h"
#include "math.h"
#define PI 3.1415926525
#define E 1e-06
double f(double x)
{ double y;
if (x==0.0)y=1;
else y=sin(x)/x;
return (y);
}
void CS_Trapezoid()
{ double a, b, h, t1, t,p, s,x; int i, n=1;
clrscr();
puts("Change
step Trapezoid \n\n");
puts(" input a, b:");
scanf("%lf%lf", &a,
&b);
h=b-a; t1=h*(f(a)+f(b))/2.0;
p=E+1.0;
while(p>=E)
{
s=0.0;
for(i=0;i<=n-1;i++)
{ x=a+(i+0.5)*h;
s+=f(x);
}
t=(t1+h*s)/2.0;
p=fabs(t1-t);
t1=t; n=n+n;
h=h/2.0;
}
printf("T=%.8lf
n=%d\n", t, n/2);
getch();
return;
}
void CS_Simpson()
{ double t1, t2, a, b, h, s1, s2,
x,eps,p; int i, n=1;
clrscr();
puts("Change
step Simpson \n\n");
puts("input a, b:");
scanf("%lf%lf",&a, &b);
h=b-a;
t1=h*(f(a)+f(b))/2;
s1=t1;
eps=E+1.0;
while(eps>=E)
{
p=0.0;
for(i=0;i<=n-1;i++)
{ x=a+(i+0.5)*h;
p=p+f(x);
}
t2=(t1+h*p)/2.0;
s2=(4.0*t2-t1)/3.0;
eps=fabs(s2-s1);
t1=t2;s1=s2;n=n+n;h=h/2.0;
}
printf("S=%.8lf
n=%d\n", s2, n/2);
getch();
return;
}
void Trapezoid()
{ double a, b, h, s; int i,n;
clrscr();
puts("Trapezoid \n\n");
puts("input a, b, n:");
scanf("%lf%lf%d", &a,
&b, &n);
h=fabs((b-a)/n);
s=(f(a)+f(b))/2;
for (i=1; i<n; i++)
s+=f(a+i*h);
s=s*h;
printf("�(x)dx=%.8lf\n", 244,s);
getch();
return;
}
void Simpson()
{ double a, b, h, s, s1, s2; int i, n;
clrscr();
puts("Simpson \n\n");
puts("input a, b, n:");
scanf("%lf%lf%d", &a,
&b, &n);
h=fabs((b-a)/n); s1=s2=0;
s=f(a)-f(b);
for (i=1; i<=n; i++)
{ s1+=f(a+h*i-h/2);
s2+=f(a+h*i); }
s+=4*s1+2*s2; s*=h/6;
printf("�(x)dx=%.8lf\n", 244, s);
getch();
return;
}
void main()
{
int c;
while (1)
{ clrscr();
puts(" Jifen:\n");
puts(" 1. Trapezoid\n ");
puts(" 2. Simpson \n");
puts(" 3. Change step Trapezoid \n");
puts(" 4. Change step Simpson\n ");
puts(" 0. exit.\n");
puts(" choice: ");
c=getchar();
switch(c)
{ case
'1': Trapezoid();break;
case '2':
Simpson();break;
case '3':
CS_Trapezoid();break;
case '4':
CS_Simpson(); break;
case '0': clrscr();
exit(0);
default:
break;
}
}
}
加载中,请稍候......