- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE 1
实验报告一Newton迭代法求解非线性方程实验
一、实验内容
在公元1225年,比萨的数学家Leonardo(又称Fibonacci)宣布方程的一个根为,当前颇为轰动,但没有人知道他是用什么办法得到的. 基于这个简单背景,希望我们能够利用Newton法,来真切地体会这一结果.并取初值或.
二、实验算法
第一步:非线性方程取迭代函数为
.
取恰当初值,确定跟的容许误差,,以及最大迭代的次数N.
第二步:用变量k 作为所进行的步数,即:
并给定的值
{//计算迭代函数:
//对和进行与容许误差比较: <或者<,则跳出循环体,否则继续循环. 直至满足容许误差条件或者达到最大步数跳出循环}.
第三步:跳出循环,输出方程的近似根:.
三、变量说明
N代表进行的最大步数,k是代表当前进行的步数.c,d分别代表<的真值和<的真值;a[N]代表[N]. p和q分别代表,m,n分别代表跟的容许误差和的容许误差,a[0]代表初值.
四、实验原理和流程图
实验原理 解非线性方程, Newton 法是利用的近似取代,认为近似方程的根即为原方程的根,即 在一定条件下,,并取前两项即并将其记为(近似方程),
显然的根为
;
所以有
即可以通过给定初值进行迭代,于是有:
即为牛顿迭代公式.
开始流程图
开始
是否
是
否
是
是
否否
否
否
是
是
源程序代码
#include<stdio.h>
#include<math.h>
#define N 100
main()
{
int k,c,d;
long double a[N],p,q,m=0.0000001, n=0.0000001;
for(k=1;k<N;k++)
{a[0]=1.0;
p=a[k-1]*a[k-1]*a[k-1]+2*a[k-1]*a[k-1]+10*a[k-1]-20;
q=3*a[k-1]*a[k-1]+4*a[k-1]+10;
a[k]=a[k-1]-p/q;
c=(a[k]-a[k-1])<m&&(a[k]-a[k-1])>-m;
d=(p<n)&&(p>-n);
if((c||d)==1) break; }
printf("%Lf\n", a[k]);
}
实验结果
七、上机实验体会:
通过这次数值分析实验,在程序编译中我出现了很多问题,如 EQ \o\ac(○,1)单个变量名不能和数组变量的字母相同. EQ \o\ac(○,2)C语言程序不能识别平方,只能用连乘. EQ \o\ac(○,3)给数组赋初值的时候,不能在定义数组处定义.等
在此次试验也让我更进一步了解了数学与计算机的结合,并更懂得了程序的方便性,我也认识到,自己在C语言方面的匮乏,以后在数学算法的基础上要加强对计算机语言的学习,并将所学知识结合,解决实际问题.
实验报告二 矩阵的Doolittle分解实验
一、实验内容
试对某经济系统在一个生产周期内的直接消耗系数矩阵
进行Doolittle分解.
二、实验算法
第一步: 输入矩阵的阶数,和系数矩阵;
第二步:设置循环 ,计算,.
最外部循环:for(k=0;k<n;k++).
内部循环包括两部分:
第一部分for(j=k;j<n;j++)
{s=0.0;
for (r=0;r<k-1;r++)
{s=s+l[k][r]*u[r][j];}
u[k][j]=a[k][j]-s;
printf("%Lf\n",u[k][j]);
}//计算出u[i][j]并输出.
第二部分 for(i=k+1;i<n;i++)
{s=0.0;
for(r=0;r<k-1;r++)
{s=s+l[k][r]*u[r][k];}
l[i][k]=(a[i][k]-s)/u[k][k];
printf("%Lf\n",l[i][k]);
}//计算出l[i][j]并输出.
三、变量说明
n代表系数矩阵的阶数. i,j,k作为角标.s代表和.
实验原理
矩阵分解是把n 阶方阵A(一般是方程组的系数矩阵)分解成两个或以上简单矩阵的乘积,然后对矩阵A的操作就转化为对这些简单矩阵的操作.Doolittle分解就是矩阵分解的一种,把矩阵A写成下
文档评论(0)