数值计算方法实验指导Matlab版.docx

上传人:b****6 文档编号:10196119 上传时间:2023-02-09 格式:DOCX 页数:54 大小:230.25KB
下载 相关 举报
数值计算方法实验指导Matlab版.docx_第1页
第1页 / 共54页
数值计算方法实验指导Matlab版.docx_第2页
第2页 / 共54页
数值计算方法实验指导Matlab版.docx_第3页
第3页 / 共54页
数值计算方法实验指导Matlab版.docx_第4页
第4页 / 共54页
数值计算方法实验指导Matlab版.docx_第5页
第5页 / 共54页
点击查看更多>>
下载资源
资源描述

数值计算方法实验指导Matlab版.docx

《数值计算方法实验指导Matlab版.docx》由会员分享,可在线阅读,更多相关《数值计算方法实验指导Matlab版.docx(54页珍藏版)》请在冰豆网上搜索。

数值计算方法实验指导Matlab版.docx

数值计算方法实验指导Matlab版

 

《数值计算方法》

实验指导

(Matlab版)

 

肇庆学院数学与统计学学院

计算方法课程组

《数值计算方法》实验1报告

班级:

20xx级XXXXx班

学号:

20xx2409xxxx

姓名:

XXX

成绩:

1.实验名称

实验1算法设计原则验证(之相近数相减、大数吃小数和简化计算步骤)

2.实验题目

(1)取

,计算

,验证两个相近的数相减会造成有效数字的损失.

(2)按不同顺序求一个较大的数(123)与1000个较小的数(

)的和,验证大数吃小数的现象.

(3)分别用直接法和秦九韶算法计算多项式

在x=1.00037处的值.验证简化计算步骤能减少运算时间.

对于第(3)题中的多项式P(x),直接逐项计算需要

次乘法和n次加法,使用秦九韶算法

则只需要n次乘法和n次加法.

3.实验目的

验证数值算法需遵循的若干规则.

4.基础理论

设计数值算法时,应避免两个相近的数相减、防止大数吃小数、简化计算步骤减少运算次数以减少运算时间并降低舍入误差的积累.两相近的数相减会损失有效数字的个数,用一个大数依次加小数,小数会被大数吃掉,乘法运算次数太多会增加运算时间.

5.实验环境

操作系统:

Windowsxp;程序设计语言:

Matlab

6.实验过程

(1)直接计算并比较;

(2)法1:

大数逐个加1000个小数,法2:

先把1000个小数相加再与大数加;

(3)将由高次项到低次项的系数保存到数组A[n]中,其中n为多项式次数.

7.结果与分析

(1)计算的

=,

分析:

(2)123逐次加1000个

的和是,先将1000个

相加,再用这个和与123相加得.

分析:

(3)计算次的多项式:

直接计算的结果是,用时;

用秦九韶算法计算的结果是,用时.

分析:

 

8.附录:

程序清单

(1)两个相近的数相减.

%*************************************************************

%*程序名:

ex1_1.m*

%*程序功能:

验证两个相近的数相减会损失有效数字个数*

%*************************************************************

%x=;

%y=;

z=1e16;

x,y

======================================================================

(2)大数吃小数

%*************************************************************

%*程序名:

ex1_2.m*

%*程序功能:

验证大数吃小数的现象.*

%*************************************************************

clc;%清屏

clearall;%释放所有内存变量

formatlong;%按双精度显示浮点数

z=123;%大数

t=3e-15;%小数

x=z;%大数依次加小数

%重复1000次给x中加上t

y=0;%先累加小数

%重复1000次给y中加上t

y=z+y;%再加到大数

x,y

======================================================================

(3)秦九韶算法

%*************************************************************

%*程序名:

ex1_3.m*

%*程序功能:

验证秦九韶算法可节省运行时间.*

%*************************************************************

clc;%清屏

clearall;%释放所有内存变量

formatlong;%按双精度显示浮点数

A=[8,4,-1,-3,6,5,3,2,1,3,2,-1,4,3,1,-2,4,6,8,9,50,-80,12,35,7,-6,42,5,6,23,74,65,55,80,78,77,98,56];

A(10001)=0;%扩展到10001项,后面的都是分量0

%A为多项式系数,从高次项到低次项

x=1.00037;

n=9000;%n为多项式次数

%直接计算

begintime=clock;%开始执行的时间

%求x的i次幂

%累加多项式的i次项

endtime=clock;%结束执行的时间

time1=etime(endtime,begintime);%运行时间

disp('直接计算');

disp(['p(',num2str(x),')=',num2str(p)]);

disp(['运行时间:

',num2str(time1),'秒']);

%秦九韶算法计算

begintime=clock;%开始执行的时间

%累加秦九韶算法中的一项

endtime=clock;%结束执行的时间

time2=etime(endtime,begintime);%运行时间

disp('');

disp('秦九韶算法计算');

disp(['p(',num2str(x),')=',num2str(p)]);

disp(['运行时间:

',num2str(time2),'秒']);

《数值计算方法》实验1报告

班级:

20xx级XXXXx班

学号:

20xx2409xxxx

姓名:

XXX

成绩:

1.实验名称

实验1算法设计原则验证(之数值稳定性)

2.实验题目

计算定积分

,分别用教材例1-7推导出的算法A和B,其中:

算法A:

算法B:

验证算法不稳定时误差会扩大.

3.实验目的

验证数值算法需遵循的若干规则.

4.基础理论

设计数值算法时,应采用数值稳定性好的算法.数值稳定的算法,误差不会放大,甚至会缩小;而数值不稳定的算法会放大误差.

5.实验环境

操作系统:

Windowsxp;程序设计语言:

Matlab

6.实验过程

分别用数组IA[]和IB[]保存两种算法计算的结果.

7.结果与分析

运行结果:

(或拷屏)

n

算法A

算法B

精确值

0

1

2

3

4

5

6

7

8

9

10

分析:

 

8.附录:

程序清单

%*************************************************************

%*程序名:

ex1_4.m*

%*程序功能:

验证数值稳定性算法可控制误差.*

%*************************************************************

clc;%清屏

clearall;%释放所有内存变量

formatlong;%按双精度显示浮点数

I=[0.63212055882856,0.36787944117144,0.26424111765712,0.20727664702865,...

0.17089341188538,0.14553294057308,0.12680235656154,0.11238350406938,...

0.10093196744492,0.09161229300662,0.08387707010843];

%保留14位小数的精确值,…是Matlab中的续行符

%算法A

IA

(1)=0.6321;%Matlab下标从1开始,所以要用IA(n+1)表示原问题中的I(n)

 

%算法B

 

disp('n算法A算法B精确值');

forn=1:

11

fprintf('%2d%14.6f%14.6f%14.6f\n',n-1,IA(n),IB(n),I(n));

end

%n显示为2位整数,其它显示为14位其中小数点后显示6位的小数

 

《数值计算方法》实验1报告

班级:

20xx级XXXXx班

学号:

20xx2409xxxx

姓名:

XXX

成绩:

1.实验名称

实验1算法设计原则(除数绝对值不能太小)

2.实验题目

将线性方程组增广矩阵利用初等行变换可化为

由此可解得

.分别解增广矩阵为

的方程组,验证除数绝对值远小于被除数绝对值的除法会导致结果失真.

3.实验目的

验证数值算法需遵循的若干规则.

4.基础理论

设计数值算法时,应避免除数绝对值远小于被除数绝对值的除法,否则绝对误差会被放大,使结果失真.

5.实验环境

操作系统:

Windowsxp;程序设计语言:

Matlab

6.实验过程

用二维数组A和B存放方程组的增广矩阵,利用题目所给初等行变换求解方程组.

7.结果与分析

第1种顺序的方程组的解为x=,y=;

第2种顺序的方程组的解为x=,y=.

分析:

 

8.附录:

程序清单

%*************************************************************

%*程序名:

ex1_5.m*

%*程序功能:

验证除数的绝对值太小可能会放大误差.*

%*************************************************************

clc;

A=[1e-16,1,1;2,1,2];

B=[2,1,2;1e-16,1,1];%增广矩阵

%方程组A

%m=-a_{21}/a_{11}是第2行加第1行的倍数

%消去a_{21}

%m=-a_{12}/a_{22}是第1行加第2行的倍数

%消去a_{12},系数矩阵成对角线

%未知数x1的值

%未知数x2的值

disp(['方程组A的解:

x1=',num2str(A(1,3)),',x2=',num2str(A(2,3))]);

disp('');

%方程组B

%m=-b_{21}/b_{11}是第2行加第1行的倍数

%消去b_{21}

%m=-b_{12}/b_{22}是第1行加第2行的倍数

%消去b_{12},系数矩阵成对角线

%未知数x1的值

%未知数x2的值

disp(['方程组B的解:

x1=',num2str(B(1,3)),',x2=',num2str(B(2,3))]);

《数值计算方法》实验2报告

班级:

20xx级XXXXx班

学号:

20xx2409xxxx

姓名:

XXX

成绩:

1.实验名称

实验2非线性方程的迭代解法(之简单迭代法)

2.实验题目

用简单迭代法求方程

在区间[1,2]内的一个实根,取绝对误差限为

3.实验目的

掌握非线性方程的简单迭代法.

4.基础理论

简单迭代法:

将方程

改写成等价形式

,从初值

开始,使用迭代公式

可以得到一个数列,若该数列收敛,则其极限即为原方程的解.取数列中适当的项可作为近似解.

5.实验环境

操作系统:

Windowsxp;程序设计语言:

Matlab

6.实验过程

7.结果与分析

8.附录:

程序清单

 

《数值计算方法》实验2报告

班级:

20xx级XXXXx班

学号:

20xx2409xxxx

姓名:

XXX

成绩:

1.实验名称

实验2非线性方程的迭代解法(之Newton迭代法)

2.实验题目

用Newton迭代法求方程

在区间[1,2]内的一个实根,取绝对误差限为

3.实验目的

掌握求解非线性方程的Newton迭代法.

4.基础理论

Newton迭代法:

解方程

的Newton迭代公式为

5.实验环境

操作系统:

Windowsxp;程序设计语言:

Matlab

6.实验过程

7.结果与分析

8.附录:

程序清单

 

《数值计算方法》实验2报告

班级:

20xx级XXXXx班

学号:

20xx2409xxxx

姓名:

XXX

成绩:

1.实验名称

实验2非线性方程的迭代解法(之对分区间法)

2.实验题目

用对分区间法求方程

在区间[1,1.5]内的一个实根,取绝对误差限为

3.实验目的

掌握求解非线性方程的对分区间法.

4.基础理论

对分区间法:

取[a,b]的中点p,若f(p)≈0或b–a<ε,则p为方程

的近似解;

若f(a)f(p)<0,则说明根在区间取[a,p]中;否则,根在区间取[p,b]中.将新的有根区间记为[a1,b1],对该区间不断重复上述步骤,即可得到方程的近似根.

5.实验环境

操作系统:

Windowsxp;程序设计语言:

Matlab

6.实验过程

用宏定义函数f(x);

为了循环方便,得到的新的有根区间始终用[a,b]表示;

由于新的有根区间可能仍以a为左端点,这样会反复使用函数值f(a),为减少运算次数,将这个函数值保存在一个变量fa中;

同样在判断新的有根区间时用到函数值f(p),若新的有根区间以p为左端点,则下一次用到的f(a)实际上就是现在的f(p),为减少运算次数,将这个函数值保存在一个变量fp中.

算法的伪代码描述:

Input:

区间端点a,b;精度要求(即误差限)ε;函数f(x);最大对分次数N

Output:

近似解或失败信息

行号

伪代码

注释

1

n←1;

对分次数计数器

2

fa←f(a);

左端点的函数值

3

whilen≤Ndo

4

p←(a+b)/2;

区间中点

5

fp←f(p);

中点的函数值

6

iffp=0or(b-a)/2<εthen

函数值为0或半区间长不超ε

7

returnp;

输出近似解并退出程序

8

endif

9

n←n+1;

计数器加一

10

iffa·fp>0then

若中点与左端点函数值同号

11

a←p;

新区间取右半区间

12

fa←fp;

13

else

否则

14

b←p;

新区间取左右半区间

15

endif

16

enddo

17

return错误信息

输出错误信息并结束程序

7.结果与分析

 

8.附录:

程序清单

说明:

源程序中带有数字的空行,对应着算法描述中的行号

%**********************************************************

%*程序名:

Bisection.m*

%*程序功能:

使用二分法求解非线性方程.*

%**********************************************************

f=inline('x^3-x-1');%定义函数f(x)

a=input('有根区间左端点:

a=');

b=input('右端点:

b=');

epsilon=input('误差限:

epsilona=');

N=input('最大对分次数:

N=');

1%对分次数计数器n置1

2%左端点的函数值给变量fa

fprintf('\nkpf(p)a(k)f(a(k))');

fprintf('b(k)b-a\n');

%显示表头

fprintf('%2d%36.6f%12.6f%12.6f%12.6f\n',0,a,fa,b,b-a);

%占2位其中0位小数显示步数0,共12位其中小数6位显示各值

3%whilen≤N

4%取区间中点p

5%求p点函数值给变量fp

fprintf('%2d%12.6f%12.6f',n,p,fp);%输出迭代过程中的中点信息p和f(p)

6%如果f(p)=0或b-a的一半小于误差限ε

fprintf('\n\n近似解为:

%f\n',p);%则输出近似根p(7)

return;%并结束程序(7)

8

9%计数器加1

10%若f(a)与f(p)同号

11%则取右半区间为新的求根区间,即a取作p

12%保存新区间左端点的函数值

13%否则

14%左半区间为新的求根区间,即b取作p

15

fprintf('%12.6f%12.6f%12.6f%12.6f\n',a,fa,b,b-a);

%显示新区间端点及左端函数值、区间长度

16

fprintf('\n\n经过%d次迭代后未达到精度要求.\n',N);%输出错误信息(行17)

《数值计算方法》实验2报告

班级:

20xx级XXXXx班

学号:

20xx2409xxxx

姓名:

XXX

成绩:

1.实验名称

实验2非线性方程的迭代解法(之Aitken-Steffensen加速法)

2.实验题目

用Aitken-Steffensen加速法求方程

在区间[1,2]内的一个实根,取绝对误差限为

3.实验目的

熟悉求解非线性方程的Aitken-Steffensen加速法.

4.基础理论

将方程

改写成等价形式

,得到从初值

开始的迭代公式

后,基于迭代公式

的Aitken-Steffensen加速法是通过“迭代-再迭代-加速”完成迭代的,具体过程为

5.实验环境

操作系统:

Windowsxp;程序设计语言:

Matlab

6.实验过程

为了验证Aitken-Steffensen加速法可以把一些不收敛的迭代加速成迭代收敛,我们使用将方程组变形为

,取迭代函数

,并利用宏定义出迭代函数.

由于不用保存迭代过程,所以用x0表示初值同时也存放前一步迭代的值,y和z是迭代过程中产生的yk和zk,x存放新迭代的结果.

算法的伪代码描述:

Input:

初值x0;精度要求(即误差限)ε;迭代函数φ(x);最大迭代次数N

Output:

近似解或失败信息

行号

伪代码

注释

1

n←1;

迭代次数计数器

2

whilen≤Ndo

3

y←φ(x0);

迭代

4

z←φ(y);

再迭代

5

x←x0–(y-x0)2/(z-2y+x0)

加速

6

if|x–x0|<εthen

如果达到精度要求

7

returnx;

则输出近似值并退出程序

8

endif

9

n←n+1;

计数器加一

10

x0←x;

新近似值给x0做下次的初值

11

enddo

12

return错误信息

输出错误信息并结束程序

7.结果与分析

8.附录:

程序清单

%*************************************************************

%*程序名:

Aitken_Steffensen.m*

%*程序功能:

用Aitken-Steffensen加速法求方程.*

%*************************************************************

clc;

clearall;

phi=inline('0.5*sqrt(10-x^3)');%迭代函数

x0=input('初值:

x0=');

epsilon=input('误差限:

epsilon=');

N=input('最大迭代次数:

N=');

disp('n迭代中间值y(n-1)再迭代结构z(n-1)加速后的近似值x(n)');

fprintf('%2d%54.6f\n',0,x0);

%占2位整数显示步数0,为了对齐,占54位小数6位显示x0

1%n是计数器

2%whilen<=N

y=3;%迭代

z=3;%再迭代

x=3;%加速

%x0初值及前一步的近似值,y和z是中间变量,x是下一步的近似值

fprintf('%2d%18.6f%18.6f%18.6f\n',n,y,z,x);

%显示中间值和迭代近似值

6%如果与上一步近似解差的绝对值不超过误差限

fprintf('\n\n近似解x≈x(%d)≈%f\n',n,x);

%则输出近似根(7),可简略为:

fprintf('\n\n近似解x=%f',x);

return;%并结束程序(7)

8%相当于endif

9%计数器加1

10%新近似值x作为下一次迭代的初值

11

fprintf('\n迭代%d次还不满足误差要求.\n\n',N);%输出错误信息(12)

《数值计算方法》实验2报告

班级:

20xx级XXXXx班

学号:

20xx2409xxxx

姓名:

XXX

成绩:

1.实验名称

实验2非线性方程的迭代解法(之Newton下山法)

2.实验题目

用Newton下山法求方程

在区间[1,2]内的一个实根,取绝对误差限为

3.实验目的

熟悉非线性方程的Newton下山法.

4.基础理论

Newton下山法:

Newton下山法公式为

,使

,其中

5.实验环境

操作系统:

Windowsxp;程序设计语言:

Matlab

6.实验过程

定义函数f(x)和df(x),其中df(x)是f(x)的导函数.

每步迭代时先取下山因子为1,尝试迭代,判断尝试结果是否满足下山因

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1