Newton 插值法的源程序:
#include
class Matrix {
public:
Matrix(); ~Matrix();
void SetMatrix(const int n);//根据用户输入的插值点的数据设置计算结果的矩 阵
int GetN()const;//返回插值点的数目 void Calculate();//计算差商
double GetResult(double x)const;//根据输入的横坐标求函数值,返回运算结果 private:
double *a,*f;//a 和 f 分别用于存储插值点的横坐标和相应的函数值 int N;//记录插值点的数目 };
int main() {
Matrix matrix; int n; do{
cout<<\输入插值点的数目 N:\cin>>n; }while(n<2);
cout<<\输入插值点的数据:\
matrix.SetMatrix(n); matrix.Calculate();
double x;
cout<<\输入所求的横坐标:\cin>>x;
cout<<\所求的函数值为:\ return 1;
}
Matrix::Matrix()
{ //初始化数据
a=f=NULL; N=0; }
Matrix::~Matrix() {
//释放指针 a、f 指向的内存空间 delete []a; delete []f; }
void Matrix::SetMatrix(int n) {
N=n;
//为插值点创建动态数组 a=new double[N]; f=new double[N];
//输入插值点的数据
for(int i=0;i
}
int Matrix::GetN() const {
return N; }
void Matrix::Calculate()
{ //将差商存储在一个一维数组内
for(int i=0;i for(int j=GetN()-1;j>i;--j) *(f+j)=(*(f+j)-*(f+j-1))/(*(a+j)-*(a+j-i-1)); } double Matrix::GetResult(double x) const { //利用差商和插值点的横坐标及第一个插值点的纵坐标计算函数值 double result=*f;//指针 f 指向第一个插值点的纵坐标 for(int i=1;i double temp=1; for(int j=0;j } return result; } Newton 插值法的运行结果 变步长梯形法求定积分的源程序: #include double function(const double x);//求被积函数的值并返回 //accumulate()为求定积分的函数,a、b 分别为积分的上下限,默认精度为 0.00001 double accumulate(const double a,const double b,const double eps=0.00001); int main() { double a,b,eps;//a,b 分别为定积分的上限和下限,h 为步长,eps 为要求的精度 a=0; b=1; eps=0.00001; cout<<\在 0 到 1 上的积分为:\ return 0; } double function(const double x) { if(x==0) return 1;//x 为 0 时函数值为 1 return(sin(x)/x); } double accumulate(const double a,const double b,const double eps) { int n=1; double h=b-a;//h 为步长 double T1=h*(function(a)+function(b))/2; double T2=T1/2+h*function(a+h/2)/2; //计算结果不满足精度,则继续 while(fabs(T2-T1)>eps) { n*=2; h/=2;//步长折半 T1=T2; //利用 T1 计算 T2 double temp=0; for(int i=1;i<=n;++i) temp+=function(a+(i-1.0/2)*h); T2=T1/2+h*temp/2; } return T2;//返回步长 h 最合适时定积分的近似值 } sin x 变步长梯形法求定积分 ? 的运行结果 0x 1 Romberg 算法求定积分的源程序: #include //求被积函数的值并返回 double fun(const double x); //Romberge()为求定积分的函数,a、b 分别为积分的上下限,默认精度为 0.00001 double Romberg(const double a,const double b,const double eps=0.0001); //函数 Tm()为 T-数表的计算公式 double Tm(const double T1,const double T2,const int m); int main() { double a,b,eps;//a,b 分别为定积分的上限和下限,h 为步长,eps 为要求的精度 a=0; b=1; eps=0.00001; cout<<\所求积分为:\return 0; } double fun(const double x) 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数值计算基础实验指导+部分实验源代码+复习指导+三套试题及其答(6)在线全文阅读。
相关推荐: