合肥工业大学 计算机专业 计算方法实验报告
合肥工业高校 计算机与信息学院 试验报告 课 程:计算方法 专业班级: 学 号: 姓 名: 33 / 33 Java界面 其实都不难依据程序流程图就可以完成了 试验一插值与拟合 一、 试验目的 (1) 明确插值多项式和分段插值多项式各自的优缺点; (2) 编程实现三次样条插值算法,分析试验结果体会高次插值产生的龙格现象; (3) 理解最小二乘拟合,并编程实现线性拟合,驾驭非线性拟合转化为线性拟合的方法 (4) 运用常用的插值和拟合方法解决实际问题。 二、 试验内容 (1)对于f(x)=1/(1+x*x)实现三次样条插值 (2)实现最小二乘法的直线拟合 数据如下: 165 123 150 123 141 187 126 172 125 148 三、 基本原理(计算公式) (1)三次样条插值在每个内节点上具有2阶导数。 (2) 最小二乘法拟合直线为y=a+bx,而a,b有如下等式(N为给出的数据点的总个数) ; 四、算法设计与实现(流程图,关键点) 最小二乘法直线拟合:输入数据后,依据公式计算a,b。用得到的拟合直线计算预料点的近似函数值。 五、输入与输出 (1)三次样条插值 输入:区间长度,n+1个数据点,预料点 输出:预料点的近似函数值,精确值,及误差 (2)最小二乘法直线拟合 输入:n个数据点,预料点 输出:预料点的近似函数值 六、结果探讨和分析 代码 三次样条插值 #include #include #define N 10 using namespace std; double u0(double 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(){ ifstream fin; fin.open(“E:\\t.txt“); if(!fin){ coutx[i]>>y[i]; } fin>>f0>>fn; h[0]=x[1]-x[0]; for(i=1;itemp){ double tt=temp; if(tempx[N]){ cout<<“插值节点为“<