- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《数值逼近》课程设计报告
数值逼近
课程设计报告
一、目的意义
(1)进一步熟悉掌握复化梯形和复化抛物线公式
(2)学会比较复化梯形公式和复化抛物线公式如何达到所要求的精度
(3) 提高编程能力
(4)通过数值方法求出很难求得原函数的积分和解析表达是没有明确的给出积分的近似值
二、内容要求
积分计算问题:分别用复化梯形和复化Simpsom求积公式计算积分,并比较计算量(精度为10-8)。
三、问题解决的方法与算法
方法:解决该积分问题时,运用了数值积分近似解法的方法,运用复化梯形和复化Simpsom求积公式进行计算
3.1 复化梯形积分
3.1.1复化梯形积分公式表达式
3.1.2复化梯形积分误差表达式
3.2复化抛物线积分
3.2.1复化抛物线积分公式表达式
3.2.2复化抛物线积分误差表达式
3.3算法
3.3.1复化梯形积分算法
第一步:根据精度计算n的值,输入两端点的值,计算步长h
第二步:根据步长计算出各个节点x[i]的值,i=0,1,2,…,n
第三步:根据x[i]计算出各个节点对应y[i]的值,i=0,1,2,…,n
第四步:对各个节点的值进行求和
第五步:输出最终的积分的值
3.3.2复化抛物线积分算法
第一步:根据精度计算n的值,端点a,b的值,计算步长h
第二步:根据步长计算出各个节点x[i]的值,i=0,1,2,…,n
第三步:根据x[i]计算出各个节点对应y[i]的值,i=0,1,2,…,n
第四步:对各个节点的值进行求和,分情况,对左右端点先求和,对剩下的端点,奇数的求和后乘以4倍,偶数的求和后乘以2倍,最终将各个值进行加和
第五步:对加和的值乘以步长除以3
第六步:输出最终的积分的值
四、计算程序
// 复化梯形公式.cpp : 定义控制台应用程序的入口点。
//n+1点的复化梯形公式
#includestdio.h
//#include stdafx.h
#includemath.h
#include iomanip
# include iostream
using namespace std;
const int ARRAY_LEN (10000);
class Comt
{protected:
double a,b,h,n,x[ARRAY_LEN],y[ARRAY_LEN];
char f[ARRAY_LEN];
public:
void getab()
{
cout请输入该积分的上下限(即区间):;
cinab;
coutendl;
}
void cal_nh()
{
int c;
cout几点的复化梯形公式?;
cinc;
coutendl;
n=c-1;
coutn的值为:nendl;
h=(b-a)/n;
couth的值为:hendl;
}
void cal_x()
{
int i=0;
double temp=0;
for(i;in+1;i++)
{
temp=i*h;
x[i]=a+temp;
}
/*coutx的值为:endl;
for(i=0;in+1;i++)
{
coutx[i]=x[i] ;
}
coutendlendl;*/
}
void get_f()
{
char temp[ARRAY_LEN];
cout请输入f(x)的表达式;;
cintemp;
strcpy(f,temp);
coutendl;
}
void cal_y()
{
int i=0;
double temp=0;
for(i=0;in+1;i++)
{
temp=13*(x[i]-x[i]*x[i])*exp(-1.5*x[i]);
y[i]=temp;
}
/*couty的值为:endl;
for(i=0;in+1;i++)
{
couty[i]=y[i] ;
}
coutendlendl;*/
}
double result()
{
double temp=y[0],sum;
int i=1;
for(i=1;in+1;i++)
{
if(i==n)
temp=temp+y[i];/////当有判断条件时,要先进行判断,不满足时才进行原始计算
else temp=temp+2*y[i];
}
sum=h*temp/2;
return sum;
}
void display()
{ double m;
m=result();
cout积分区间为[a b],被积函数为f的积分endl;
cout用n+1点复化梯形公式endl计算结果为:setprecision(8)endlmendl;
}
};
int main()
{
Comt com;
com.getab();
文档评论(0)