2012级6班###(学号)计算机数值方法实验报告成绩册姓名:安元龙学号:2012060501成绩:数值计算方法与算法实验报告学期: 2014 至___2015 第 1 学期 2014年 10月26日课程名称:__数值计算方法与算法 __ 专业:信息与计算科学 12级5班实验编号: 1实验项目Neton插值多项式指导教师__孙峪怀姓名:安元龙学号: 2012060501 实验成绩:一、实验目的及要求实验目的:掌握Newton插值多项式的算法,理解Newton插值多项式构造过程中基函数的继承特点,掌握差商表的计算特点。
实验要求:1. 给出Newton插值算法2. 用C语言实现算法二、实验内容三、实验步骤(该部分不够填写.请填写附页)1.算法分析:下面用伪码描述Newton插值多项式的算法:Step1 输入插值节点数n,插值点序列{x(i),f(i)},i=1,2,……,n,要计算的插值点x.Step2 形成差商表for i=0 to nfor j=n to if(j)=((f(j)-f(j-1)/(x(j)-x(j-1-i));Step3 置初始值temp=1,newton=f(0)Step4 for i=1 to ntemp=(x-x(i-1))*temp/*由temp(k)=(x-x(k-1))*temp(k-1)形成(x-x(0).....(x-x(i-1)*/Newton=newton+temp*f(i);Step5 输出f(x)的近似数值newton(x)=newton.#include<stdio.h>#define MAX_N 20typedef struct tagPOINT{double x;double y;}POINT;int main(){int n;int i,j;POINT points[MAX_N+1];double diff[MAX_N+1];double x,tmp,newton=0;printf("\nInput n value:");scanf("%d",&n);if(n>MAX_N){printf("The input n is larger then MAX_N,please redefine the MAX_N.\n");return 1;}if(n<=0){printf("Please input a number between 1 and %d.\n",MAX_N);return 1;}printf("Now input the (x_i,y_i),i=0,...,%d:\n",n);for(i=0;i<=n;i++)scanf("%lf%lf",&points[i].x,&points[i].y);printf("Now input the X value:");scanf("%lf",&x);for(i=0;i<=n;i++)diff[i]=points[i].y;for(i=0;i<n;i++){for(j=n;j>i;j--){diff[j]=(diff[j]-diff[j-1])/(points[j].x-points[j-1-i].x);}}tmp=1;newton=diff[0];for(i=0;i<n;i++){tmp=tmp*(x-points[i].x);newton=newton+tmp*diff[i+1];}printf("newton(%f)=%f\n",x,newton);return 0;}数值计算方法与算法实验报告学期: 2014 至___2015 第 1 学期 2014年 10月26日课程名称:__数值计算方法与算法 __ 专业:信息与计算科学 11级5班实验编号: 2实验项目Romberg算法指导教师__孙峪怀姓名:安元龙学号: 2012060501 实验成绩:一、实验目的及要求实验目的:熟练掌握数值积分的基本思想和动手推导积分公式的能力,并写出自己设计的变步长算法,用此算法解决实际问题。
主要锻炼分析问题及对数值方法产生的误差在实际执行算法中的变化,体会事前误差和事后误差的不同之处。
实验要求:写出Romberg算法的描述,并用此算法计算下列定积分的值,要求满足给定误差。
二、实验内容。
(1)用变步长的Romberg方法计算定积分:⎰=10sinI xdx给定误差限为310*5.0-=ε三、实验步骤(该部分不够填写.请填写附页)1.算法分析:下面用伪码描述Romberg的算法描述:Sstep1 输入区间端点a,b,精度控制值e,循环次数M,定义函数f(x),取n=1,h=b-a;Step2R1,1=(f(a)+f(b))*h/2;Step3for k=2 to M{Rk,1=(R(k-1),1+h(k-1)*∑-=-+2212/)*)1*2((kihkiaf/*12/-=kkhh*/for j=2 to k{)14/()(11,11,1,,--+=-----j j k j k j k j k R R R R } if e R R k k k k <---||1,1, 退出循环 }Step4 输出k k R ,.2.用C 语言实现算法的程序代码 #include<stdio.h> #include<math.h>#define f(x) (sin(x)) #define N_H 20#define MAXREPT 10 #define a 1.0 #define b 2.0 #define epsilon 0.00001double computeT(double aa, double bb, long int n) /*复化梯形公式*/ {int i;double sum, h=(bb-aa)/n; sum=0;for(i=1;i<n;i++) sum+=f(aa+i*h); sum+=(f(aa)+f(bb))/2; return(h*sum); }void main() {int i;long int n=N_H,m=0;double T[MAXREPT+1][2]; T[0][1]=computeT(a,b,n); n*=2;for(m=1;m<MAXREPT;m++) {for(i=0;i<m;i++) {T[i][0]=T[i][1]; }T[0][1]=computeT(a,b,n); n*=2;for(i=1;i<=m;i++)T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])/(pow(2,2*m)-1);if((T[m-1][1]<T[m][1]+epsilon)&&(T[m-1][1]>T[m][1]-epsilon)) {printf("The Integrate is %lf\n",T[m][1]); return; } }printf("Return no solved...\n"); }3.运行结果数值计算方法与算法实验报告学期: 2014 至___2015 第 1 学期 2014年 10月26日课程名称:__数值计算方法与算法 __ 专业:信息与计算科学 12级5班实验编号: 3实验项目:求拟合算法指导教师__孙峪怀姓名:安元龙学号:2011060501 实验成绩:一、实验目的及要求实验目的:学习了曲线拟合的最小二乘法,会求拟合曲线,线性拟合和二次拟合函数,还有形如aexp(bx)的曲线拟合,实验主要是求形如aexp(bx)的曲线拟合,并理解体会其意义。
实验要求:1. 形如aexp(bx)曲线拟合的算法;2. 用C语言实现算法二、实验内容用形如p(x)=aexp(bx)的函数拟合给定()三、实验步骤(该部分不够填写.请填写附页)1.算法分析:拟合函数aexp(bx)的算法描述:Step1 输入m 值,及(xi,yi),i=1,2,...,m; Step2 解方程组m∑=m i xi 1∑=mi yi 1loga =∑=mi xi 1∑=m i xi 12^ b ∑=mi yi xi 1logStep3 输出p(x)=aexp(bx)即所求拟合函数 1.算法分析:2.用C 语言实现算法的程序代码 #include<stdio.h> #include<math.h> #define MAX_N 25typedef struct tagPOINT {double x; double y; }POINT; int main() {int m; int i;POINT points[MAX_N];static double u11,u12,u21,u22,c1,c2; double A,B,tmp;printf("\nInpute m value:"); scanf("%d",&m); if(m>=MAX_N) {printf("The inpute m is larger than MAX_N,please redefine the MAN_N.\n"); return 1; }if(m<=0) {printf("Please input a number between 1 and %d.\n",MAX_N); return 1; }printf("NOW inpute the(x_i,y_i),i=1,...,%d:\n",m); for(i=1;i<=m;i++) {scanf("%lf",&tmp);points[i].x=tmp;scanf("%lf",&tmp);points[i].y=tmp;}for(i=1;i<=m;i++){u21+=points[i].x;u22+=points[i].x*points[i].x;c1+=log(points[i].y);c2+=points[i].x *log(points[i].y);}u12=u21;u11=m;A=(c1*u22-c2*u12)/(u11*u22-u12*u21);B=(c1*u21-c2*u11)/(u21*u12-u22*u11);printf("Solve:p(x)=%lfexp(%lfx)\n",exp(A),B);return 0;}3.实验输出结果:数值计算方法与算法实验报告学期: 2014 至___2015 第 1 学期 2014年 10月27日课程名称:__数值计算方法与算法 __ 专业:信息与计算科学 12级5班实验编号: 4实验项目弦截断法指导教师__孙峪怀姓名:安元龙学号: 2012060501 实验成绩:一、实验目的及要求实验目的:学习什么是弦截法,了解弦截法的用法,并学会用弦截法求方程的根。