关于linear algebra不再赘述,下面通过matlab代码解决一些常见的线性代数问题。
线性代数是信息科学与工程学院大一上的课,而化工学院选择开在了大二上,转专业的缘故,就需要补修线性代数。
线性代数老师在结课后布置了课程大作业,其中有一项为将课后题的实验部分用Matlab做出来,由于信号与系统的实验就已经接触到了Matlab于是就选择这个作为自己的课程大作业,大二下也将修Matlab高级程序语言设计,也算做了铺垫。
1
用初等行变换法求解线性方程组:
$$ \left \{ \begin{array}{c} x_1+x_2-3x_3-x_4=1 \\ 3x_1-x_2-3x_3+4x_4=4 \\ x_1+5x_2-9x_3-8x_4=0 \end{array} \right . $$
matlab代码
b = [1, 4 ,0]';
B = [A, b];
c = rref(B)
运行结果:
c =
1.0000 0 0 -0.3333 -0.3333
0 1.0000 0 1.0000 4.0000
0 0 1.0000 0.6667 -3.3333
2
用Cramer法则求解线性方程组
$$ \left \{ \begin{array}{c} 3x_1-2x_2+2x_3=10 \\ x_1+2x_2-3x_3=-1 \\ 3x_1-2x_2+2x_3=0 \end{array} \right . $$
matlab代码:
clear
n = input('方程个数n=');
A = input('系数矩阵A=');
b = input('常数列向量b=');
if (size(A) ~= [n, n]) | size(B) ~=[n, 1]
disp('输入不正确,要求A是n阶方阵,b是n维列向量')
else if det(A) == 0
disp('系数行列式为0,不能用克拉默法则解此方程组')
else
for i = 1:n
B = A;
B(:,i) = b;
x(i) = det(B)/det(A);
end
end
end
运行结果:
Emmm 不会输入矩阵
3
向量组的线性相关性。给定一个n维向量组a1,a2,…,am,判断其线性相关性,并确定一个最大无关组。由于对矩阵A实施初等变换不改变其列向量之间的线性关系,因此可以利用Matlab的库函数rref实现。
matlab代码:
clear
x1 = [1, 0, 2]';x2 = [2, 1, 1]';x3 = [2, 0,1]';x4 = [3, 1, 1]';
x5= [1, 1, 1]';
A = [x1, x2, x3, x4];
[R, jb] = rref(A); len = length(jb);
if len < 5
'The vector group is linearly dependent and serial numbers are'
jb
else
'The vector group is linearly independent'
end
运行结果;
ans =
The vector group is linearly dependent and serial numbers are
jb =
1 2 3
4
化二次型为标准型。在Matlab中将二次型
$f = x_1^2+x_2^2+x_3^2+4x_1x_2+4x_1x_3+4x_2x_3$ 化为标准型.
matlab代码:
clear
A = [1, 2, 2;2, 1, 2;2, 2, 1]
[q, d] = eig(A)
C =q' * A * q
运行结果:
A =
1 2 2
2 1 2
2 2 1
q =
0.6015 0.5522 0.5774
0.1775 -0.7970 0.5774
-0.7789 0.2448 0.5774
d =
-1.0000 0 0
0 -1.0000 0
0 0 5.0000
C =
-1.0000 -0.0000 -0.0000
-0.0000 -1.0000 0.0000
-0.0000 0.0000 5.0000
5
判定二次型的正定值。在Matlab中判定
$ f = 3x_1^2+2x_2^2+7x_3^2-4x_1x_2-4x_2x_3 $是否为正定二次型?
matlab代码:
clear;
A = [3, -2, 0;-2, 2, -2;0, -2, 7]; %输入二次型对应的对称阵
[q, d] = eig(A); %求矩阵A的特征值与特征向量
v = diag(d); %提取A的所有特征值
if all( v > 0) %判断矩阵A的特征值是否为正
disp('二次型为正定')
elseif all(v >= 0)
disp('二次型为半正定') %判断矩阵A的特征值是否均为非负
elseif all(v < 0)
disp('二次型为负定') %判断矩阵A的特征值是否均为负
elseif all(v <= 0)
disp('二次型为半负定') %判断矩阵A的特征值是否均为非正
else
disp('二次型为不定')
end
运行结果:
二次型为正定
6
计算二次型的正(负)惯性指数。在Matlab中计算二次型
$ f = x_1x_2+x_1x_3-3x_2x_3 $的正(负)惯性指数。
Matlab代码:
clear;
A = [0, 0.5, 0.5;0.5, 0, -1.5,;0.5, -1.5, 0];
%输入二次型对应的对称阵
[q, d] = eig(A); %计算矩阵A的特征值与特征向量
n = length(d); %计算矩阵A的阶数
zheng = 0; fu = 0; %将正负惯性指数初始值置为0
for i = 1:n
if d(i) > 0
zheng = zheng + 1;
elseif d(i) < 0
fu = fu + 1;
end
end
zheng, fu
运行结果:
zheng = 0
fu = 1
所有代码均通过Matlab 2016a运行检测通过,运行情况会因matlab版本不同而异。
好厉害,线性代数好难
学了考研的线代,才知道自己是多么菜