ImageVerifierCode 换一换
格式:DOC , 页数:16 ,大小:422KB ,
资源ID:9448501      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/9448501.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(太原理工大学数值计算方法实验报告.doc)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

太原理工大学数值计算方法实验报告.doc

1、 本科实验报告 课程名称: 计算机数值方法 实验项目: 方程求根、线性方程组的直接解 法、 线性方程组的迭代解法、代数插值和最 小二乘拟合多项式 实验地点: 行 勉 楼 专业班级: ******** 学号: ********* 学生姓名: ******** 指导教师: 李 誌 , 崔 冬 华 2016年 4 月 8 日 学生姓名

2、 实验成绩 实验名称 实验一 方程求根 实验内容和要求 熟悉使用二分法、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。选择上述方法中的两种方法求方程:f(x)=x3+4x2-10=0在[1,2]内的一个实根,且要求满足精度|x*-xn|<0.5×10-5 (1)了解非线性方程求根的常见方法,如二分法、牛顿法、割线法。 (2)加深对方程求根方法的认识,掌握算法。 (3)会进行误差分析,并能对不同方法进行比较。 实验原理 1. 二分法:如果要求已知函数 f(x) = 0 的根 (x 的解),那先要找出一个区间 [a, b],使得f(a)与f(b)异号。根据

3、介值定理,这个区间内一定包含着方程式的根。求该区间的中点m=(a+b)/2,并找出 f(m) 的值。若 f(m) 与 f(a) 正负号相同,则取 [m, b] 为新的区间, 否则取 [a, m]。重复第3步和第4步,直到得到理想的精确度为止。 2. 割线法是利用牛顿迭代法的思想,在根的某个领域内,函数有直至二阶的连续导数,并且不等于0,则在领域内选取初值x0,x1,迭代均收敛。 (1) 在区间[m ,n]内输入初值x0,x1. (2) 计算x2。x2=x1-f(x1)*(x1-x0)/(f(x1)-f(x0)) (3) x0=x1,x1=x2(4) 判断是否达到精度,若是输出x1,若

4、否 执行(2) 主要仪器设备 HP计算机 实验记录 1.二分法 // 方程求根(二分法).cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include"iostream" using namespace std; class Text { public: float x, y, a, b, c, n = 0; void Getab() { cout << "请输入计算区间:(以空格隔开)" << endl; cin >> a >> b; } float GetY(float x)

5、{ y = x*x*x + 4 * x*x - 10; return y; } float Calculate(float a,float b) { c = (a + b) / 2; n++; if (GetY(c) == 0 || ((b - a) / 2) < 0.000005) { cout << c <<"为方程的解"<< endl; return 0; } if (GetY(a)*GetY(c) < 0) { return Calculate(a,c);

6、 } if (GetY(c)*GetY(b)< 0) { return Calculate(c,b); } } }; int main() { cout << "方程组为:f(x)=x^3+4x^2-10=0" << endl; float a, b; Text text; text.Getab(); a = text.a; b = text.b; text.Calculate(a, b); return 0; } 2.割线法: // 方程求根(割线法).cpp : 定义控制台应用程序的入

7、口点。 // #include "stdafx.h" #include"iostream" using namespace std; class A { public: float x0,x1,y; float GetY(float x) { y= x*x*x+4*x*x-10; return y; } void GetNumber() { cout<<"请输入两个初始近似值:(以空格隔开)" << endl; cin >> x0; cin >> x1; } void Calculate(float x0,float

8、 x1) { float x2; x2 = x1 - (GetY(x1) / (GetY(x1) - GetY(x0))*(x1 - x0)); if (x2==x1) { cout <

9、 text.GetNumber(); a = text.x0; b = text.x1; text.Calculate(a,b); return 0; } 心得体会 使用不同的方法,可以不同程度的求得方程的解,通过二分法计算的程序实现更加了解二分法的特点,二分法过程简单,程序容易实现,但该方法收敛比较慢一般用于求根的初始近似值,不同的方法速度不同。面对一个复杂的问题,要学会简化处理步骤,分步骤一点一点的循序处理,只有这样,才能高效的解决一个复杂问题。 实验

10、名称 实验二 线性方程组的直接求解 实验内容和要求 合理选择利用Gauss消元法、主元素消元法、LU分解法、追赶法求解下列方程组: (1)了解线性方程组常见的直接解法,如Guass消元法、LU分解法、追赶法。 (2)加深对线性方程组求解方法的认识,掌握算法。 (3)会进行误差分析,并能对不同方法进行比较。 实验原理 1. 高斯分解法: ⑴将原方程组化为三角形方阵的方程组: lik=aik/akk aij= aij- lik* akj k=1,2,…,n-1 i=k+

11、1,k+2, …,n j=k+1,k+2, …,n+1 ⑵由回代过程求得原方程组的解: xn= ann+1/ ann xk=( akn+1-∑akj xj)/ akk (k=n-1,n-2, …,2,1) 2. LU分解法: 将系数矩阵A转化为A=L*U, L为单位下三角矩阵,U为普通上三角矩阵,然后通过解方程组l*y=b,u*x=y,来求解x. 主要仪器设备 HP计算机 实验记录 1.高斯消元法: #include "stdio.h" #include "math.h" #include double a[5][6],a0

12、[5][6]; double l[5],tmp; void Exchange(int i) { int j,l,k; double max=a0[i][i],temp; j=i; for(k=i;k<=3;k++) { if(a0[k][i]>max) { max=a0[k][i]; j=k; } } for(l=i;l<=4;l++) { temp=a0[i][l]; a0[i][l]=a0[j][l];

13、 a0[j][l]=temp; } for(i=1;i<=3;i++) { for(j=1;j<=4;j++) { a[i][j]=a0[i][j]; } } } void displayA() { int i,j;printf("\n"); for(j=1;j<=3;j++) { for(i=1;i<=4;i++) printf("%lf ",a[j][i]); printf("\n"); } } void main() { int i,j,k; for(i

14、1;i<=3;i++) { for(j=1;j<=4;j++) { scanf("%lf",&a[i][j]); a0[i][j]=a[i][j]; } } displayA(); printf("列主元素消元法如下"); //消元过程 k=1; do { Exchange(k); displayA(); for(i=k+1;i<=3;i++) { l[i]=a0[i][k]/a0[k][k]; printf("l[%i][%i]=%lf",i,k,l[i]); for(

15、j=k;j<=4;j++) { a[i][j]=a0[i][j]-l[i]*a0[k][j]; } displayA(); } k++; if(k==3) break; for(j=1;j<=3;j++) { for(i=1;i<=4;i++) a0[j][i]=a[j][i]; } }while(1); //回代过程 l[3]=a[3][4]/a[3][3]; for(k=3;k>=1;k--) { tmp=0; for(j=k+1;j<=3;j++)tmp+=a[k][

16、j]*l[j]; l[k]=(a[k][4]-tmp)/a[k][k]; } for(i=1;i<=3;i++) printf("x[%i]=%lf\n",i,l[i]); } 2.LU分解法: #include #include int i,j,k,r; double m=0,p=0; double a[3][3]; void lu(double a[3][3]) { for(i=1;i<=2;i++) { if(a[0][0]!

17、0) a[i][0]=a[i][0]/a[0][0]; } for(k=1;k<=2;k++) { for(j=k;j<=2;j++) { { for(r=0;r<=k-1;r++) m=m+a[k][r]*a[r][j]; } a[k][j]=a[k][j]-m; m=0; } for(i=k+1;i<=2;i++

18、) { { for(r=0;r<=k-1;r++) p=p+a[i][r]*a[r][k]; } a[i][k]=(a[i][k]-p)/a[k][k]; p=0; } } } void main() { static double a[3][3]={{1,2,3},{0,1,2},{2,4,1}}; static double b[3]={14,8,13}; double c[3]; double d[3]; double f

19、[3][3]; double m=0; double n=0; int r; int i,j; lu(a); printf("输出U的矩阵为\n"); for(i=0;i<=2;i++) { for(j=i;j<=2;j++) { f[i][j]=a[i][j]; printf(" %f",f[i][j]); } printf("\n"); } printf("输出L的矩阵为\n");

20、 for(i=0;i<=2;i++) { for(j=0;j<=i;j++) { if(i==j) { a[i][j]=1; printf(" %f",a[i][j]); } else printf(" %f",a[i][j]); } printf("\n"); } c[0]=b[0]; for(i=1;i<=2;i++) {

21、 for(r=0;r<=i-1;r=r+1) m=m+a[i][r]*c[r]; c[i]=b[i]-m; m=0; } d[2]=c[2]/f[2][2]; for(i=1;i>=0;i=i-1) { for(r=2;r>i;r=r-1) n=n+f[i][r]*d[r]; d[i]=(c[i]-n)/f[i][i]; n=0; } printf("所求方程组解为x1=%f, x2=%f, x3=%f",

22、d[0],d[1],d[2]); /*根据LU分解所得两个矩阵及求解步骤计算所求X一组解*/ } 心得体会 对于求解线性方程组的各种直接方法来说各有优缺点,在所有的求解方法中都应该注意其解的精度。注意不同求解方法的不同误差求法。编写程序的时候需要一步一步慢慢来,逐步增加自己的算法知识水平和解决问题的能力。 实验名称 实验三 线性方程组的迭代求解 实验内容和要求 使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。 实验原理 雅可比迭代法: 设线性方程组 Ax=b 的系数矩阵A可逆且主对角元

23、素a11,a22,…,ann均不为零,令 D=diag(a11,a22,…,ann) 并将A分解成 A=(A-D)+D 从而线性方程组可写成 Dx=(D-A)x+b 则有迭代公式 x(k+1)=B1x(k)+f1 其中,B1=I-D-1A,f1=D-1b。 主要仪器设备 HP计算机 实验记录 #include #include int main() { int i; double x1[20],x2[20],x3[20]; double x10,x20,x30; printf("pleas

24、e input x1,x2,x3:\n"); scanf("%lf%lf%lf",&x10,&x20,&x30); printf(" n x1[n] x2[n] x3[n]\n"); for(i=0;i<18;i++) { x1[0]=x10; x2[0]=x20; x3[0]=x30; x1[i+1]=0.1*x2[i]+0.2*x3[i]+0.72; x2[i+1]=0.1*x1[i]+0.2*x3[i]+0.83;

25、 x3[i+1]=0.2*x1[i]+0.2*x2[i]+0.84; printf("%5d %5lf %5lf %5lf\n",i,x1[i],x2[i],x3[i]); } return 0; } 心得体会 在编写算法是不熟悉,查阅了很多资料,经过反复研究和试验后实现了题目的要求,使用雅克比迭代法和高斯-赛德尔都可以得到方程的解,但相比之下,高斯-赛德尔的迭代次数要比雅克比的迭代次数少,能够更快的达到所求的解的精度。 实验名称 实验四 代数插值和最小

26、二乘法拟合 实验内容和要求 1.学习使用拉格朗日插值法或牛顿插值法求解方法。 2.了解最小二乘法的多项式拟合的具体计算方法并且注意克服正规方程组的病态。 给定数据点(xi ,yi)如下: xi 0 0.5 0.6 0.7 0.8 0.9 1.0 yi 1 1.75 1.96 2.19 2.44 2.71 3.00 (1) 使用拉格朗日插值法或牛顿插值法, 求f(0.856)的近似值. (2) 用最小二乘法拟合数据的(n次)多项式,求f(0.856)的近似值. (3) 对比、分析上两结果 实验原理 设函数在区间[a,b]上n+1互异节点x0,x

27、1,…,xn上的函数值分别为y0,y1,…,yn,求n次插值多项式Pn(x),满足条件 Pn(xj)=yj, j=0,1,…,n 令 Ln(x)=y0l0(x)+y1l1(x)+…+ynln(x)= ∑yili(x) 其中l0(x),l1(x),…, ln(x) 为以x0,x1,…,xn为节点的n次插值基函数,则Ln(x)是一次数不超过n的多项式,且满足 Ln(xj)=yj, L=0,1,…,n 再由插值多项式的唯一性,得 Pn(x)≡Ln(x) 主要仪器设备 HP计算机 实验记录(写出实验内容中的程序代码和运行结果)(可分栏或加页) 拉格朗日插值法: #inc

28、lude "stdio.h" int main() { double m=1.0,a=0.856,l=0; int i,j; double x[6]={0.50,0.60,0.70,0.80,0.90,1.00}; double y[6]={1.75,1.96,2.19,2.44,2.71,3.00}; for(i=0;i<=5;i++) { for(j=0;j<=5;j++) { if(i==j) continue; m=m*((a-x[j])/(x[i]-x[j])); } l+=y[i]*m; m

29、1; } printf("结果为%lf",l); return 0; } 最小二乘法: #include "stdio.h" #include "math.h" int main() {double x[7]={0,0.5,0.6,0.7,0.8,0.9,1.0}, y[7]={1,1.75,1.96,2.19,2.44,2.71,3.00}, a0,a1,sum1=0,sum2=0,sum3=0,sum4=0,sum5=0,l,r; int m=6,i,k; for(i=0;i<7;i++) { sum1+=x[

30、i]; sum2+=x[i]*x[i]; sum3+=y[i]; sum4+=x[i]*y[i]; sum5+=y[i]*y[i]; } l=sum1/(m+1); a1=(sum4-l*sum3)/(sum2-l*sum1); a0=(sum3-sum1*a1)/(m+1); double s=sum3*a0+sum4*a1; r=sum5-s; printf("y=a0+a1*x\n"); printf("a0=%f a1=%f\t\n",a0,a1,r); double q=0

31、856,p; p=a0+a1*q; printf("y=%f\n",p); return 0; } 心得体会 拉格朗日插值的优点是插值多项式特别容易建立,缺点是增加节点是原有多项式不能利用,必须重新建立,即所有基函数都要重新计算,这就造成计算量的浪费。牛顿插值多项式的优点是增加节点时,原先的差商仍旧不变,仍可以使用。 数据拟合的具体作法是:对给定的数据(xi ,yi)(i=0,1,…,m),在取定的函数类中,求p(x)属于此函数类,使误差ri=p(xi)- yi (i=0,1,…,m)的平方和最小,即: ∑ri2=∑(∑p(xi)-yi)2=min 从几何意义上讲,就是寻求与给定点(xi ,yi)(i=0,1,…,m)的距离平方和为最小的曲线y=p(x)。

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服