数值分析实验报告二

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

贵州师范大学数学与计算机科学学院学生实验报告

课程名称: 数值分析 班级 数学与应用数学2班 实验日期:2013年9月19日 学 号: 姓名 指导教师:

实验成绩:

一、实验名称

实验一:递推法的稳定性,秦九韶算法

二、实验目的及要求

1. 熟悉数值稳定的概念, 通过上机计算,了解舍入误差所引起的数值不稳定性.

2. 培养Matlab 编程与上机调试能力.

三、实验环境

每人一台计算机,要求安装Windows XP 操作系统,Microsoft office2003、MATLAB6.5(或7.0).

四、实验内容

1.教材例1.13中,取15位数字计算,并分析、比较计算结果.

2.设100999832()101100994321

f x x x x x x x =+++++++,用秦九韶算法编程计算在()f x 1,2,3,4

x =上的值.

五、算法描述及实验步骤

针对内容一:

(1(2)根据递推公式5

511n n I n I -=-依次求出n I 的值 (n=13,12,11,..) 针对内容二:

(1)首先在Matlab 里编制函数式M 文件,函数名为Qinjiu(a,n,x).

function y=Qinjiu(a,n,x)

v=a(1);

for k=1:n

v=v.*x+a(k+1);

end

y=v;

(2)然后调用函数Qinjiu 分别计算出x=1,2,3,4上的值.

六、调试过程及实验结果

针对问题一:

(1)在命令窗口运行程序:

>> int(x.^14/(x+5),0,1)

ans =

6103515625*log(2)+6103515625*log(3)-6103515625*log(5)-80201899665047/72072 >> format long

ans =

1.122951507568359e-002

所以 14I = 0.011229515075684 (取15位小数后的结果)

(2)运用for 循环算出n=13,12,...0的值

>> int n;

>> s= 1.122951507568359e-002

>> int n;

for(n=14;;0)

{

s=1./(5*n)-s./5

printf(‘%d ’,s)

n--;

}

(3)计算的结果为: (均保留15位小数)

=13I 0.012038981127058 =12I 0.012976653130500

=11I 0.014071336040567 =10I 0.015367550973705

=9I 0.016926489805259 =8I 0.018836924261170

=7I 0.021232615147766 =6I 0.024324905541875

=5I 0.028468352224958 =4I 0.034306329555008

=3I 0.043138734088998 =2I 0.058038919848867

=1I 0.088392216030226 =0I 0.018232155679396

针对问题二:

(1)在命令窗口运行程序:

a=101:-1:1;

(2)调用函数Qinjiu的计算结果为:

>> Qinjiu(a,100,1)

ans =

5151

>> Qinjiu(a,100,2)

ans =

2.5353e+032

>> Qinjiu(a,100,3)

ans =

7.7693e+049

>> Qinjiu(a,100,4)

ans =

2.1569e+062

所以x=1,2,3,4时的值分别为:5151 2.5353e+032 7.7693e+049 2.1569e+062

七、总结

在整个实践过程中学会了用秦九韶算法编程计算多项式的值并能够采用稳定的数值计算方法比较精确的计算定积分。学会自己发现错误解释错误纠正错误。同时也培养了自己的编程能力以及上机调试能力。

八、附录(源程序清单)

附录1:M文件

function y=Qinjiu(a,n,x)

v=a(1);

for k=1:n

v=v.*x+a(k+1);

end

y=v;

>> int n;

附录2:递推公式求值

>> s= 1.122951507568359e-002

>> int n;

for(n=14;;0)

{

s=1./(5*n)-s./5

printf(‘%d’,s)

n--;

}

相关文档
最新文档