关于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版本不同而异。