课程设计报告
题目:数值分析课程设计报告
学 院 理学院
班 级 数学与应用数学2010级
学生姓名 戴铭
学 号 201030470270
提交日期 20## 年 8 月 20 日
数值分析课程设计报告
[设计题一]
一.要求
编写解线性代数方程组的列主元高斯消去法的函数,并调用该函数计算某个9阶以上的非奇异阵A的逆矩阵。通过计算AA-1检查答案,并与使用inv(A)所得结果和运行时间进行比较。
二.设计思路
①先确定求逆矩阵A为方阵,构造n*2n矩阵C,使得C=[A+E];
②令i=1,2,3……n,找出第i列中从i到n的绝对值最大元素C(k,i),如果k~=I,则两行调换位置,并且把换位信息传给记录矩阵flag,同时对第i行进行化一处理,对第i+1行到n行通过行列变换使得C[:,i]=0,最后得到C为前n*n是上三角的单位阵;
③通过行列变换把矩阵C的前n*n部分化成单位阵;
④把C的后n*n部分赋给B,则B就是所求的逆矩阵。
三.程序清单
function B=inv_dm(A)
%用途:列主元高斯消去法求逆矩阵
%A----------原矩阵
%B----------逆矩阵
[n,n]=size(A);
B=zeros(n,n);
C=zeros(n,2*n);
for i=1:n
for j=1:n
C(i,j)=A(i,j);
end
for k=n+1:2*n
if k~=n+i
C(i,k)=0;
else
C(i,k)=1;
end
end
end
%构造C=[A+E]
flag=1:n;
%记录行顺序向量
for i=1:n-1
t=find(abs(C(i:n,i))==max(abs(C(i:n,i))));
%寻找最大元素
t=t(1)+i-1;
flag(i)=t;
if t~=i
p=C(i,:);C(i,:)=C(t,:);C(t,:)=p;
%换位
end
if C(i,i)==0
error('矩阵不可逆');
end
C(i,:)=C(i,:)/C(i,i);
for j=i+1:n
C(j,:)=C(j,:)-C(i,:)*C(j,i);
end
end
C(n,:)=C(n,:)/C(n,n);
%因为循环结构问题,所以C[n,:]并没有化一,所以在最后才把最后一行化一
for i=n:-1:2
for j=1:i-1
C(j,:)=C(j,:)-C(i,:)*C(j,i);
end
end
%通过行变换,使得C的前n列为单位阵形式
for i=n:-1:1
t=flag(i);
if t~=i
p=C(:,t);C(:,t)=C(:,i);C(:,i)=p;
end
end
%通过行变化矩阵还原行的顺序
for i=1:n
for j=1:n
B(i,j)=C(i,n+j);
end
end
%将C的后n列赋给B矩阵
四.程序运行操作过程与输出结果
操作时间
①给出所要求逆的矩阵A:
②执行inv_dm(A)
③执行inv(A)
④检验正确性
显然从数量级上我们可以容易判断这是一个单位阵,负号的出现是由于计算机默认误差造成细小误差。
[设计题二]
一.要求
对于迭代法, 它显然有不动点。 试不用判定收敛阶的定理,设计1至2个数值实验(其中必须有一个不是直接用收敛阶的定义)得到收敛阶数的大概数值。
二.设计思路
① 求出不动点,利用fixed.m函数:
确定包含不动点的区间[a,b],此处令a=-0.5,b=0.5,接着从b开始迭代,利用迭代公式,以x0=0.5开始迭代,终止条件为abs(x-x0)>=1e-6
或者迭代次数超过了10000次,最终返回不动点
② 计算收敛阶m,利用jie.m函数:
1.由①知道当,所以根据收敛阶公式,其中C为非零常数,转化为
2.从1开始找出满足的p,如果p不满足,令p=p+1,直至找到满足条件的p.
3.返回收敛阶n=p.
三.程序清单
1.求不动点函数fixed.m
function x=fixed(x0,e)
%用途---求不动点
%x0-------初值,abs(x0)<0.5
%e-----迭代精度
x=0.99*x0-x0^2;
%迭代公式
n=1;
while (abs(x-x0)>=e)&&(n<10000)
x0=x;
x=0.99*x0-x0^2;
n=n+1;
end
%循环体
x=x0;
2.求收敛阶函数jie.m
function n=jie(x0)
%用途---求阶函数
k=0;
syms x;
x1=0.99*x-x^2;
h=(abs(x0-x1))/(abs(x0-x))^k;
while limit(h,x,x0)==0
k=k+1;
h=(abs(x0-x1))/(abs(x0-x))^k;
end
n=k;
四.程序运行操作过程与输出结果
操作时间
1.求不动点调用fixed.m
由执行不动点结果可以看出确定了迭代精度1e-6后,根据迭代精度接近0,所以.
2.求收敛阶调用jie.m
所以收敛阶数为1,即线性收敛。
[设计题四]
一.要求
某飞机头部的光滑外形曲线的型值点坐标由下表给出:
试建立其合适的模拟曲线(未必是用拟合方法),并求在点x=100,250,400,500,800处的函数值y及一阶、二阶导数值y’,y”。绘出模拟曲线的图形。
二.设计思路
运用cftool工具箱,根据散点图,认为接近对数函数。故设定拟合函数为
f(x) = a*log(x+b)+c
三.程序清单
都是在cftool工具箱上操作,无函数调用。
四.程序运行操作过程与输出结果
操作时间
1.输入数据
2.打开cftool工具箱
第二篇:数值分析课程设计实验报告基本格式
水手、猴子和椰子问题
实验题目:有五个水手带了一只猴子来到南太平洋的一个荒岛上,发现那里有一大堆椰子。由于旅途的颠簸,大家都很疲倦,很快就入睡了。第一个水手醒来后,把椰子平分成五堆,并将多余的一个椰子给了猴子,他私藏了一堆后便又去睡了。第二、第三、第四、第五个水手也陆续起来,和第个水手一样,把椰子平分成五堆后,将恰好多的一个也给猴子,并私藏了一堆,再去入睡。天亮以后,大家把余下的椰子重新等分成五堆,每人分一堆,正好余一个再给猴子。试问原先共有几个椰子?
试分析椰子数目变化的规律,利用逆向递推的方法求解这一问题。
(必要时可简写为实验一、1.2,教材P13)
一、 实验目的
掌握利用逆向递推求解问题的方法,熟悉matlab的循环操作。
二、 实验原理简述
求解这一问题可以用递推算法。首先分析椰子数目的变化规律,设最初的椰子数为p 0,即第一个水手所处理之前的椰子数,用p 1、p 2、p 3、p4、p 5 分别表示五个水手对椰子动了手脚以后剩余的椰子数目,则根据问题有
再用x表示最后每个水手平分得到的椰子数,于是有
所以
p5 = 5x +1
利用逆向递推的方法,有
有了逆向递推关系式,求解这一问题似乎很简单,但由于椰子数为一正整数,用任意的x作为初值递推出的p0数据不一定是合适的。
这里用 for 循环语句结合 break 语句来寻找合适的 x 和 p0 ,对任意的 x 递推计算出 p0 ,当计算结果为正整数时,结果正确,否则选取另外的 x 再次重新递推计算,直到计算出的结果 p0 为正整数为止。
三、 实验结果
运行这段程序后,屏幕出现要求从键盘输入 x 数据的信息input n,输入1200后,MATLAB计算出合适的 x 和 p0 的值为:
1023 15621
四、 实验分析
由于:
所以
要使得最初的椰子数p0为整数,必须取 (x +1) 为 4 5( =1024)的倍数,一种简单的处理可取 x = 1023。
五、 实验程序(含必要注释)
程序如下
%%
%% FIX Round towards zero.
%% FIX(X) rounds the elements of X to the nearest integers
%% towards zero.
n=input('input n:'); %%输入必要的n值
for x=1:n %%外循环
p=5*x+1;
for k=1:5 %%内循环
p=5*p/4+1;
end
if p== fix(p) %%判断p是否为整数
break
end
end
disp([x,p]) %%显示结果