《合肥工业大学 计算机专业 计算方法实验报告》由会员分享,可在线阅读,更多相关《合肥工业大学 计算机专业 计算方法实验报告(33页珍藏版)》请在人人文库网上搜索。
1、合肥工业大学计算机与信息学院实验报告课 程:计算方法专业班级: 学 号: 姓 名: .Java界面其实都不难按照程序流程图就可以完成了实验一插值与拟合1、 实验目的(1) 明确插值多项式和分段插值多项式各自的优缺点;(2) 编程实现三次样条插值算法,分析实验结果体会高次插值产生的龙格现象;(3) 理解最小二乘拟合,并编程实现线性拟合,掌握非线性拟合转化为线性拟合的方法(4) 运用常用的插值和拟合方法解决实际问题。2、 实验内容(1)对于f(x)=1/(1+x*x)实现三次样条插值(2)实现最小二乘法的直线拟合数据如下:16512315012314151483、 基本原理(计算公式)(1)三次样。
2、条插值在每个内节点上具有2阶导数。(2) 最小二乘法拟合直线为y=a+bx,而a,b有如下等式(N为给出的数据点的总个数); 四、算法设计与实现(流程图,关键点)最小二乘法直线拟合:输入数据后,按照公式计算a,b。用得到的拟合直线计算预测点的近似函数值。五、输入与输出(1)三次样条插值输入:区间长度,n+1个数据点,预测点输出:预测点的近似函数值,精确值,及误差(2)最小二乘法直线拟合输入:n个数据点,预测点输出:预测点的近似函数值六、结果讨论和分析代码三次样条插值#include#include #define N 10using namespace std;double u0(double。
3、 x)return (x-1)*(x-1)*(2*x+1);double u1(double x)return x*x*(3-2*x);double v0(double x)return x*(x-1)*(x-1);double v1(double x)return x*x*(x-1);double s3(double x,double y,double y1,double m,double m1,double h)return u0(x)*y+u1(x)*y1+h*v0(x)*m+h*v1(x)*m1;double f(double x)return 1/(1+x*x); int main(。
4、)ifstream fin;fin.open(E:t.txt);if(!fin)coutxiyi;finf0fn;h0=x1-x0;for(i=1;i0;i-)mi=mi-Ci*mi+1;couttemp)double tt=temp;if(tempxN)cout#include#define n 5using namespace std;double sum(double x,int k)int i;double sum=0;for(i=0;ixiyi;b=(n*sumxy(x,y,n)-sum(x,n)*sum(y,n)/(n*sum2(x,n)-sum(x,n)*sum(x,n);a=(。
5、sum(y,n)-b*sum(x,n)/n;coutx0)y0=a+b*x0;cout#include#includeusing namespace std;double f(double x)if(x=0)return 1;return sin(x)/x;int main()ifstream fin;fin.open(E:t.txt);if(!fin)coutabe;cout#include#includeusing namespace std;double f(double x)return exp(x);double f1(double x)return exp(x);double g(。
6、double x,double h)return (f(x+h)-f(x-h)/2/h;double g1(double x,double h)return 4*g(x,h/2)/3-g(x,h)/3;double g2(double x,double h)return 16*g1(x,h/2)/15-g1(x,h)/15;double g3(double x,double h)return 64*g2(x,h/2)/63-g2(x,h)/63;int main()ifstream fin;fin.open(E:t.txt);if(!fin)coutah)cout#include#includ。
7、eusing namespace std;double f(double x)/函数return x*x*x-x-1;double f1(double x)/一阶导数return 3*x*x-1; int main()ifstream fin;fin.open(E:t.txt );if(!fin) cout x0eMN; cout=M)break; while(fabs(f(x1)=fabs(f(x0);if(i=M)cout=N)cout#include#include#define n 3using namespace std;void show(double an+1n+1,double。
8、 bn+1)int i,j;couteN;for(i=1;ixi;yi=xi;coutaij;finbi; show(a,b);k=0;while(true)for(i=1;i#include#include#define n 3using namespace std;void show(double an+1n+1,double bn+1)int i,j;coutaij;finbi;show(a,b); k=1;dod=akk;l=k;i=k+1;doif(in)break;if(fabs(aik)fabs(d)d=aik;l=i;if(i=n)break;i+;while(true);if。
9、(d=0)cout=1;i-)t=0;for(j=i+1;j#include#define n 3using namespace std;void show(double an+1n+1,double bn+1)int i,j;coutaij;finbi; show(a,b); for(i=1;i=1;i-)t=0;for(j=i+1;j#include#includeusing namespace std;double f(double x,double y)return y-2*x/y;/函数 double f0(double x)return pow(1+2*x,0.5);int mai。
10、n()ifstream fin;fin.open(E:t.txt);if(!fin)coutx0y0hN;cout#include#includeusing namespace std;double f(double x,double y)return y-2*x/y;/函数 double f0(double x)return pow(1+2*x,0.5); void fc(double y,double x,int n,double h)double k1,k2,k3,k4;int i;for(i=0;ix0y0hN; cout亚当姆斯方法求解常微分方程,初始条件为步长h= h ,初值为x0。
11、= x0 ,y0= y0endl; for(k=0;k4;k+)xk=x0+k*h;fc(y,x,4,h);for(k=0;k4;k+)y1k=f(xk,yk);for(k=1;k4;k+)cout当x= xk 时,y精确值为f0(xk),用亚当姆斯求得y为yk,误差为f0(xk)-ykendl;n=4;dox4=x3+h;yp=y3+h*(55*y13-59*y12+37*y11-9*y10)/24;yp1=f(x4,yp);y4=y3+h*(9*yp1+19*y13-5*y12+y11)/24;y14=f(x4,y4);cout当x= x4 时,y精确值为f0(x4),用亚当姆斯求得y为y4,误差为f0(x4)-y4endl;n+;x3=x4;y3=y4;for(k=0;k4;k+)y1k=y1k+1;while(n=N);system(pau。