




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、( 实验报告的首页 )本科实验报告课程名称: 计算机数值方法实验项目: 方程求根、 线性方程组的直接求解和迭代求解、 代数差值和最小二乘法拟合实验地点:专业班级: 学号:学生姓名:指导教师:学生姓名实验成绩实验名称实验一 方程求根实验目的和要求 (必填)熟悉使用二分法、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。 选择上述方法中的两种方法 求方程: f(x)=x 3+4x2-10=0 在1,2内的一个实根,且要求 满足精度 |x*-xn|0.5 10-5实验内容 和原理(必填)函数 f(x) 在区间( x, y)上连续,先在区间( x,y )确定 a 与 b,若 f(a) ,f(b)
2、 异号,说明在区间 (a ,b) 内存在零点,然后求 f(a+b)/2 。假设 F(a)0,ab , 如果 f(a+b)/2=0 ,该点即为零点; 如果 f(a+b)/20 ,则区间 (a,(a+b)/2) 内存在零点, (a+b)/2 b;返回重新循环,不断接近零点。通过每次把 f(x) 的零点所在区间收缩一半的 方法,使区间内的两个端点逐步逼近函数零点,最终求得零点近似值。主要仪器设备台式或笔记本计算机实验记录(写出实验内容中的程序代码和运行结果 )( 可分栏或加页 )1. 割线法 程序代码#include stdio.h#include math.hint main()float c,a
3、=1.0,b=2.0;while(1) c=b-(b*b*b+4*b*b-10)*(b-a)/(b*b*b+4*b*b-a*a*a-4*a*a); if(fabs(b-c)0.5*0.00001)break;b=c; printf(%fn,b); printf(%fn,c); getch();2. 二分法 程序代码#include stdio.h#include stdlib.h#include math.hint main() double a=1.0, b=2.0; double c,d; while(1) c=(a+b)/2;d=pow(c,3)+4*c*c-10;if (-0.0000
4、05 d & d 0.000005)break; else if(d 0) b=c; printf(%ft%fn,a,b); printf(%fn,c); printf(%fn,d); getch(); return 0; 截图实验结果和分析用二分法和割线法均能计算出方程的根, 但割线计算次数少于二分法, 且能够较早达 到精度要求,割线法的代码也较为简单明了,实用方便。心得体会(遇到的问题和解决方法)通过本次试验, 编写代码,运行程序,使我复习了 c 语言的同时也加深了对二分法和 割线法的理解,并认识了一些新的函数。实验名称实验二 线性方程组的直接求解实验目的和要求合理选择利用 Gauss消元
5、法、 LU 分解法、追赶法求解下列方程组:123x1012x2241x30.3 10 154846.130 1 2x246.789 5 2x312 1 1x42148135.29111.259.14 3 1 x159.1752106122172x2x3836 112077x251xn 152xn5x4211 2 1 121x17n=5,10,100,)实验内容LU 分解法: 将系数矩阵 A 转化为 A=L*U ,L 为单位下三角矩阵, U 为普通上三角矩 阵,然后通过解方程组 l*y=b ,u*x=y, 来求解 x。高斯消元法:将原方程组化为三角形方阵的方程组: l ik =aik /a kk
6、 aij = aij - l ik* a kj ( k=1,2, ,n-1 i=k+1,k+2, ,n j=k+1,k+2, ,n+1 )xn= a nn+1/ a nn xk=( a kn+1- akj x j )/ a kk完全主元素消元法和列主元素消元法主要仪器设备台式或笔记本计算机实验记录(写出实验内容中的程序代码和运行结果 )( 可分栏或加页 )1.列主元素消元法 程序代码#include stdio.hint main()float a34=1,2,3,14,0,1,2,8,2,4,1,13;float x3;float sum=0;int k,i,j;for(k=0;k2;k+)
7、for(i=k+1;i3;i+)for(j=k+1;j4;j+) aij=aij-aik/akk*akj; for(i=0;i3;i+)for(j=0;j=0;k-)sum=0;for(j=k+1;j3;j+) sum+=akj*xj;xk=(ak3-sum)/akk;for(i=0;i3;i+)printf (x%d=%fn,i+1,xi);printf(n); getch();2.完全主元素消元法#include “stdio.h”#include”iostream”use namespace st;d#include”math.h”float a100101;float x10;int
8、N;void shuchu()for(int i=1;i=N;i+)for(int j=1;j=N+1;j+) coutaij ; coutendl;void initdata()cout 请输入矩阵阶数 :N;cout 请输入矩阵各项 :endl;for(int i=1;i=N;i+) for(int j=1;jaij; coutendl;void main() int i , k;int z10;int maxi,maxj; initdata(); for( i=1;i=N;i+) zi=i;for( k=1;kN;k+) maxi=k;maxj=k;float maxv=abs(akk)
9、; for(i=k;i=N;i+)for(int j=k;jmaxv) maxv=abs(aij);maxi=i;maxj=j; if(maxi!=k) for(int j=1;j=N+1;j+) float t=akj;akj=amaxij;amaxij=t; if(maxj!=k)for(i=1;i=N;i+)float t=aik;aik=aimaxj;aimaxj=t;int t=zk;zk=zmaxj;zmaxj=t;for(int i=k+1;i=N;i+)float l=aik/akk;for(int j=k;j0;i-)float s=0;for(int j=i+1;j=N;j
10、+) s+=aij*xzj; xzi=(aiN+1-s)/aii;cout 完全主元素消去法之后的矩阵为: endl; shuchu();for(i=1;i=N;i+) coutxi=xiendl;截图实验结果和分析对于完全主元素和列族元素, 都是先消元,再进行回代, 过程中可以不计算主元素下 方的数据,以节约内存和时间。列主元素消元法相比完全主元素要节省时间, 而且在算法设计上优于完全主元素, 它 只需要一次按列选主元素然后换行使之变到主元素位置,在进行消元即可。对于 LU 分解法,分解矩阵为单位下三角阵 L 与上三角阵 U 的乘积,然后解方程组 Ly=b,回代,解方程组 Ux=y 。其中的
11、 L 为 n阶单位下三角阵、 U 为上三角阵。心得体会(遇到的问题和解决方法) 本次试验的编程过程非常复杂, 不得不借助网络查询相关知识, 通过不断地修改, 是 我更加熟悉对于 c和 c+的使用,同时对于消元法有了更深的理解,同时也是我认识到自己知识的匮乏,还需更加深入的学习实验名称实验三 线性方程组的迭代求解实验目的和要求使用雅可比迭代法或高斯 -赛德尔迭代法对下列方程组进行求解。 10x1 x2 2x3 7.2x1 10x2 2x3 8.3x1 x2 5x3 4.2实验内容设线性方程组 Ax=b的系数矩阵 A可逆,且主对角元素 a11,a 22, ,a nn均不为零,令 D=diag( a
12、11,a 22, ,a nn) ,并将 A分解成 A=(A-D)+D ,从而线性方程组可写为方程 Dx=(D-A)x+b,则有迭代公式 x(k+1) =B1x(k) +f 1其中,B1=I-D -1 A,f 1=D-1 b。主要仪器设备台式或笔记本计算机实验记录(写出实验内容中的程序代码和运行结果 )( 可分栏或加页 )1. 雅克比迭代法 程序代码#include stdio.h#include math.hint main()float a33=10,-1,-2,-1,10,-2,-1,-1,5,b3=7.2,8.3,4.2; float x3=0,0,0,sum;int i,j,k,n=3
13、; for(k=0;k10;k+) for(i=0;i3;i+)sum=0; for(j=0;jn;j+) if(i=j)continue; sum=sum+aij*xj; xi=(bi-sum)/aii; for(i=0;in;i+) printf(x%d=%ft,i+1,xi);printf(n); getch();2. 高斯赛德尔迭代 程序代码#include iostream #include iomanip using namespace std;int main() int i,j,k=0,m,n; double t1,t2,e1,e2=0.0;coute1;coutm;coutn
14、; coutendl;double (*a)=new double *m;/ 生成二维动态数组 for(i=0;i=m;i+) ai=new doublen;double (*b)=new double m; double (*x)=new double n;endl;cout 请输入系数矩阵: endl; coutfor(int num1=0;num1m;num1+) for(int num2=0;num2anum1num2; coutendl;cout 输入的系数矩阵为: endl; for (int num3=0;num3m;num3+) for(int num4=0;num4n;num
15、4+) coutanum3num4 ; coutendl;coutendl;cout 请输入矩阵 b: endl;coutendl;for(int num5=0;num5bnum5;cout 输入的矩阵 b 为: endl;for(int num6=0;num6m;num6+)coutbnum6 ;coutendl;coutendl;for(int num7=0;num7n;num7+)xnum7=0.0000;docout 第 k 次迭代值: ;e2=0.0;for(i=0;im;i+)double sum=0.0;for(j=0;j=0?(xi)-t1:t1-(xi); e2=(e2=t2
16、?e2:t2);coutsetprecision(8)xi ; cout=e1&k30);cout 共迭代了 k 次;deletea; deleteb; deletex; return 0 ;截图实验结果和分析用高斯赛德尔和雅克比迭代都可以求出方程的解, 带高斯赛德尔迭代法的迭代次数少于雅克比迭代,能够更早的达到精度要求,所需时间更短,时效性好。心得体会(遇到的问题和解决方法) 通过此次试验,结合书本知识与编程让我正真学会了高斯赛德尔和雅克比迭代法, 同时复习了 c和 c+,一举多得。实验名称 实验四代数插值和最小二乘法拟合 实验目的和要求1. 使用拉格朗日插值法或牛顿插值法求解:已知 f(x
17、)在6 个点的函数值如下表所示, 运用插值方法,求 f(0.596)的近似值。x0.400.550.650.800.901.05f(x)0.410750.578150.696750.888111.026521.253862. 给定数据点( xi ,yi),用最小二乘法拟合数据的多项式,并求平方误差。xi00.50.60.70.80.91.0yi11.751.962.192.442.713.00实验内容1. 设函数在区间 a,b 上 n+1 互异节点 x0,x1, ,xn 上的函数值分别为 y0,y1,yn, 求 n 次插值多项式 Pn(x) , 满足条件 Pn(x j)=yj, j=0,1,
18、,n 令 Ln(x)=y 0l 0(x)+y 1l 1(x)+ +ynl n(x)= yi l i (x) 其中 l 0(x),l 1(x), , l n(x) 为以 x0,x 1,x n为节点的 n次插值基 函数,则 Ln(x) 是一次数不超过 n的多项式,且满足 Ln(x j)=y j, L=0,1, ,n 再由插值多项式的唯一性,得 Pn(x) Ln(x)2. 建立正规方程组: j+k j(xi )ak=xi yi , j=0,1, ,nk2平方误差: I=( akx i k-y i)2 对给定数据点 (Xi ,Yi)(i=0,1 ,m),在取定的函数类 中,求 p(x),使误 差的平方
19、和 E2最小, E2= p(Xi)-Yi 2。从几何意义上讲,就是寻求与给定点 (Xi ,Yi)(i=0,1 ,m)的距离平方和为最 小的曲线 y=p(x )。函数 p(x)称为拟合函数或最小二乘解,求拟合函数 p(x)的方法 称为曲线拟合的最小二乘法。得到的两个关于 a0、 a1为未知数的两个方程组,解这两个方程组得出:a0 = (Yi) / m - a1 (Xi) / ma1 = m Xi Yi - (Xi Yi) / m Xi2 - ( Xi)2 )即最终的拟合多项式各项系数主要仪器设备台式或笔记本计算机实验记录(写出实验内容中的程序代码和运行结果 )( 可分栏或加页 ) 1. 代数插值
20、 程序代码#include stdio.h #include stdlib.h #include conio.h #include alloc.h void difference(float *x,float *y,int n) float *f; int k,i; f=(float *)malloc(n*sizeof(float); for(k=1;k=n;k+) f0=yk; for(i=0;ik;i+)fi+1=(fi-yi)/(xk-xi); yk=fk; return; int main() int i,n; float x20,y20,xx,yy; printf(input dat
21、e number n: ); scanf(%d,&n);printf(n); for(i=0;i=0;i-) yy=yy*(xx-xi)+yi;printf(napproximate number:(%f)=%fn,xx,yy); getch();2. 最小二乘法拟合多项式#include ”iostream”#include ”fstream”using namespace std;#define N 15double power(double &a,int n)double b=1;for(int i=0;in;i+)b*=a;return b;void Gauss();double XN
22、,YN,sumXN,sumYN,aNN,bN,lNN,xN;int main()ofstream outdata;ifstream indata;double s;int i,j,k,n,index;coutn;coutendl;cout 请输入 X 和 Y:endl;for(i=0;in;i+) coutXiXi; sumX1+=Xi; coutYiYi; sumY1+=Yi; coutendl; coutsumX1=sumX1tsumY1=sumY1endl; coutindex;coutendl;i=n;sumX0=i;for(i=2;i=2*index;i+)sumXi=0;for(j=0;jn;j+)sumXi+=power(Xj,i);coutsumXi=sumXiendl; for(i=2;i=index+1;i+)sumYi=0;for(j=0;jn;j+)sumYi+=power(Xj,i-1)*Yj;coutsumYi=sumYiendl; for(i=1;i=index+1;i+)for
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年宠物美容师高级面试题
- 2025年药物滥用公共卫生安全教育题及答案
- 2025年人际关系心理学考试试题及答案解析
- 2025年宠物动物营养学初级考试重点题
- 2025年建筑工程师执业资格考试试题及答案解析
- 2025年家政服务管理师职业资格考试试题及答案解析
- 2025年安全生产培训题库及模拟测试
- 2025年电子竞技行业入门初级面试预测题解析
- 2025年养老机构等级评定预测题
- 2025年公共关系执行师专业知识考试试题及答案解析
- 2025年CAD机械制图考试题库及答案
- 云南省澜沧拉祜族自治县2025年上半年事业单位公开招聘教师岗试题含答案分析
- 2025工会基础知识考试题库及参考答案
- 2024广西公需课高质量共建“一带一路”谱写人类命运共同体新篇章答案
- 完整的离婚协议书打印电子版(2025年版)
- 转岗申请表(标准样本)
- 中医病证诊断疗效标准
- 数独课件完整版
- GA 568-2022警服夏执勤短袖衬衣
- 淮扬菜-淮安淮扬菜名单大全
- 2021年秋期新人教版部编本六年级语文上册教材解读
评论
0/150
提交评论