数值积分_复化梯形_复化辛普森_龙贝格_算法
#include
#include
#include
#define NULL 0
typedef struct pnode
{
float coef;
float exp;
struct pnode *next;
}pnode,*plist;
typedef struct dnode
{
float data;
struct dnode *next;
}dnode,*dlist;
struct dnode *q;
float a,b,t,h,m[2];dlist xn;
plist pn() /*??Á??àÏîÊ?f(x)*/ {
plist head,p,r;float c,e; r=head=(pnode *)malloc(sizeof(pnode));
scanf("%f%f",&c,&e);
while(c!=0)
{
p=(pnode *)malloc(sizeof(pnode));
p->coef=c;p->exp=e;r->next=p;r=p;
scanf("%f%f",&c,&e);
}
r->next=NULL;
return(head);
}
float cap(plist p,float x)/*?ÆËãf(x)*/
{
plist pa;float s=0;
pa=p->next;
while(pa!=NULL)
{
s=s+pa->coef*pow(x,pa->exp); pa=pa->next;
}
return(s);
}
dlist xk(float y,int n)/*??Á?x(k)*/ {
dlist x,head,r;
int i;
r=head=(dnode *)malloc(sizeof(dnode));
for(i=1;idata=a+i*y;r->next=x;r=x; }
r->next=NULL;
return(head);
}
void tixin(plist p)/*ÌÝÐÎ??Ê?*/ {
dlist m;m=xn->next;
float f=0,s=0;
while(m!=NULL)
{
f=f+cap(p,m->data);
m=m->next;
}
s=h/2*(cap(p,a)+cap(p,b)+2*f); printf("ÌÝÐÎ??Ê?µÄÔËËã?á?ûΪ?º\n"); printf("%f\n",s);
}
void xinpu(plist p)/*ÐÁÆÕÉ,??Ê?*/
{dlist m;m=xn->next;
float s,f=0,g=0;
while(m!=NULL)
{
f=f+cap(p,m->data);
g=g+cap(p,m->data+1/2*h);
m=m->next;
}
s=h/6*(cap(p,a)+cap(p,b)+4*g+2*f); printf("ÐÁÆÕÉ,??Ê?µÄÔËËã?á?ûΪ?º\n"); printf("%f\n",s);
}
float tn(plist p)/*Çó?ötn*/ {
dlist m,xm;float y,s=0,f=0;
t++;
y=(b-a)/pow(2,t);
xm=xk(y,pow(2,t));
m=xm->next;
while(m!=NULL)
{
f=f+cap(p,m->data);
m=m->next;
}
s=y/2*(cap(p,a)+cap(p,b)+2*f); return(s);
}
void T(plist p)/*?õÊ???T?í*/ {
dlist s,r;
float t0;
t0=(b-a)/2*(cap(p,a)+cap(p,b)); r=q=(dnode *)malloc(sizeof(dnode)); s=(dnode *)malloc(sizeof(dnode)); s->data=t0;r->next=s;s->next=NULL; t=0;printf("%3.0f %f\n",t,t0); m[1]=t0;m[0]=m[1]+1;
}
void tb(plist p)/*ÐÞ?ÄT?í*/ {
dlist s,r,temp;float tm;
temp=q->next;
tm=tn(p);
q=r=(dnode *)malloc(sizeof(dnode)); s=(dnode *)malloc(sizeof(dnode)); s->data=tm;r->next=s;r=s;int j; j=0;printf("%3.0f %f",t,tm); while(temp!=NULL)
{j++;
s=(dnode *)malloc(sizeof(dnode)); s->data=(pow(4,j)/(pow(4,j)-1))*(r->data)-(temp->data)/(pow(4,j)-1
);
r->next=s;r=s;
m[0]=temp->data;m[1]=r->data;printf(" %f",m[1]);
temp=temp->next;
}
printf("\n");
r->next=NULL;
}
void log(plist p,float du)/*Áú???ñËã??*/
{
T(p);
while(m[0]-m[1]>du)
{tb(p);}
printf("Áú???ñËã??µÄÔËËã?á?ûΪ?º\n"); printf("%f\n",m[1]);
}
void print(plist L) /*Êä?ö?àÏîÊ?*/ {
plist p;
float c,e;
p=L->next;
while(p!=NULL)
{c=p->coef;
e=p->exp;
p=p->next;
if(p!=NULL)
printf("%3.3fX^%3.3f+",c,e); else
printf("%3.3fX^%3.3f",c,e); }
printf("\n");
}
void main()
{
loop: plist fx;
printf("ÊäÈëÒª?ý?ÖµÄ?àÏîÊ?º?Êý?º\n"); fx=pn();
printf("ÊäÈëÇø?ä?˵ãµÄÊýÖµa,b:\n"); scanf("%f%f",&a,&b);
int n;
printf("ÊäÈëµÈ?ÖµÄ?öÊýN?º\n"); scanf("%d",&n);
h=(b-a)/n;
xn=xk(h,n);
printf("?ý?ÖµÄ?àÏîÊ?º?ÊýΪ?º\nF(x)="); print(fx);
tixin(fx);
xinpu(fx);
printf("ÊäÈëÁú???ñµÄ?ÆËã???È?º\n"); float du;
scanf("%f",&du);printf("\nÉú?ɵÄT?íΪ?º\n");printf("\n");
log(fx,du);
printf("Èô?ÌÐøÇëÊäÈë1???ñÔòÊäÈëÆäËüÊý×Ö?º\n");
int i ;
scanf("%d",&i);
if(i==1)
goto loop;
}
本文档为【数值积分_复化梯形_复化辛普森_龙贝格_算法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。