C语言GaussTchebyshev求积公式计算积分.docx
- 文档编号:9391042
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:20
- 大小:901.11KB
C语言GaussTchebyshev求积公式计算积分.docx
《C语言GaussTchebyshev求积公式计算积分.docx》由会员分享,可在线阅读,更多相关《C语言GaussTchebyshev求积公式计算积分.docx(20页珍藏版)》请在冰豆网上搜索。
C语言GaussTchebyshev求积公式计算积分
利用Gauss-Tchebyshev求积公式计算积分
说明:
本作业是由共同合作完成。
本作业分别由C#,C++,C3种语言实现。
共有四个源程序,其中在多个函数实现时是以C语言完成。
实验目的:
1.利用Gauss-Tchebyshev求积公式计算积分。
2.在程序中输入一个函数f(x),任意等分后可以求出其中的积分值!
3.熟悉基本编程语言。
4.对vc++6.0再学习。
5.对技术报告的基本流程有所了解。
6.加深对数值计算方法的印象。
7.熟悉office软件的基本应用,加强自己的动手能力。
实验要求:
1.输入:
函数f(x),输入节点数n,然后进行选择其中的函数!
2.输出:
计算出组合后的函数f(x)的积分!
3.可以正确计算出函数的积分值。
4.该程序应该能够在VC++6.0环境中流畅运行。
5.程序应该能够正确运用Gauss-Tchebyshev求积公式,计算出函数积分值。
6.计算结果精确到小数点后6位。
原理:
一般的n个节点的求积公式为
其中ρ(x)=
[a,b]=[-1,1]的gauss型求积公式
f(x)dx≈
其中ω(x)恰好就是切比雪夫多项式
的n个零点
....x
便是求积公式的节点,令ω(x)=
代入,
并令x=cosθ,可以得到:
A
=
=
,
其余项为
R(f,,G
)=
-1
.
流程图:
代码:
#include
#include
#include
doubleF(floatx);
floats;//s代表各个函数的系数
floatx;//x表示函数取点的坐标值
floatxk;//第k个点的横坐标值
chari;//i代表函数代号(大写字母表示)
doublem=0.0,jg=0.0;//m表示函数初始值,jg代表运行结果
floaty;//y代表pow(x,y)中的y值n代表所选择的节点数
intk,n;//k代表节点的标号
floata,b,c,d,e,f;//用来表示函数H中的系数
/*宏定义函数*/
#definePpow(x,y)
#defineLlog(x)
#defineOlog10(x)
#defineSsin(x)
#defineCcos(x)
#defineTtan(x)
#defineXx
#defineAacos(x)
#defineIasin(x)
#defineNatan(x)
#defineEexp(x)
#defineQsqrt(x)
#defineR3.14159265317
main()
{
printf("n值代表对(-1,1)这个范围内取多少个点\n");
printf("请输入n值n=");//输入n值已选择节点数目
scanf("%d",&n);
printf("本程序中所输入的函数由本人列举出来,如需要自己选择即可,不需要自己输入,选择时输入各个函数对应的数字即可\n");
/*输出各个函数以供选择*/
printf("-----------------------------------------------------------------------------|\n");
printf("|P.pow(x,y)|L.ln(x)|O.log10(x)|S.sin(x)|C.cos(x)|\n");
printf("|-------------|----------------|----------------|---------------|-------------|\n");
printf("|T.tan(x)|X.x|A.acos(x)|I.asin(x)|N.atan(x)|\n");
printf("|-------------|----------------|----------------|---------------|-------------|\n");
printf("|E.exp(x)|Q.sqrt(x)|H.x~b+sin(x+d)+sqrt(x+f)|\n");
printf("|-------------|----------------|----------------|---------------|-------------|\n");
printf("|G.(1-x*x)/sqrt(1-x*x)|B.sin(x+4)+cos(x+2)+sin(x+2)*sin(4*x)|\n");
printf("|-------------|----------------|----------------|---------------|-------------|\n");
printf("|D.e~x*sinx*sinx+8|F.10*arctan(x+8)+x/sqrt(x+2)|\n");
printf("|-------------|----------------|----------------|---------------|-------------|\n");
printf("请输入所选择函数项的组合(P,L,O,S,C,T,X,A,I,N,E,Q,H,G,B,D,F):
i=");
getchar();
scanf("%c",&i);
printf("请输入所选择函数项的组合的系数:
");
scanf("%f",&s);
/*当选择P时需要输入y次方*/
if(i=='P')
{
printf("请输入y次方的y值:
y=");
scanf("%f",&y);
printf("\n");
}
/*当输入函数是H时需要输入系数值*/
if(i=='H')
{
printf("f(x)=x~b+sin(x+d)+sqrt(x+f)\n");
printf("请输入b次方的b值:
b=");
scanf("%f",&b);
printf("\n");
printf("请输入d值:
d=");
scanf("%f",&d);
printf("\n");
printf("请输入f值:
f=");
scanf("%f",&f);
printf("\n");
printf("f(x)=%f*(x~%f+sin(x+%f)+sqrt(x+%f))\n",s,b,d,f);//输出组合后的该函数在屏幕上
}
if(i=='B')//输出函数B的表达式
{
printf("f(x)=%f*(sin(x+4)+cos(x+2)+sin(x+2)*sin(4*x))\n",s);
}
if(i=='D')//输出函数D的表达式
{
printf("f(x)=%f*(e~x*sinx*sinx+8)\n",s);
}
if(i=='F')//输出函数F的表达式
{
printf("f(x)=%f*(10*arctan(x+8)+x/sqrt(x+2))\n",s);
}
for(k=1;k<=n;k++)//循环一次确定一次函数值,进行累加求和
{
if(i=='L'||i=='O'||i=='Q')//由于函数L,O,I在x<0时取值没有意义,所以在【0,1】范围内取值
{
xk=(float)(k-1)/(n-1);
}
else{
xk=(float)(2*k-n-1)/(n-1);//在【-1,1】范围内取值
}
x=xk;//该节点的横坐标
printf("x%d的取值为:
",k);//打印输出第几个函数点的取值
printf("%f",x);//输出该点的x取值
printf("\n");
m=F(x);//调用函数f(x)取值进行运算
jg=(double)(R*m/n+jg);//累加求和
}
printf("jg=%f\n",jg);//输出结果
system("pause");//屏幕暂停
}
/*用来生成函数f(x)*/
doubleF(floatx)//声明函数,用来计算该点的函数值
{
switch(i)
{
case'P':
m=s*(double)pow(x,y);//计算x~y的值赋值给m
break;
case'L':
if(x==0.0)
{
x=(float)(x+0.000001);//由于在x=0时取值没有意义,故取比该值大一点
}
m=s*(double)log(x);
break;
case'O':
if(x==0.0)
{
x=(float)(x+0.000001);//由于在x=0时取值没有意义,故取比该值大一点
}
m=s*(double)log10(x);
break;
case'S':
m=s*(double)sin(x);
break;
case'C':
m=s*(double)cos(x);
break;
case'T':
m=s*(double)tan(x);
break;
case'X':
m=s*(double)x;
break;
case'A':
if(x==0)
{
x=(float)(x+0.000001);//由于在x=0时取值没有意义,故取比该值大一点
}
m=s*(double)acos(x);
break;
case'I':
if(x==-1)
{
x=(float)(x+0.000001);//由于在x=-1时取值没有意义,故取比该值大一点
}
if(x==1)
{
x=(float)(x-0.000001);//由于在x=1时取值没有意义,故取比该值小一点
}
m=s*(double)asin(x);
break;
case'N':
m=s*(double)atan(x);
break;
case'E':
m=s*(double)exp(x);
break;
case'Q':
m=s*(double)sqrt(x);
break;
case'G':
if(x==1.0)
{
x=(float)(1.0-0.000001);//由于在x=1时取值没有意义,故取比该值小一点
}
if(x==-1.0)
{
x=(float)(-1+0.000001);//由于在x=-1时取值没有意义,故取比该值大一点
}
m=s*(1-pow(x,2))/sqrt(1-pow(x,2));
break;
case'H':
m=(float)s*(pow(x,b)+sin(x+b)+sqrt(x+f));
break;
case'B':
m=s*(sin(x+4)+cos(x+2)+sin(x+2)*sin(4*x));
break;
case'D':
m=s*(exp(x)*sin(x)*sin(x)+8);
break;
case'F':
m=s*(10*atan(x+8)+x/sqrt(x+2));
break;
default:
m=m;
}
returnm;
}
结果(截图)显示:
所截图片由十二个基本函数,一个本书例题,三个自编函数组成,各个结果验证成立!
该图为计算f(x)=1*
计算时函数f(x)=1*lnx;
计算时函数f(x)=1*log
x
计算时函数f(x)=1*sinx
计算时函数f(x)=1*cosx
计算时函数f(x)=1*tanx
计算时函数f(x)=1*x
计算时函数f(x)=1*arcosx
计算时函数f(x)=1*arcsinx
计算时函数f(x)=1*arctanx
计算时函数f(x)=1*e
计算时函数f(x)=1*
计算时函数f(x)=1*(x
+sin(x+2)+
)
计算时函数f(x)=1*
(书上例题)
计算时函数f(x)=1*(sin(x+4)+cos(x+2)+sin(x+2)*sin(4*x)
计算时函数f(x)=1*(e
*(sinx)
+8)
计算时函数f(x)=1*(10*arctan(x+8)+
)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 GaussTchebyshev 公式 计算 积分
![提示](https://static.bdocx.com/images/bang_tan.gif)