计算数值实验报告太原理工大学.docx
- 文档编号:9661360
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:32
- 大小:159.10KB
计算数值实验报告太原理工大学.docx
《计算数值实验报告太原理工大学.docx》由会员分享,可在线阅读,更多相关《计算数值实验报告太原理工大学.docx(32页珍藏版)》请在冰豆网上搜索。
计算数值实验报告太原理工大学
本科实验报告
课程名称:
计算数值方法
实验地点:
综合楼五层506室
专业班级:
计科1002学号:
**********
学生姓名:
xxx
******
2012年6月20
太原理工大学学生实验报告
学院名称
计算机科学与技术
专业班级
计科1002
学号
2010001414
学生姓名
xxx
实验日期
2012.6.5
成绩
课程名称
计算数值方法
实验题目
实验一方程求根
一、课题名称
方程求根:
熟悉使用、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。
选择上述方法中的两种方法求方程:
二分法f(x)=x3+4x2-10=0在[1,2]内的一个实根,且要求满足精度|x*-xn|<0.5×10-5
迭代法:
用迭代公式x=f(x)进行迭代计算,直到满足|x*-xn|<0.5×10-5为止。
二分法:
设f(x)在[a,b]上连续,且f(a1)*f(x1)<0,记(a2,b2)=(x1,b1)带入计算式进行计算直到|x*-xn|<0.5×10-5为止。
二、目的和意义
(1)了解非线性方程求根的常见方法,如二分法、迭代法、牛顿法、割线法。
(2)加深对方程求根方法的认识,掌握算法。
会进行误差分析,并能对不同方法进行比较。
三、计算公式
(1)迭代法
1).首先对给定的计算公式进行变形使其能够迭代或者找出相应迭代速度较快的式子。
2).带入求好的式子到循环中去比如:
(2)二分法:
f(x)在区间(x,y)上连续
1).先找到a、b属于区间(x,y),使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2],
2).如果f[(a+b)/2]=0,该点就是零点,
如果f[(a+b)/2]<0,则在区间((a+b)/2,b)内有零点,反之在(a,(a+b)/2)内有零点带入1)中继续。
四、主要仪器设备
Vc++9.0C-freeCodeBlocks
五、结构程序设计
迭代法:
#include
#include
main()
{
inti;
doublexn[15],y,x1,x2,m;
printf("请输入x1,x2的值:
\n");
scanf("%lf%lf",&x1,&x2);
printf("请输入精度要求:
\n");
scanf("%lf",&m);
printf("nxn\n");
i=0;
do{
xn[0]=(x1+x2)/2;
xn[i+1]=sqrt(10/(4+xn[i]));//迭代
printf("%5d%5lf\n",i,xn[i]);
y=fabs(xn[i+1]-xn[i]);i++;
if(y }while (1); } 二分法: #include #include main() { intm,n,o,p; doublea,b,l; printf("请输入x^3,x^2,x的系数和常数p: \n"); scanf("%d%d%d%d",&m,&n,&o,&p);//140-10 printf("请输入x1,x2: \n"); scanf("%lf%lf",&a,&b);//12 printf("请输入精度要求: \n"); scanf("%lf",&l);//0.5x10^5 printf("nanbnxnf(xn)\n"); doublex,fx; inti=1; do { x=(b+a)/2; fx=m*x*x*x+n*x*x+o*x+p; printf("%5d%5f%5f%5f%5f\n",i,a,b,x,fx); i++; if(fx==0)break; if(fx>0)b=x; elseif(fx<0)a=x; if((b-a) break;//进行计算并返值 }while (1); } 六、结果讨论和分析 二分法: 迭代法: 分析讨论: 使用不同的方法,可以不同程度的求得方程的解,不同的方法速度不同,求得的结果也稍有区别,当然和要求精度也有关系。 刚开始的时候用数组对二分法进行求解,发现循环到第二次就无法实现值的传递,于是换了另外一种方法代替了数组。 流程图: 实验地点 综合楼五层506室 指导教师 王峥 太原理工大学学生实验报告 学院名称 计算机科学与技术 专业班级 计科1002 学号 2010001414 学生姓名 xxx 实验日期 2012.6.5 成绩 课程名称 计算数值方法 实验题目 实验二线性方程组的直接解法 一、课题名称 线性方程组的直接解法 合理利用Gauss消元法、LU分解法、追赶法求解下列方程组: ① ② ③ ④ (n=5,10,100…) 二、目的和意义 (1)了解线性方程组常见的直接解法,如Guass消元法、LU分解法、追赶法。 (2)加深对线性方程组求解方法的认识,掌握算法。 (3)会进行误差分析,并能对不同方法进行比较。 三、计算公式 高斯分解法: 将原方程组化为三角形方阵的方程组: lik=aik/akk aij=aij-lik*akjk=1,2,…,n-1 i=k+1,k+2,…,nj=k+1,k+2,…,n+1 由回代过程求得原方程组的解: xn=ann+1/ann xk=(akn+1-∑akjxj)/akk(k=n-1,n-2,…,2,1) LU分解法: 将系数矩阵A转化为A=L*U,L为单位下三角矩阵,U为普通上三角矩阵,然后通过解方程组l*y=b,u*x=y,来求解x. 追赶法: 用来求对角方程组;将系数矩阵A转化为A=L*U,L为普通下n-1对角矩阵,U为单位上n-1对角矩阵,然后通过解方程组l*y=b,u*x=y,来求解x. 四、主要仪器设备 Vc++9.0C-freeCodeBlocks 五、结构程序设计 Gauss消元法: #include #include usingnamespacestd; intmain() { intn,i,j,k; doublea[100][100],b[100],o; cout<<"输入未知数个数: "< cin>>n; cout<<"输入数列: "< for(i=1;i<=n;i++) for(j=1;j<=n+1;j++) cin>>a[i][j]; for(i=1;i<=n;i++) for(j=i+1;j<=n;j++) if(fabs(a[j][i])>1e-7) { o=a[i][i]/a[j][i]; for(k=i;k<=n+1;k++) a[j][k]=a[j][k]*o-a[i][k]; } for(i=n;i>0;i--) { b[i]=a[i][n+1]/a[i][i]; for(j=i-1;j>0;j--) a[j][n+1]=a[j][n+1]-b[i]*a[j][i]; } cout<<"解得:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算 数值 实验 报告 太原 理工大学