资源描述
例1 下图描述了六个城市之间的航空航线图,其中1、2、……、6表示六个城市,带箭头线段表示两个城市之间的航线。用MATLAB软件完成以下操作:
(1)构造该图的邻接矩阵A;
(2)若某人连续乘坐五次航班,那么他从哪一个城市出发到达哪一个城市的方法最多?
(3)若某人可以乘坐一次、二次、三次或四次航班,那么他从哪一个城市出发总是不能达到哪一个城市?
航空航线图(六城市)
解:(1)构造邻接矩阵;
(2)计算矩阵可达矩阵,找出该矩阵的最大元素,并确定它所在的位置;
(3)计算可达矩阵,找出该矩阵中零元素的位置。
在MATLAB软件的M编辑器中编写m文件:
% 图与矩阵
clear
A=[0,1,0,0,0,1;0,0,1,1,0,0;0,0,0,1,1,0;0,1,0,0,0,0;1,0,1,0,0,0;0,1,0,0,1,0]; % 构造邻接矩阵
B=A^5;
C=A+A^2+A^3+A^4;
disp('邻接矩阵A为:');
disp(A);
disp('矩阵A^5为:');
disp(B);
m=max(max(B)); % 计算矩阵B的最大值
[m_i,m_j]=find(B==m); % 寻找矩阵B中元素等于m的位置
fprintf('矩阵A^5最大值%d的位置在:\n',m);
disp([m_i,m_j]);
disp('矩阵A+A^2+A^3+A^4为:');
disp(C);
[z_i,z_j]=find(C==0); % 寻找矩阵C中零元素的位置
disp('矩阵A+A^2+A^3+A^4零元素的位置在:');
disp([z_i,z_j]);
在MATLAB命令窗口中输入m文件名称,
计算结果为:
邻接矩阵A为:
0 1 0 0 0 1
0 0 1 1 0 0
0 0 0 1 1 0
0 1 0 0 0 0
1 0 1 0 0 0
0 1 0 0 1 0
矩阵A^5为:
2 5 5 5 3 1
2 4 4 3 2 0
2 3 5 5 2 1
0 2 1 3 2 1
2 6 4 5 4 1
1 4 4 7 4 2
矩阵A^5最大值7的位置在:
6 4
矩阵A+A^2+A^3+A^4为:
2 6 5 6 4 2
1 4 4 6 3 1
2 5 4 5 4 1
1 3 3 3 1 0
3 5 6 6 4 2
3 6 6 5 4 1
矩阵A+A^2+A^3+A^4零元素的位置在:
4 6
从计算结果中可以看出,矩阵A^5最大值出现在矩阵的第六行第四列,说明:这个人如果从城市6出发连续乘坐五次航班后到达城市4,他可以选择的乘机路线最多,共有7种不同的方法。
矩阵A+A^2+A^3+A^4的零元素出现在第四行第六列,说明:这个人如果从城市4出发他乘坐一次、二次、三次或四次航班,都无法到达城市6。
实验习题
5个小朋友玩传球游戏。游戏规则:任意两个人之间都可以相互传球,但自己不能给自己传。请用MATLAB完成以下操作:
(1)把五个小朋友看成五个节点,构造这五个节点的邻接矩阵A;
(2)假设从第一个小朋友开始传球,经过四次传球后,球又传回到第一个小朋友手里。问共有多少种不同的传法。
(3)假设从第一个小朋友开始传球,经过一次,或者二次,或者三次传球,球传给了第二个小朋友。问共有多少种传法。
例2 下表给出了平面坐标系中五个点的坐标。
五点数据表
x
0
1
2
3
4
y
-27
0
21
0
-75
(1)请过这五个点作一个四次多项式函数,并求当时的函数值。用MATLAB绘制多项式函数曲线、已知点及插值点(5,)。
(2)请根据这五个点,拟合一个二次多项式函数,并用MATLAB绘制多项式函数曲线及已知的五个点。
解:(1)根据已知条件,把五个点的坐标值分别代入四次多项式函数,可以得到如下线性方程组:
对应矩阵等式为:,其中,,
系数矩阵A的行列式为范德蒙行列式,且五个坐标点的横坐标各不相同,则该行列式不等于零,所以方程组有唯一解。
(2)根据已知条件,把五个点的坐标值分别代入二次多项式函数,可以得到如下线性方程组:
对应矩阵等式为:,其中,,
该方程组有三个未知数,但有五个方程,进一步分析可以得到该方程组无解,即不存在一个二次多项式曲线刚好能过已知的五个点。MATLAB软件提供了一个利用最小二乘法解决超定方程组近似解的方法。即可以找到一条二次曲线来近似地描述已知5点的变化情况。
在MATLAB软件M文件编辑器中编写程序m:
% 多项式插值和函数逼近
clear
close all
x=[0;1;2;3;4]; % 输入已知点坐标
y=[-27;0;21;0;-75];
A=[x.^0,x.^1,x.^2,x.^3,x.^4];% 构造范德蒙矩阵
a=A\y; % 得到适定方程组的唯一解a,即确定了多项式函数
% 或 p=polyfit(x,y,4) % p是按从高次幂到低次幂排列的系数向量;
disp('四次多项式系数为:')
disp(a);
xi=linspace(-1,9.5,100); % 构造数组xi,从-1到9.5均匀取100个值
yi=a(1)+a(2)*xi+a(3)*xi.^2+a(4)*xi.^3+a(5)*xi.^4;
% 计算对应xi的多项式函数值yi
x0=5;
y0=a(1)+a(2)*x0+a(3)*x0^2+a(4)*x0^3+a(5)*x0^4;
% 计算插值点函数值
disp('四次多项式函数插值点p(5)=');
disp(y0);
subplot(1,2,1);
plot(xi,yi,x,y, 'o',x0,y0, '*');% 绘制四次多项式函数、已知五点及插值点
axis square; % 使坐标轴为正方形
axis([-1 9 -400 100]) % 确定x轴和y轴范围
grid on; % 显示网格
A=[x.^0,x.^1,x.^2];
a=A\y; % 根据最小二乘法得到超定方程组的近似解a
% 或 p=polyfit(x,y,2) % p是按从高次幂到低次幂排列的系数向量;
disp('二次多项式系数为:')
disp(a);
xi=linspace(-1,5,100); % 构造数组xi,从-1到5均匀取100个值
yi=a(1)+a(2)*xi+a(3)*xi.^2; % 计算对应xi的多项式函数值yi
subplot(1,2,2);
plot(xi,yi,x,y, 'o'); % 绘制二次多项式函数及已知五点
axis square;
axis([-1 5 -150 50])
grid on;
在MATLAB命令窗口输入m文件名称,
计算结果为:
四次多项式系数为:
-27
12
26
-12
1
四次多项式函数插值点p(5)=
-192
二次多项式系数为:
-32.1429
60.6857
-17.5714
下图给出了MATLAB绘制的图形。从图中可以形象地看出插值和拟合的区别。
插值和拟合的示意图
实验习题
下表给出了平面坐标系中六个点的坐标。
表 六点数据表
x
0
1
2
3
4
5
y
-750
0
840
1344
1134
0
(1)请过这六个点作一个五次多项式函数,并求当时的函数值。用MATLAB绘制多项式函数曲线、已知点及插值点(-1,)。
(2)请根据这六个点,拟合一个三次多项式函数。并用MATLAB绘制多项式函数曲线及已知点。
习题答案:
题目1:
clear;
A=[0,1,1,1,1;1,0,1,1,1;1,1,0,1,1;1,1,1,0,1;1,1,1,1,0];%构造邻接矩阵
B=A^4;
C=A+A^2+A^3;
disp('邻接矩阵A为:');
disp(A);
disp('矩阵A^4为:');
disp(B);
m=sum(diag(B)); %计算B对角线元素之和
fprintf('传4次后回到第一个人的传法: %d\n ',m);
disp('矩阵A+A^2+A^3为:');
disp(C);
n=sum(sum(C))-sum(diag(C)); %计算除对角线之外的元素之和
fprintf('传到第二个人的传法 : %d',n);
>> ti1
邻接矩阵A为:
0 1 1 1 1
1 0 1 1 1
1 1 0 1 1
1 1 1 0 1
1 1 1 1 0
矩阵A^4为:
52 51 51 51 51
51 52 51 51 51
51 51 52 51 51
51 51 51 52 51
51 51 51 51 52
传4次后回到第一个人的传法: 260
矩阵A+A^2+A^3为:
16 17 17 17 17
17 16 17 17 17
17 17 16 17 17
17 17 17 16 17
17 17 17 17 16
传到第二个人的传法 : 340>>
题目2:
% 多项式插值和函数逼近
clear
close all
x=[0;1;2;3;4]; % 输入已知点坐标
y=[-27;0;21;0;-75];
A=[x.^0,x.^1,x.^2,x.^3,x.^4];% 构造范德蒙矩阵
a=A\y; % 得到适定方程组的唯一解a,即确定了多项式函数
% 或 p=polyfit(x,y,4) % p是按从高次幂到低次幂排列的系数向量;
disp('四次多项式系数为:')
disp(a);
xi=linspace(-1,9.5,100); % 构造数组xi,从-1到9.5均匀取100个值
yi=a(1)+a(2)*xi+a(3)*xi.^2+a(4)*xi.^3+a(5)*xi.^4;
% 计算对应xi的多项式函数值yi
x0=5;
y0=a(1)+a(2)*x0+a(3)*x0^2+a(4)*x0^3+a(5)*x0^4;
% 计算插值点函数值
disp('四次多项式函数插值点p(5)=');
disp(y0);
subplot(1,2,1);
plot(xi,yi,x,y, 'o',x0,y0, '*');% 绘制四次多项式函数、已知五点及插值点
axis square; % 使坐标轴为正方形
axis([-1 9 -400 100]) % 确定x轴和y轴范围
grid on; % 显示网格
A=[x.^0,x.^1,x.^2];
a=A\y; % 根据最小二乘法得到超定方程组的近似解a
% 或 p=polyfit(x,y,2) % p是按从高次幂到低次幂排列的系数向量;
disp('二次多项式系数为:')
disp(a);
xi=linspace(-1,5,100); % 构造数组xi,从-1到5均匀取100个值
yi=a(1)+a(2)*xi+a(3)*xi.^2; % 计算对应xi的多项式函数值yi
subplot(1,2,2);
plot(xi,yi,x,y, 'o'); % 绘制二次多项式函数及已知五点
axis square;
axis([-1 5 -150 50])
grid on;
结果:
>> ti2
四次多项式系数为:
-750.0000
575.0000
230.0000
-48.0000
-8.0000
1.0000
四次多项式函数插值点p(-1)=
-1.0560e+003
二次多项式系数为:
-757.2381
647.8254
187.6190
-57.4444
展开阅读全文