《数值计算方法实验报告》由会员分享,可在线阅读,更多相关《数值计算方法实验报告(20页珍藏版)》请在人人文库网上搜索。
1、本科实验报告实验过程数值计算和方法大学名称专业名称学生姓名学生学号指导教师实验场所实验成绩2006年4月22日6年5月目录实验1:舍入误差和数值稳定性21.1目的和要求21.2舍入误差和数值稳定性21.2.1概述21.2.2程序和范例2实验2:方程式52.2二分法52.2.1算法52.2.2程序和范例5实验3牛顿迭代方法72.3.1算法7实验3牛顿迭代方法102.3.1算法10实验4:热主成分高斯消去法134.1算法134.2程序和范例14实验5:牛顿插值多项式165.1算法165.2程序和范例16实验1:舍入误差和数值稳定性1.1目的和要求(1)通过机器编程,审查和整合以前学过的编程语言和机。
2、器操作说明。(2)详述舍入误差引起的数值不稳定性,以便理解。1.2舍入误差和数值稳定性1.2.1摘要舍入误差是计算方法中非常重要的概念。在实际计算中,选择不同的算法会受到舍入误差的影响,得到非常不同的结果。因此,选择稳定的算法在实际计算中非常重要。1.2.2程序和范例N=0,1,2,计算40的明确积分算法1使用递归公式拿0。算法2使用递归公式(n=420,39,1)我注意到了醉意算法1 C语言程序为:#include#includeVoid main()双y_0=日志(6.0/5.0),y _ 1;/定义两个变量y_1,y_2的值/int n=1;/周期变量定义/Printf(y0=%-20f。
3、 ,y _ 0);/y0的值输出/While(1) /使用While循环递归计算/y _ 1=1.0/n-5 * y _ 0;/yn的值,y_0表示yn 1,y1表示yn/Printf(y%d=%-20f ,n,y _ 1);/计算的yn值输出小于20个字符的值的刷新空格/if(n=40)break;/n=40,偏离回路/y _ 0=y _ 1;/y_1的值作为y_0下一次计算的yn-1/n;/n逐步重叠/if(n % 2=0)printf( n );/每两个换行/算法2 C语言程序如下#include#includeVoid main()Double y _ 0=(1/205.0 1/246。
4、.0)/2,y _ 1;/定义两个双精度变量y_0、y_1并为y_指定值/Int n=40/分配n=40/Printf(y40=%-20f ,y _ 0);/y导出为20的字段宽度,y_0的值输出为/While(1)y _ 1=1/(5.0 * n)-y _ 0/5.0;/递归公式肌肉计算y1/Printf(y%d=%-20f ,n-1,y _ 1);/计算次数n-1级y_(n-1)的值输出/if(n=1)break;/n=1,偏离回路/y _ 0=y _ 1;/将y_1的值指定给y_0/n-;/n自身相减/if(n % 3=0)printf( n );/n为奇数,空行/实验2:方程式2.2二。
5、分法2.2.1算法在指定部分a,b中,将f(a)和f(b)符号相反地设置为根的容差,将设置为|f(x)|的容差。命令(a b)/2。(c-a)或| f (c) | 时输出c,结束;否则,请执行。如果F(a)f(c)0,则a=c;否则,b=c,重复。2.2.2程序和范例范例2.1寻找靠近1.5的方程式。c语言程序包括:#include#include/*调用将EPS和delta定义为5e-6 e-6*/的库函数#define EPS 5e-6#define delta 1e-6Float bi section (float a,float b,float (* f) (float)/* bi s。
6、ection是二分法*/Float c、fc、fa=(*f)(a),FB=(* f)(b);int n=1;Printf(二分法 t TC t t f(c) n );While(1)/*整个bisection的While循环*/If(fa*fb0) printf(“不能用二分法求解”);BreakC=(a b)/2,fc=(* f)(c);printf(“% d t t % f t t % f n”,n,c,fc);if(fab)#include#define N 100 /*定义重复次数的允许值100*/#define EPS 1e-6 /*根的公差为1e-6*/#define eta 1e。
7、-8Float Newton (Float (* f) (float),float (* f1) (float),float x0)/*定义了两个指针函数f和f1,它们的返回值都是floatFloat x1,d;int k=0;Dox1=x0-(* f)(x0)/(* f1)(x0);/*重复公式*/if(k n | | faps(* f1)(x1)n或x1替换为函数f1的浮点数的绝对值大于eps*/Printf(n Newton重复发散);/*输出“Newton重复发散”和换行*/Breakd=fab(x1)1?x1-x 03360(x1-x0)/x1;/*如果x1的绝对值小于1,则将x1=。
8、x0分配给d,反之将(x1-x0)/x1分配给d*/X0=x1Printf(x(%d)=%ft ,k,x0);/*输出类型为浮点数字x0,后跟4个空格,输出重复次数k*/while(faps(d)EPS faps(* f)(x1)eta);/*如果浮点d的绝对值大于EPS,将x1赋给函数f1的浮点绝对值大于eta,则为*/Return x1/*返回x1*/浮点f(浮点x)return x * x * x * x * x-3 * x-3;/*f返回值/定义双精度函数f,其值为Float f1(float x) /*双精度x1*/return 3.0 * x * x 2 * x-3;/*f1返回值。
9、*/Void main()Float x0,y0;/*定义双精度变量x0,y0*/输入Printf(重复初始值x0n )。);/*块数“重复初始值x0”和换行*/scanf(“% f”,x0);/*输入浮点数x0*/Printf(x(0)=%fn ,x0);/*输出浮点x*/Y0=牛顿(f,f1,x0);/*将y0*/中的f、f1、x0替换为NewtonPrintf(方程式的根为%fn ,y0)。/*输出“方程式的根”换行*/实验3牛顿迭代法2.3.1算法给出初始值后,是根的容差,|f(x)|的容差,n是迭代数的容差。a)如果水果或迭代大于n,算法将失败并终止。否则就履行。B) 计算。c)如果。
10、| | 或|f()|输出,程序将终止;否则,执行。d)命令,切换。2.3.2程序和范例寻找方程式f(x)=1.5附近的布线。c语言程序包括:#include#include#define N 100 /*定义重复次数的允许值100*/#define EPS 1e-6 /*根的公差为1e-6*/#define eta 1e-8Float Newton (Float (* f) (float),float (* f1) (float),float x0)/*定义了两个指针函数f和f1,它们的返回值都是floatFloat x1,d;int k=0;Dox1=x0-(* f)(x0)/(* f1)(。
11、x0);/*重复公式*/if(k n | | faps(* f1)(x1)n或x1替换为函数f1的浮点数的绝对值大于eps*/Printf(n Newton重复发散);/*输出“Newton重复发散”和换行*/Breakd=fab(x1)1?x1-x 03360(x1-x0)/x1;/*如果x1的绝对值小于1,则将x1=x0分配给d,反之将(x1-x0)/x1分配给d*/X0=x1Printf(x(%d)=%ft ,k,x0);/*输出类型为浮点数字x0,后跟4个空格,输出重复次数k*/while(faps(d)EPS faps(* f)(x1)eta);/*如果浮点d的绝对值大于EPS,将x1赋给函数f1的浮点绝对值大于eta,则为*/Return x1/*返回x1*/浮点f(浮点x)return x * x * x * x * x-3 * x-3;/*f返回值/定义双精度函数f,其值为Float f1(float x) /*双精度x1*/return 3.0 * x * x 2 * x-3;/*f1返回值*/Void main()Float x0,y0;/*定义双精度变量x0,y0*/输入Printf(重复初始值x0n )。);/*块数“重复初始值x0”和换行*/scanf(“% f”,x0);/*输入浮点数x0*/Printf。