📄 exp3_1.m
字号:
% exp3_1.m --- 解线性方程组左除命令‘\’的学习
% ---------- example1 -----------
% Ax = b (x,b是列向量),当A是可逆矩阵时 x = A\b 产生该方程组的解
% 其算法基于LU分解相当于列主元Gauss消去法
A = [ 1 5 -9
0 6 4
1 1 1];
b = [-16 24 6]';
x1 = A\b
% [注] 该命令适用求解中小型稠密线性方程,而且性态是较好的(非病态),是最常用的命令
% 对于大型矩阵或病态的还有其它一些命令pcg,gmres,qmr等
% ---------- example2 -----------
% Ax = b ,当A是列满秩矩阵时 x = A\b 产生该方程组唯一的最小二乘解
% 其算法基于解法方程组 A'*A x = A'*b (见P125-126, 例11)
A = [2 1 1; 1 -2 -3; 3 -4 1; 1 3 -2];
b = [-4 5 3 -2]';
x2 = A\b
% ----------- example3 ----------
% 解矩阵方程AX = B ,当A可逆或列满秩
A = [ 1 3
1 4];
B = [ 1 2
3 4];
X = A\B
% ******** 你的实验 ********
% 【实验一】 自学与矩阵计算有关的一些常用函数
% det(A) --- 求方阵A的行列式
% inv(A) --- 求方阵的逆
% rank(A) --- 求矩阵A的(数值)秩
% rref(A) --- 化矩阵A为最简阶梯形
% norm(A,p) --- 求矩阵A的p-范数
% cond(A,p) --- 求矩阵A的p-范数的条件数
% eig(A) --- 求方阵A的特征值
% 【实验二】 x = A\b 与 x = inv(A)*b 在耗时方面的区别
% 解方程组 Ax = b 时尽量不要使用 x = inv(A)*b,而要使用 x = A\b
% 下面是二者耗时方面的区别实验(把下面程序拷贝为新的M-文件,有些命令可不关心其含义)
% rand('state',0);
% A = gallery('randsvd',200,2e13,2); % 产生条件数为2e13的200阶的随机矩阵
% x = ones(200,1); % 设精确解为[1,1,...,1]'
% b = A*x;
% format long % 用15位小数显示
%
% % 求逆法
% tic % 启动计时器
% x1 = inv(A)*b;
% time1 = toc % 关闭计时器并显示耗时
% error1 = norm(x-x1,inf) % 计算最大误差
%
% % 左除法
% tic
% x2 = A\b;
% time2 = toc
% error2 = norm(x-x2,inf)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -