数值逼近课程设计报告
数值逼近课程设计
一、目的意义
(1)进一步熟悉掌握复化梯形和复化抛物线公式
(2)学会比较复化梯形公式和复化抛物线公式如何达到所要求的精度 (3) 提高编程能力
(4)通过数值方法求出很难求得原函数的积分和解析表达是没有明确的给出积分的近似值
二、内容要求
积分计算问题:分别用复化梯形和复化Simpsom 求积公式计算积分
dx e x x x 5.14
2)(13-?
-,并比较计算量(精度为10-8)。
三、问题解决的方法与算法
方法:解决该积分问题时,运用了数值积分近似解法的方法,运用复化梯形和复化
Simpsom 求积公式进行计算
3.1 复化梯形积分
3.1.1复化梯形积分公式表达式
()()()1
122n n i i h T f a f b f x -=??=++????
∑
3.1.2复化梯形积分误差表达式
[]
()()()2,,12
n b a h R f f a b ηη-''=-
∈
3.2复化抛物线积分
3.2.1复化抛物线积分公式表达式
()()()()()11/21142n n b
k k a
k k f x dx f a f x f x f b --==??
≈+++????
∑∑?
3.2.2复化抛物线积分误差表达式
[]
()()()()(
)
()()5
44
44
,,2880
2880n b a h b a R f f f a b n
ηηη--=-
=-∈
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点的复化梯形公式
#include
//#include "stdafx.h"
#include
#include
# include
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<<"请输入该积分的上下限(即区间):";
cin>>a>>b;
cout< } void cal_nh() { int c; cout<<"几点的复化梯形公式?"; cin>>c; cout< n=c-1; cout<<"n的值为:"< 数值逼近课程设计h=(b-a)/n; cout<<"h的值为:"< } void cal_x() { int i=0; double temp=0; for(i;i { temp=i*h; x[i]=a+temp; } /*cout<<"x的值为:"< for(i=0;i { cout<<"x["< } cout< } void get_f() { char temp[ARRAY_LEN]; cout<<"请输入f(x)的表达式;"; cin>>temp; strcpy(f,temp); cout< } void cal_y() { int i=0; double temp=0; for(i=0;i { temp=13*(x[i]-x[i]*x[i])*exp(-1.5*x[i]); y[i]=temp; } /*cout<<"y的值为:"< for(i=0;i { cout<<"y["< } cout< } double result() { double temp=y[0],sum; int i=1; for(i=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();