图 3
三、问题分析
①考虑由直线段(2个点)产生第一个图形(5个点)的过程,设P1和P5分别为原始直线段的两个端点。现在需要在直线段的中间依次插入三个点P2,P3,P4产生第一次迭代的图形(图1)。显然,P2位于P1点右端直线段的三分之一处,P4点绕P2旋转60度(逆时针方向)而得到的,故可以处理为向量P2P4经正交变换而得到向量P2P3,形成算法如下:
(1)P2?P1?(P5?P1)/3; (2)P4?P1?2(P5?P1)/3;
T(3)P; ?P?(P?P)?A3242在算法的第三步中,A为正交矩阵。
??cos?3A???sin??3?3??; ??cos3???sin??这一算法将根据初始数据(P1和P5点的坐标),产生图1中5个结点的坐标。这5个结点的坐标数组,组成一个5×2矩阵。这一矩阵的第一行为为P1的坐标,第二行为P1的坐标,第二行为P2的坐标……第五行为P5的坐标。矩阵的第一列元素分别为5个结点的x坐标 ,第二列元素分别为5个结点的y坐标。
②在Koch分形曲线的形成过程中结点数目的变化规律。设第k次迭代产生结点数为n k,第k+1次迭代产生结点数为n k+1,n k和n k+1之间的递推关系式如下
③由第k次迭代的n k个结点的结点坐标数组,产生第k+1次迭代的n k+1个结点的结点坐标数组的算法可参考上面两点到五点的算法进行设计。
四、源程序
p=[0 0;10 0]; %给出初始数据两个点的坐标 a=[cos(pi/3) -sin(pi/3);sin(pi/3) cos(pi/3)]; %设置用于正交变化的正交矩阵 for k=1:5 %开始执行第一到第五次迭代 n=max(size(p));d=diff(p)/3; %统计前一轮迭代的结点数及形成结点向量 q=p(1:n-1,:);p(5:4:4*n-3,:)=p(2:n,:); %保护前一轮的结点坐标数组 p(2:4:4*n-6,:)=q+d; %插入第一组新结点 p(3:4:4*n-5,:)=p(2:4:4*n-6,:)+d*a'; %用正交变换计算第二组新结点 p(4:4:4*n-4,:)=q+2*d; %插入第三组新结点 end
plot(p(:,1),p(:,2)) %根据结点坐标绘图 五、实验结果
实验二
2.1 用高斯消元法的消元过程作矩阵分解。 一、問題描述
2.1 用高斯消元法的消元过程作矩阵分解。设
?2023??
A??181????2?315??消元过程可将矩阵A化为上三角矩阵U,试求出消元过程所用的乘数m21、m31、m31并以
如下格式构造下三角矩阵L和上三角矩阵U
?1??202?,U??(1)L??m1a2122??????m31m321???验证:矩阵A可以分解为L和U的乘积,即A=LU。
二、源程序及運行結果
%将矩阵A分解为L和U的乘积,即A=LU。 a=input('a=');
u=zeros(3,3);l=eye(3,3); for i=1:3
u(1,i)=a(1,i); end
for j=2:3
l(j,1)=a(j,1)/u(1,1); end
for k=2:3
u(k,k:3)=a(k,k:3)-l(k,1:k-1)*u(1:k-1,k:3);
l(k+1:3,k)=(a(k+1:3,k)-l(k+1:3,1:k-1)*u(1:k-1,k))/u(k,k); end disp(l); disp(u); 实验结果
a=[20,2,3;1,8,1;2,-3,15]
1.0000 0 0 0.0500 1.0000 0 0.1000 -0.4051 1.0000
20.0000 2.0000 3.0000 0 7.9000 0.8500 0 0 15.044311
2.3验证希尔伯特矩阵的病态性 一、问题描述
2.3 验证希尔伯特矩阵的病态性:对于三阶矩阵
3?(1)?a23? (2)?a33?1/21/3??1?H??1/21/31/4????1/31/41/5??
Tb?[11/613/1247/60]取右端向量,验证:
X?[x1x2(1)向量
x3]T?[111]T是方程组HX?b的准确解;
T?b?[1.831.080.783](2)取右端向量b的三位有效数字得,求方程组的准确解X,
T[111]并与X的数据作比较 。说明矩阵的病态性。
二、源程序及运行结果
(1) H=[1 1/2 1/3;1/2 1/3 1/4;1/3 1/4 1/5]
b=[11/6 13/12 47/60]' H\\b ans =
1.0000 1.0000 1.0000
X?[x1所以
x2x3]T?[111]T是方程组HX?b的准确解
(2) b=[1.83 1.08 0.783]' b =
1.8300 1.0800 0.7830 H\\b ans =
1.0800 0.5400 1.4400
所算得的解误差较大,所以希尔伯特矩阵呈现病态性
实验三
3.1 用泰勒级数的有限项逼近正弦函数 一、问题描述
3.1 用泰勒级数的有限项逼近正弦函数
y0(x)?sinx,x?[0,?]y1(x)?x,x?[0,?/2]y2(x)?x?x/6,x?[0,?/2]y3(x)?x?x3/6?x5/120,x?[0,?/2]用计算机绘出上面四个函数的图形。 二、源程序
图一
3
x=0:0.1:pi/2; y1=x;
y2=x-x.^3/6;
y3=x-x.^3/6+x.^5/120; plot(x,y1,x,y2,x,y3)
legend('y=x','y=x-x^3/6','y=x-x^3/6+x^5/120')
图二
x=0:0.1:pi; y4=sin(x); plot(x,y4);
legend('y=sin(x)')
三、实验结果 图一
图二