1.3-2 输入一个矩阵行列式
1.3-3 输入一个分行行列式
1.3-4 MATLAB提示出现错误
1.3-5 用函数zeros生成全零矩阵
1.3-6 用函数eye生成单位矩阵
1.3-7 矩阵的加减运算
1.3-8 两个矩阵的乘法运算
1.3-9 矩阵的数乘运算
1.3-10 向量的点积
1.3-11 向量的叉乘
1.3-11 向量的叉乘
1.3-12 向量的混和积
1.3-13 左除和右除
1.3-14 矩阵的方阵
1.3-15 矩阵的转置
1.3-16 对奇异矩阵求逆时MATLAB给出的警告提示
1.3-17 用初等变换的方法求逆矩阵
1.3-18 以有理格式输出矩阵
demo例题
Predicting the us population
此程序展示了用matlab和图表,以及多项式来预测未来一些数据的发展趋势
%Time interval
t = (1900:10:2000)';
时间从1900到2000年时间间隔为10年
% Population
p = [75.995 91.972 105.711 123.203 131.669...
150.697 179.323 203.212 226.505 249.633 281.422]';
人口数据
% Plot
plot(t,p,'bo');横坐标为时间,纵坐标为人口
axis([1900 2020 0 400]);坐标轴
title('Population of the U.S. 1900-2000');题目1900到2000年的人口
ylabel('Millions');单位Million3
找到一个合适的数据带入一个多项式中去预测2010年时的人口数,多项式的系数与一个11*11的矩阵行列式有关,并根据此行列式求解多项式系数,矩阵里的一些元素可以帮助计算时间A(i,j) = s(i)^(n-j);
n = length(t);
s = (t-1950)/50;
A = zeros(n);
A(:,end) = 1;
for j = n-1:-1:1, A(:,j) = s .* A(:,j+1);end
多项式的系数C是合适的数据P的D的系数,数据P是通过前一个D+1的线性行列式的微分方程系统得到的。
A(:,n-d:n)*c ~= p
如果D小于10,那么还有比未知数和最小答案更适合的,如果D等于10,那么多项式可以被精确的求解,证明多项式确实插入了这个数据。另外的情况,是用matlab的反斜算方法解决的,这也就是立方拟合系数。
c = A(:,n-3:n)\p
c =
1.2629
23.7261
100.3659
155.9043
下面是计算了从1900年到2000年间坐标点。
v = (1900:2020)';
x = (v-1950)/50;
w = (2010-1950)/50;
y = polyval(c,x);
z = polyval(c,w);
hold on
plot(v,y,'k-');
plot(2010,z,'ks');
text(2010,z+15,num2str(z));
hold off
c = A(:,n-4:n)\p;
y = polyval(c,x);
z = polyval(c,w);
hold on
plot(v,y,'k-');
plot(2010,z,'ks');
text(2010,z-15,num2str(z));
hold off
随着程度的增加,这种推测越来越不稳定,呈现偏离的趋势
cla
plot(t,p,'bo'); hold on; axis([1900 2020 0400]);
colors = hsv(8); labels = {'data'};
for d = 1:8
[Q,R] = qr(A(:,n-d:n));
R= R(1:d+1,:); Q = Q(:,1:d+1);
c= R\(Q'*p);
%Same as c = A(:,n-d:n)\p;
y= polyval(c,x);
z= polyval(c,11);
plot(v,y,'color',colors(d,:));
labels{end+1} = ['degree = ' int2str(d)];
end
legend(labels,2)