- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数值分析实验报告
计1310 陈万全
学号:132852
实验一
一.实验内容:
用两种不同的顺序计算,分析其误差的变化。
二.实验目的:
1. 通过上机编程,复习巩固以前所学程序设计语言;
2. 通过上机计算,了解舍入误差所引起的数值不稳定性。
3. 通过上机计算,了解运算次序对计算结果的影响,从而尽量避免大数吃小数的现象。
三.算法描述
取float类型数据从大到和从小到大的累加。然后输入结果
四.源程序:
/*********** 实验一 ********/
#include iostream
using namespace std;
float shunxi()
{
float sum=0;
for(int i=1;i10001;i++)
{
sum=sum+1.0/float(i*i);
}
return sum;
}
float daoxu()
{
float sum=0;
for(int i=10000;i0;i--)
{
sum=sum+1.0/float(i*i);
}
return sum;
}
int main()
{
cout.precision(10);
cout第一个顺序方法的值:shunxi()endl;
cout第二个倒序方法的值:daoxu()endl;
return 0;
}
五、程序结果
六.实验体会
这个程序还是比较简单的,仅仅需要一个循环就可以完成,只要细心就不会有错。从这个实验里我也看到了计算机毕竟不是万能的,由于机器字长的问题对于一些特殊的计算会出错——即大数吃小数这样的计算,这样会让人们在日常的生产生活中产生一些意想不到的问题。不过只要稍微对计算方法做一下改动就可以改正这种错误——改变算术的顺序。至于从哪个方向计算更好,那就要具体问题具体分析了.
对于程序上的解决了,cout输出的小数保留的位数。
实验二
一.实验内容:
1、拉格朗日插值
按下列数据
x -3.0 -1.0 1.0 2.0 3.0 y 1.0 1.5 2.0 2.0 1.0 作二次插值,并求x=-2,x=0,x=2.75时的函数近似值
2牛顿插值
按下列数据
x 0.30 0.42 0.50 0.58 0.66 0.72 y 1.04403 1.08462 1.11803 1.15603 1.19817 1.23223 作五次插值,并求x=0.46,x=0.55,x=0.60时的函数近似值.
二.实验目的:
掌握牛顿插值法。
掌握拉格朗日插值法。
三.算法描述
开始时判断输入的点是否在区间内,不在则退出
在则继续根据值选择节点 带入公式计算
四 源程序:
朗格朗日二次插值
#include iostream
using namespace std;
double inser(double x)
{
double sum1,sum2,sum3,sum;
double xi[5]={-3.0,-1.0,1.0,2.0,3.0};
double yi[5]={1.0,1.5,2.0,2.0,1.0};
int i;
int a,b,c;
for (i=0;i5;i++)
{
if (xxi[i]xxi[i+1]||xxi[0]||xxi[4])
{
a=i;
b=(i+1)%5;
c=(i+2)%5;
break;
}
}
sum1=yi[a]*(x-xi[b])*(x-xi[c])/((xi[a]-xi[b])*(xi[a]-xi[c]));
sum2=yi[b]*(x-xi[a])*(x-xi[c])/((xi[b]-xi[a])*(xi[b]-xi[c]));
sum3=yi[c]*(x-xi[b])*(x-xi[a])/((xi[c]-xi[b])*(xi[c]-xi[a]));
sum=sum1+sum2+sum3;
return sum;
}
int main()
{
cout朗格朗日二次插值-2.0的值:inser(-2.0)endl;
cout朗格朗日二次插值0.0的值:inser(0.0)endl;
cout朗格朗日二次插值2.75的值:inser(2.75)endl;
return 0;
}
牛顿插值
#include iostream
using namespace std;
#define N 6
double fi[N];
int chazhi();
double niudun(double x)
{
double xi[N]={0.3,0.42,0.5,0.58,0.66,0.72};
double yi[N]={1.04403,1.0
文档评论(0)