logo资料库

合工大计算方法实验报告.docx

第1页 / 共27页
第2页 / 共27页
第3页 / 共27页
第4页 / 共27页
第5页 / 共27页
第6页 / 共27页
第7页 / 共27页
第8页 / 共27页
资料共27页,剩余部分请下载后查看
《计算方法》实验报告
实验一 插值与拟合
实验目的:
实验内容及要求
实验原理及算法描述
程序代码及实验结果
实验总结
实验二 数值积分
实验目的:
实验内容及要求
实验原理及算法描述
程序代码及实验结果
实验总结
实验三 数值微分
实验目的:
实验内容及要求:
实验原理及算法描述:
程序代码及实验结果
实验总结
实验四 非线性方程求根迭代法
实验目的:
实验内容及要求:
实验原理及算法描述:
实验总结
《计算方法》实验报告 目录(按住 ctrl 鼠标左键即可跳转) 《计算方法》实验报告 .................................................................................................................... 1 实验一 插值与拟合 ...................................................................................................................... 1 实验目的:................................................................................................................................ 1 实验内容及要求........................................................................................................................ 2 实验原理及算法描述................................................................................................................ 2 程序代码及实验结果................................................................................................................ 2 实验总结 .................................................................................................................................... 9 实验二 数值积分 .......................................................................................................................... 9 实验目的:................................................................................................................................ 9 实验内容及要求........................................................................................................................ 9 实验原理及算法描述.............................................................................................................. 10 程序代码及实验结果.............................................................................................................. 12 实验总结 .................................................................................................................................. 17 实验三 数值微分 ........................................................................................................................ 18 实验目的:.............................................................................................................................. 18 实验内容及要求: .................................................................................................................. 18 实验原理及算法描述: .......................................................................................................... 18 程序代码及实验结果.............................................................................................................. 19 实验总结 .................................................................................................................................. 22 实验四 非线性方程求根迭代法 ................................................................................................ 22 实验目的:.............................................................................................................................. 23 实验内容及要求: .................................................................................................................. 23 实验原理及算法描述: .......................................................................................................... 23 实验总结 .................................................................................................................................. 26 学号 姓名 班级 实验项目名称 一、实验名称 求利用插值算法函数值 实验一 插值与拟合 实验目的: (1) 明确插值多项式和分段插值多项式各自的优缺点; (2) 编程实现拉格朗日插值算法,分析实验结果体会高次插值产生的龙格现象; (3) 理解最小二乘拟合,并编程实现线性拟合,掌握非线性拟合转化为线性拟合的方法
(4) 运用常用的插值和拟合方法解决实际问题。 计算机科学与技术 实验内容及要求 (1) 对于 f(x)=1/(1+x2),-5<=x<=5 要求选取 11 个等距插值节点,分别采用拉格朗日插值和分段线性插值,计算 x 为 0.5, 4.5 处的函数值并将结果与精确值进行比较。 输入:区间长度,n(即 n+1 个节点),预测点 输出:预测点的近似函数值,精确值,及误差 (2)已知 1 =1,√4= 2,√9= 3,用牛顿插值公式求√5 的近似值。 输入:数据点集,预测点。 输出:预测点的近似函数值 实验原理及算法描述 1. Lagrange 插值法的基本原理:  拉格朗日插值公式: ( xp n  ) n k  0 ( xly kk ) ( xl k )  x x k   x j x j n  0 j  kj  2. Lagrange 插值算法描述:(也可以是算法流程图) ( ), l x l x , xL ( ), , 1, x x 处的插值基函数 0 步骤 1: 构造 0 1 n L , ( ) l x n ,其中,插值节点 ix 处的插值基函数 ( ) il x 为 ( ) l x i = x - - ( x i ) x L 0 ) x L 0 ( ( x ( x i - - x i x i - 1 - 1 )( )( x x i - - + x i x i + 1 1 ) L ) L ( ) x x - n ( x x - i n ) ; 步骤 2:以 iy 作为 ( ) il x 的系数,使得 ( ) i iy l x 通过插值点 ( , x y ; ) i i 步 骤 3 : 把 所 有 的 ( ) i iy l x 线 性 叠 加 , 得 到 通 过 所 有 插 值 点 ( , x y i i ), i = 0,1, ( ) L x n n = å i = 0 ( ) y l x i i 。 L 的 插 值 函 数 , n ),( 0 ( , x y Lagrange 插值伪代码: 给定 n 个插值点 0 /*输入参数 *x=(x0,x1,….,xn), *y=(y0,y1,…,yn); *t *返回值 */ , x y 1 1 ), L ,( , x y n ) n 的情况下,求插值函数 ( ) nL x 在点t 处的函数值。 插值节点 被插函数 f(x)在插值节点处的函数值 求插值函数 Ln (x)在 t 处的函数值 插值函数 Ln (x)在 t 处的函数值 程序代码及实验结果 2
计算机科学与技术 1. 主程序 int main(){ int n; cout<<"请输入插入结点个数 "; cin>>n; vectorxi(n); vectoryi(n); cout<<"请输入 xi 以及对应的 yi "<>xi[i]>>yi[i]; } int nn; cout<<"请输入求解个数 nn"; cin>>nn; vectorxx(nn); vectorresult(nn); vectorresult_p(nn); cout<<"输入变量值"; for(int j=0;j>xx[j]; } cout<yy(nn); yy[0]=0.8; yy[1]=0.047059; cout<>new_n; 3
计算机科学与技术 vectornew_xi(new_n); vectornew_yi(new_n); cout<<"输入 xi 以及对应的 yi"<>new_xi[i]>>new_yi[i]; } double new_number; cout<<"请输入变量 x 的值 "; cin>>new_number; cout<<"牛顿插值所求结果为="<&xi,vector&yi,int } 2. Lagrange 插值子程序: void nn,vector&xx,vector&result){ lagrange(int double temp_result=0; for(int i=0;i&xx,vector&result_p){ partinter(int n,vector&xi,vector&yi,int double temp_result; for(int i=0;ixx[i]){ temp=j; break; 4
计算机科学与技术 } } temp_result=yi[temp-1]*(1-(xx[i]-xi[temp-1])/(xi[temp]-xi[temp-1]))+yi[temp]*(xx[i]-xi[temp-1])/(xi[ temp]-xi[temp-1]); result_p[i]=temp_result; } } 3. 牛顿插值子程序 double newton(int n,vector&xi,vector&yi,double number){ vector >diff(n); for(int i=0;i #include #include #include using namespace std; void lagrange(int n,vector&xi,vector&yi,int 5
计算机科学与技术 //变量解释 n 代表插值点数量 xi yi 分别为 x y 对 n,vector&xi,vector&yi,int // result_p 为分段插值结果 partinter(int nn,vector&xx,vector&result); 应值 nn 求解个数 xx 为存储求解 x 的数组 result 为拉格朗日插值结果 void nn,vector&xx,vector&result_p); double newton(int n,vector&xi,vector&yi,double number); int main(){ int n; cout<<"请输入插入结点个数 "; cin>>n; vectorxi(n); vectoryi(n); cout<<"请输入 xi 以及对应的 yi "<>xi[i]>>yi[i]; } int nn; cout<<"请输入求解个数 nn"; cin>>nn; vectorxx(nn); vectorresult(nn); vectorresult_p(nn); cout<<"输入变量值"; for(int j=0;j>xx[j]; } cout<yy(nn); yy[0]=0.8; yy[1]=0.047059; cout<
计算机科学与技术 cout<<"输入插入解点个数 "; cin>>new_n; vectornew_xi(new_n); vectornew_yi(new_n); cout<<"输入 xi 以及对应的 yi"<>new_xi[i]>>new_yi[i]; } double new_number; cout<<"请输入变量 x 的值 "; cin>>new_number; cout<<"牛顿插值所求结果为="<&xx,vector&result){ lagrange(int double temp_result=0; for(int i=0;i&xx,vector&result_p){ partinter(int double temp_result; for(int i=0;ixx[i]){ temp=j; break; } n,vector&xi,vector&yi,int n,vector&xi,vector&yi,int 7
计算机科学与技术 } temp_result=yi[temp-1]*(1-(xx[i]-xi[temp-1])/(xi[temp]-xi[temp-1]))+yi[temp]*(xx[i]-xi[temp-1])/(xi[ temp]-xi[temp-1]); result_p[i]=temp_result; } } double newton(int n,vector&xi,vector&yi,double number){ vector >diff(n); for(int i=0;i
分享到:
收藏