一、 [设计题一] .............................................................................................................................. 2
1) 设计思路、算法步骤 ......................................................................................................... 2 2) 程序清单(函数文件、命令文件) ................................................................................. 2 3) 程序运行操作过程与输出结果 ......................................................................................... 4 4) 对计算过程与结果的分析,设计的优缺点 . ..................................................................... 6 二、 [设计题二] .............................................................................................................................. 7
1) 设计思路、算法步骤 ......................................................................................................... 7 2) 程序清单(函数文件、命令文件) ................................................................................. 7 3) 程序运行操作过程与输出结果 ......................................................................................... 8 4) 对计算过程与结果的分析,设计的优缺点 . ..................................................................... 9 三、 [设计题三] ............................................................................................................................ 10
1) 设计思路、算法步骤 ....................................................................................................... 10 2) 程序清单(函数文件、命令文件) ............................................................................... 10 3) 程序运行操作过程与输出结果 ....................................................................................... 12 4) 对计算过程与结果的分析,设计的优缺点 . ................................................................... 14 四、 [设计题四] ............................................................................................................................ 15
1) 设计思路、算法步骤 ....................................................................................................... 15 2) 程序清单(函数文件、命令文件) ............................................................................... 15 3) 程序运行操作过程与输出结果 ....................................................................................... 19 4) 对计算过程与结果的分析,设计的优缺点 . ................................................................... 21 五、 [设计题五] ............................................................................................................................ 22
1) 设计思路、算法步骤 ....................................................................................................... 22 2) 程序清单(函数文件、命令文件) ............................................................................... 22 3) 程序运行操作过程与输出结果 ....................................................................................... 25 4) 对计算过程与结果的分析,设计的优缺点 . ................................................................... 31 六、 [设计题六] ............................................................................................................................ 32
1) 设计思路、算法步骤 ....................................................................................................... 33 2) 程序清单(函数文件、命令文件) ............................................................................... 33 3) 程序运行操作过程与输出结果 ....................................................................................... 35 4) 对计算过程与结果的分析,设计的优缺点 . ................................................................... 40 七、 心得体会 . .............................................................................................................................. 41 八、 课程设计自我评价及其支持依据 . ...................................................................................... 42
一、[设计题一]
编写解线性代数方程组的列主元高斯消去法的函数,并调用该函数计算某个9阶以上的非奇异阵A 的逆矩阵。通过计算AA -1检查答案,并与使用inv (A )所得结果和运行时间进行比较。
答:
1) 设计思路、算法步骤
① AX=b求解的列主元高斯消去法的函数。(pivotgauss.m ) ② 令b 依次为(1,0,0,..... ),(0,1,0,..... ),..... ,求出X1,X2,...Xn ,则 A的逆A -1为[X1,X2,... ,Xn]。(inv1.m )
③ 构造求inv 函数及inv1函数所得结果(逆)和运行时间的函数(invtimecount.m 和inv1timecount.m ),其中求运行时间用到tic...toc 结构。
④ 在主函数(problem1.m )中要求输入一个9阶以上非奇异方阵A ,用input 输入A 。然后调用invtimecount.m 和inv1timecount.m ,并令E=A*inv1(A )验证inv1函数。
2) 程序清单(函数文件、命令文件)
① 列主元高斯消去法的函数。(pivotgauss.m )
② 自己构造求A -1
的函数。(inv1.m )
③ 求inv 函数所得结果(逆)和运行时间的函数(invtimecount.m )
④ 求inv1函数所得结果(逆)和运行时间的函数(inv1timecount.m )
⑤ 主函数(problem1.m )
3) 程序运行操作过程与输出结果
① 输出提示语‘输入一个9阶以上非奇异方阵A:’,手动输入矩阵A (九阶以上非奇异方阵)(选择了以下的十阶矩阵)
② 结果1:inv1函数所得结果和运行时间
③ 结果2:inv 函数所得结果和运行时间
④ 结果3:通过计算AA-1得到E 检查答案
4) 对计算过程与结果的分析,设计的优缺点
① inv 函数和inv1函数时间比较
从多次运行中,我发现inv 函数和inv1函数运行时间并没有固定那个比那个更快。但是使用tic...toc 结构时每次它们的运行时间都小于1秒,这说明inv1函数也是一个比较合理的求解矩阵逆的函数。 ② 优点特色
第一,我的这个程序比较自主,可以在提示语之后自己选择一个矩阵输入,这样就可以尝试多种情况,比较不同。第二,invtimecount 等几个函数都没有返回值,这样可以避免返回值和计算之间的冲突,直接在运行过程中表达出求解过程。第三,程序输入输出都有相对详细的提示语,可以比较清楚地看清要输入什么和输出的是什么。 ③ 缺点不足
第一,输入矩阵A 时强制要求是非奇异矩阵,没有对奇异矩阵的情况作出详细的应对。第二,验证计算AA-1时求出的单位矩阵并不是严格的单位矩阵,某些元素只是很小的数(约为0.0000),而不是0。第三,没有引入inv 和inv1之间的误差分析方法等检验方法。
二、[设计题二]
2
(k =0, 1, 2,......) , 它显然有不动点x *=0。 试对于迭代法x k +1=0. 99x k -x k
不用判定收敛阶的定理,设计1至2个数值实验(其中必须有一个不是直接用收敛阶的定义)得到收敛阶数的大概数值。
答:
1) 设计思路、算法步骤
① 直接用定义求收敛阶(convergence1.m)
② 间接用定义求收敛阶(convergence.m) ,通过分析题中迭代法,可以知道只需判断e[k+1]的值即可,因为e[k]在非收敛阶情况下,去极限值恒为0。
2) 程序清单(函数文件、命令文件)
① 直接用定义求收敛阶的函数(convergence1.m)
② 间接用定义求收敛阶的函数(convergence.m)
3) 程序运行操作过程与输出结果
① 直接用定义求收敛阶的函数输出结果。
② 间接用定义求收敛阶的函数输出结果。
③ 全部图像
4) 对计算过程与结果的分析,设计的优缺点
① 从输出结果可以知道,这个迭代法在不动点x=0处是1阶收敛(线性收敛)的。 ② 优点特色
第一,有两个方案,一个直接用定义,一个实际联系定义,满足题目要求。第二,程序输出都有相对详细的提示语,可以比较清楚地看到输出的是几阶收敛,是线性收敛还是超线性收敛。 ③ 缺点不足 第一,程序比较依赖题目中所给函数,几乎没有拓展性。第二,方案想法比较极限,只是围绕定义来设计。
三、 [设计题三]
湖水在夏天会出现分层现象,接近湖面温度较高,越往下温度变低。这种上热下冷的现象影响了水的对流和混合过程,使得下层水域缺氧,导致水生鱼类的死亡。如果把水温T 看成深度x 的函数T(x),有某个湖的观测数据如下:
环境工程师希望:
1) 用三次样条插值求出T(x)。
d 2T dT
2) 求在什么深度处的绝对值达到最大( 即2 0 )。
dx dx
答:
1) 设计思路、算法步骤
① 定义数据,放入离散点x 和T 的数据,计算出系数矩阵A 中元素和目的向量d 中元素。
② 追赶法求三弯矩方程组AM=d的解向量。
③ 通过三次样条插值函数及其一阶导数的公式求出各区间三次样条插值函数T(x)及其一阶导数和二阶导数,分别输出,并求出一阶导数极值点。
④ 画出三次样条插值函数T(x)及其一阶导数的图像。
⑤ 输出在什么深度处一阶导数Td(x)绝对值达到最大,即求其极值点横坐标。
2) 程序清单(函数文件、命令文件)
① 主函数(problem3.m )
3) 程序运行操作过程与输出结果
① 输出三次样条插值法求出的T(x)
② T(x)图像及T(x)一阶导数Td(x)图像
③ 输出在什么深度处
dT
的绝对值达到最大
dx
④ 全部图像
4) 对计算过程与结果的分析,设计的优缺点
① 优点特色
第一,程序分为几个板块,各个板块注释清晰,容易理解。第二,程序输出都有相对详细的提示语,可以比较清楚地看到T(x)在各个区间处的分段函数。第三,三次样条插值函数及其一阶导数的图像同时出现,易于比较。 ② 缺点不足
第一,程序不够精炼,比较冗长。第二,输出的分段函数没能化简,比较复杂,不易分析。
四、[设计题四]
...400,500,800处的函数值y 及一阶、二阶导数值y ’,y ”。绘出模拟曲线的图形。
答:
1) 设计思路、算法步骤
① 定义数据,放入离散点x 和y 的数据,计算出系数矩阵A 中元素和目的向量d 中元素。
② 追赶法求三弯矩方程组AM=d的解向量。
③ 通过三次样条插值函数及其一阶导数的公式求出各区间三次样条插值函数y(x)及其一阶导数和二阶导数。
④ 画出三次样条插值函数y(x)及其一阶导数yd(x)和一阶导数ydd(x)的图像。 ⑤ 输出在点x=100,250,400,500,800处的函数值y 及一阶和二阶导数值yd,ydd 。
2) 程序清单(函数文件、命令文件)
① 主函数(problem4.m )
3) 程序运行操作过程与输出结果
① 在点x =100,250,400,500,800处的函数值y 及一阶、二阶导数值yd,ydd 。
② y(x)图像及y(x)一阶导数和二阶导数yd(x)及ydd(x)图像。
③ 全部图像
4) 对计算过程与结果的分析,设计的优缺点
① 优点特色
第一,程序分为几个板块,各个板块注释清晰,容易理解。第二,程序输出都有相对详细的提示语,输出在点x =100,250,400,500,800处的函数值y 及一阶、二阶导数值yd ,ydd 。第三,三次样条插值函数及其一阶导数,二阶导数的图像同时出现,易于比较。 ② 缺点不足
第一,程序不够精炼,比较冗长。
五、 [设计题五]
给定初值问题
其精确解为
,分别按下列方案求它在节点
处的数值解及误差。比较各方法的优缺点,并将计
算结果与精确解做比较(列表、画图)。 (方案I )欧拉法,步长h = 0.025, h = 0.1; (方案II )改进的欧拉法,步长h = 0.05, h = 0.1; (方案III )四阶经典龙格—库塔法,步长h = 0.1。
答:
1) 设计思路、算法步骤
① 分别以方案1,方案2,方案3三种方法解初值问题,可以自己确定步长。画图列表来比较精确解与方案解,精确解以红*标出,方案解以绿线标出。
② 方案1:构造有精确解和Euler 方法解初值的函数(firstsolve.m ),写出方案的优缺点,并与精确解作比较。
③ 方案2:构造有精确解和改进Euler 方法解初值的函数(secondsolve.m ),写出方案的优缺点,并与精确解作比较。
④ 方案3:构造有精确解和4阶R-K 方法解初值的函数(RKsolve.m ),写出方案的优缺点,并与精确解作比较。
2) 程序清单(函数文件、命令文件)
① 方案1:构造有精确解和Euler 方法解初值的函数。(firstsolve.m )
② 方案2:构造有精确解和改进Euler 方法解初值的函数。(secondsolve.m )
③ 方案3:构造有精确解和4阶R-K 方法解初值的函数。(RKsolve.m )
3) 程序运行操作过程与输出结果 方案1(Euler 法):
① 输出提示语‘请输入步长:’,手动输入步长(h=0.025和h=0.1)
② 结果1:步长
h=0.025
③ 结果2:步长
h=0.1
方案2(改进Euler 法):
① 输出提示语‘请输入步长:’,手动输入步长(h=0.05和h=0.1)
② 结果1:步长
h=0.05
③ 结果2:步长
h=0.1
方案2(4阶R-K 法):
① 输出提示语‘请输入步长:’,手动输入步长(h=0.1)
② 结果:步长
h=0.1
③ 计算结果与精确解做比较(列表)
4) 对计算过程与结果的分析,设计的优缺点
① 方案1:优点:欧拉法思想容易理解(单步显式),步长越小越精确。 缺点:欧拉法精确度不够,只有一阶求导精度,当步长比较大时,误差大。 ② 方案2:优点:改进欧拉法是在欧拉法基础上的另一种迭代法(单步隐式),步长 越小越精确,而且比欧拉法精度提高了一阶,更为接近精确值。
缺点:改进欧拉法比欧拉法复杂,且只有两阶求导精度,当步长比较大时, 误差也不小。
③ 方案3:优点:经典4阶R-K 法有精度高,收敛,稳定,不需要计算高阶导数等优 点
缺点:经典4阶R-K 法每计算一步需要计算四次的值,这给实际计算带 来一定的复杂性。 ③ 优点特色
第一,程序间有精确值与方案值的比较,方案的准确性一目了然。第二,程序的推进合乎逻辑,比较容易理解。第三,程序输入输出都有相对详细的提示语,可以比较清楚地看清要输入什么和输出的是什么。 ④ 缺点不足
第一,程序比较啰嗦,不够精简。第二,图像中y 轴值相差不大,很难看出差异。第三,误差分析不科学,仅靠图表。
六、[设计题六
]
答:
1) 设计思路、算法步骤
① Euler 方法解初值的函数(eulersolve.m ),画图,解释图中曲线代表的意思。 ② 改进Euler 方法解初值的函数(neweulersolve.m ),画图,解释图中曲线代表的意思。
③ 4阶R-K 方法解初值的函数(RK4solve.m ),画图,解释图中曲线代表的意思。 ④ 问题二采用4阶R-K 方法(RKsolve4.m ),确定好x1和x2的范围,画图,输出离散数据中最接近极大值的点,分析图中曲线极大值点、零点和趋势。
2) 程序清单(函数文件、命令文件)
① 问题一用Euler 方法解初值的函数(eulersolve.m )
② 问题一用改进Euler 方法解初值的函数(neweulersolve.m )
③ 问题一用4阶R-K 方法解初值的函数(RK4solve.m )
④ 问题二用4阶R-K 方法解初值的函数(RKsolve4.m )
3) 程序运行操作过程与输出结果
① 问题一用Euler 方法解初值,步长分别输入(h=0.1和h=0.01)
② 步长h=0.1时,输出图像。
误差较大,但基本的趋势已经表现出来。 ③ 步长h=0.01时,输出图像。
步长小,误差减小。
④ 问题一用改进Euler 方法解初值,步长分别输入(h=0.1和h=0.01)
⑤ 步长h=0.1时,输出图像。
⑥ 步长h=0.01时,输出图像。
⑦ 问题一用4阶R-K 方法解初值,步长分别输入(h=0.1和h=0.01)
⑧ 步长h=0.1时,输出图像。
⑨ 步长h=0.01时,输出图像。
⑩ 问题二用4阶R-K 方法解初值,步长输入(h=0.1)
11 步长h=0.1时,输出最接近极大值点的离散数据点,输出图像。
12 全部图像。
4) 对计算过程与结果的分析,设计的优缺点
① 问题一:分别用欧拉法、改进的欧拉法和四阶经典龙格—库塔法,取步长0.1和0.01求解初值问题,并画出图像。由图像我们可以看出:第一,当步长较大时,欧拉法误差大,所以解决问题尽量不使用欧拉法或者取较小步长。第二,由曲线可以看出,蓝鲸和南极磷虾数量的变化都是周期性变化的,其中当南极磷虾数量增加时,蓝鲸数量随之增加;当蓝鲸数量增加到一定程度后在往上增加,南极磷虾数量便会下降;下降到一定程度又会引起蓝鲸数量的减少。这说明了自然界捕捉关系之间的规律。第三,南极磷虾的最大数量大于蓝鲸的最大数量,这符合食物链的规律,越顶层的生物数量越少。
② 问题二:用四阶经典龙格—库塔法,取步长0.1求解初值问题,求出极大值点和画出图像。由极大值点看出当蓝鲸数量达到3.7,4.2,4.8和5.1附近时南极磷虾数量能达到极大值,其中5.1附近取得最大值,这说明一定的蓝鲸数量使得南极磷虾优胜劣汰,数量达到最高点。但是,由图像,蓝鲸数量进一步增加会使得南极磷虾数量持续下降,当在5.2左右时,南极磷虾数量为0了,这说明太多的蓝鲸会产生南极磷虾种群灭绝的威胁。所以我们要
保持自然界各种生物数量之间的平衡。
③ 优点特色
第一,程序简洁明了。第二,问题二解出极大值点,帮助理解图像。第三,程序输入输出都有相对详细的提示语,可以比较清楚地看清要输入什么和输出的是什么。
④ 缺点不足
第一,问题一图像中没能表现出特殊点及其作用,只有孤零零的曲线比较。第二,问题二解出的极大值点只是近似点,不够准确。。第三,问题二没能解出零点,零点仅靠图像估计。
七、心得体会
(自己在课程设计中的心得体会(须含程序调试过程中遇到的问题与困难及解决办法)以及对本课程的认识)
之前对Matlab 软件接触不多,对其程序的编写不是很熟练。程序本身不难,大部分是书本里的原理。在编写的过程中碰到的最大困难就是对Matlab 中的内部函数及一些运算符不熟悉,需要慢慢学习体会。
在程序调试过程中总是不断的遇到一些问题,一部分困难是题目没有思路或不懂得方法的推进逻辑(如三弯矩方法求三次样条插值函数,4阶R-K 法等),这时候我就会参考《计算方法》中相对应的章节,学习方法的思路流程。另一种问题时不知道用Matlab 如何表达
一些思路(如求运行时间(tic...toc ),表现带参数函数表达式等),这时候我会查阅参考资料或通过百度找到函数介绍,参考学习并应用到设计中,还有help 函数也是很有用。
我认为经过课程设计之后对我们的学习生活都会有很大的启示,首先我对数值分析中很多的问题有了更深刻的理解。除此之外,我也懂得了如何更有效的学习以及在实践中学习对提高自己的帮助。
八、课程设计自我评价及其支持依据
(优、良、中、及格、差之一)
我给自己一个优。
虽然在程序编写过程中遇到很多困难,比如第二题我就不是很理解,第三题的插值函数也是冗长复杂,但是我都用自己的理解基本上解决了问题。而且我的程序大多都是自己的思路,虽然不够精炼简洁,但是符合一般的逻辑推进。还有我的程序输入与输出都有详细的提示,很容易看懂调试过程。