数值实验报告.docx

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

北京XX大学计算机与通信工程学院

实验报告

实验名称: 《数值计算方法》课程实验

学生姓名: XX

专 业: 计算机科学与技术

班 级: XXXX

学 号: XXXXXX

指导教师: XXXXX

实验成绩: 实验地点: XXXXXXX

实验时间: 2017 年 6 月 6 日

欢迎下载

一、实验目的与实验要求

1、实验目的

实验1:

探究非线性方程的解法,比较不同解法的优劣性,针对具体问题对解法进行

实践,并迭代达到指定的精确度。

实验2:

探究一般化曲线拟合的方法,采用最小二乘法对含有多项式,指数和对数多

种形式的函数进行拟合,确定拟合结果中的系数。

实验3:

探究多种积分的数值解法,根据给定的精度,选择恰当的数值积分方法,确

定迭代步数与步长,分析积分数值解法的优劣性。

2、实验要求

实验1:

采用两种算法求解非线性方程,比较两种算法的性能。

实验2:

用最小二乘法拟合由不超过三阶多项式和指数、对数函数线性组合成的符合

函数,确定各个项的系数

实验3:

自选一种数值积分方法求解积分值,根据要求的精度给出最终的迭代步数和

步长,分析优缺点。

二、实验设备(环境)及要求

实验1,3采用C语言编写,编译环境为DEVC++。

实验2涉及矩阵操作,故采用MATLAB编写。

三、实验内容与步骤

1、实验1

实验内容

·采用至少两种不同的算法求解ex+3*x3-x2-2=0在[0,1]范围内的一个根,要求

欢迎下载

两次迭代误差小于10-4。

·根据实验结果,比较分析不同算法的性能。

主要步骤

本实验由C语言实现。

在两种不同的算法上选用简单迭代法和牛顿迭代法。简单迭代法是将方程化成一个与原方程同解的方程,方程一端化成自变量x,然后判断迭代函数是否收敛,如果收敛的话,不停地迭代将使x趋于一个定值,这个定值就是原方程的近

似解。而牛顿迭代法是直接给出形如 的迭代函数进行迭代,如

果满足两个端点异号,f’(x)在[a,b]上不等于零,f’’(x)在[a,b]上不变号且初值 满

足条件f( )f’’( )≥0,则由牛顿迭代法产生的序列单调收敛于[a,b]内的唯一根。两种算法在理论上,牛顿迭代法的收敛速度要大于简单迭代法,以下进行迭

代解非线性方程组并验证收敛速度的差异。

简单迭代法:

将 移项,整理,得到迭代函数如下:

,选取收敛的初值点 =0。在实现上利用for循环进行迭代,

直到相邻两次的误差小于简单迭代函数:

。C语言代码如下:

floatSimpleIteration(floatx) //简单迭代

{

returnpow((x*x+2-exp(x))/3.0,1.0/3); //pow(doublex,doubley);

函数为求x的y次方

}

主函数中简单迭代法部分:a[0]=SimpleIteration(0); //简单迭代法printf(简单迭代法:\n);

printf(迭代值\t\t相邻两次误差\n);

printf(%f\n,a[0]);for(i=1;;i++)

{

[ai]=SimpleIteration(a[i-1]);

欢迎下载

d=1fabs(a[i]a[i1])

print(f%f\t%f\n,a[i],d1)if(d11e-4)break

}

牛顿迭代法:

根据牛顿迭代法迭代函数的一般形式可以得到具体的迭代函数如下:

,选取与简单迭代法相同的初值

牛顿迭代函数:

floatNewtonIteration(floatx) //牛顿迭代

{

=0。C语言代码如下:

returnx(exp(x)+3*x*x*xx*x2)/(exp(x)+9*x*x2*x)

}

主函数中牛顿迭代法的部分:

b[0]=NewtonIteration(0) //牛顿迭代法printf(\n牛顿迭代法:\n)

printf(迭代值\t\t相邻两次误差\n)

printf(%f\n,b[0])for(j=1 j++)

{

[bj]=NewtonIteration(b[j1])

d=2fabs(b[j]b[j1])

print(f%f\t%f\n,b[j],d2)if(d21e-4)break

}

两个迭代法完整C语言代码如下:

#includestdio.h#includemath.h#includestdlib.h#defineMAXSIZE30

floatSimpleIteration(floatx) //简单迭代

{

returnpow((x*x+2exp(x))/3.0

文档评论(0)

hao187 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档