数学建模实验一 - matlab基础 联系客服

发布时间 : 星期一 文章数学建模实验一 - matlab基础更新完毕开始阅读8abb8cdb360cba1aa811dadc

第1章 矩阵及其基本运算

1.3.7 奇异值分解

函数 svd

格式 s = svd (X) %返回矩阵X的奇异值向量

[U,S,V] = svd (X) %返回一个与X同大小的对角矩阵S,两个酉矩阵U和V,且满足= U*S*V'。若A为m3n阵,则U为m3m阵,V为n3n阵。奇异值在S的对角线上,非负且按降序排列。

[U,S,V] = svd (X,0) %得到一个“有效大小”的分解,只计算出矩阵U的前n列,矩阵S的大小为n3n。

例1-73

>> A=[1 2;3 4;5 6;7 8]; >> [U,S,V]=svd(A)

U =

-0.1525 -0.8226 -0.3945 -0.3800 -0.3499 -0.4214 0.2428 0.8007 -0.5474 -0.0201 0.6979 -0.4614 -0.7448 0.3812 -0.5462 0.0407 S =

14.2691 0 0 0.6268 0 0 0 0 V =

-0.6414 0.7672 -0.7672 -0.6414 >> [U,S,V]=svd(A,0)

U =

-0.1525 -0.8226 -0.3499 -0.4214 -0.5474 -0.0201 -0.7448 0.3812 S =

14.2691 0 0 0.6268 V =

-0.6414 0.7672 -0.7672 -0.6414

1.4 线性方程的组的求解

我们将线性方程的求解分为两类:一类是方程组求唯一解或求特解,另一类是方程组求无穷解即通解。可以通过系数矩阵的秩来判断:

若系数矩阵的秩r=n(n为方程组中未知变量的个数),则有唯一解; 若系数矩阵的秩r

线性方程组的无穷解 = 对应齐次方程组的通解+非齐次方程组的一个特解;其特解的求法属于解的第一类问题,通解部分属第二类问题。

25 MATLAB6.0数学手册 1.4.1 求线性方程组的唯一解或特解(第一类问题)

这类问题的求法分为两类:一类主要用于解低阶稠密矩阵 —— 直接法;另一类是解大型稀疏矩阵 —— 迭代法。

1.利用矩阵除法求线性方程组的特解(或一个解) 方程:AX=b 解法:X=A\\b

?5x1?6x2?x1?5x2?6x3?x2?5x3?6x4例1-76 求方程组??x3?5x4?6x5?x4?5x5?解:

>>A=[5 6 0 0 0

1 5 6 0 0 0 1 5 6 0 0 0 1 5 6 0 0 0 1 5];

B=[1 0 0 0 1]';

R_A=rank(A) %求秩 X=A\\B %求解

?1?0?0的解。 ?0?1运行后结果如下

R_A = 5 X =

2.2662 -1.7218 1.0571 -0.5940 0.3188

这就是方程组的解。 或用函数rref求解:

>> C=[A,B] %由系数矩阵和常数列构成增广矩阵C >> R=rref(C) %将C化成行最简行

R =

1.0000 0 0 0 0 2.2662 0 1.0000 0 0 0 -1.7218 0 0 1.0000 0 0 1.0571 0 0 0 1.0000 0 -0.5940 0 0 0 0 1.0000 0.3188

则R的最后一列元素就是所求之解。

?x1?x2?3x3?x4?1?例1-77 求方程组?3x1?x2?3x3?4x4?4的一个特解。

??x1?5x2?9x3?8x4?0解:

>>A=[1 1 -3 -1;3 -1 -3 4;1 5 -9 -8]; >>B=[1 4 0]';

26 第1章 矩阵及其基本运算

>>X=A\\B %由于系数矩阵不满秩,该解法可能存在误差。

X =[ 0 0 -0.5333 0.6000]’(一个特解近似值)。

若用rref求解,则比较精确:

>> A=[1 1 -3 -1;3 -1 -3 4;1 5 -9 -8];

B=[1 4 0]';

>> C=[A,B]; %构成增广矩阵 >> R=rref(C)

R =

1.0000 0 -1.5000 0.7500 1.2500 0 1.0000 -1.5000 -1.7500 -0.2500 0 0 0 0 0

由此得解向量X=[1.2500 – 0.2500 0 0]’(一个特解)。 2.利用矩阵的LU、QR和cholesky分解求方程组的解 (1)LU分解:

LU分解又称Gauss消去分解,可把任意方阵分解为下三角矩阵的基本变换形式(行交换)和上三角矩阵的乘积。即A=LU,L为下三角阵,U为上三角阵。

则:A*X=b 变成L*U*X=b

所以X=U\\(L\\b) 这样可以大大提高运算速度。 命令 [L,U]=lu (A)

?4x1?2x2?x3?2例1-78 求方程组??3x1?x2?2x3?10的一个特解。

?11x?3x?812?解:

?42?1???A??3?12??1130???b?[2,10,8]?

>>A=[4 2 -1;3 -1 2;11 3 0]; >>B=[2 10 8]'; >>D=det(A) >>[L,U]=lu(A) >>X=U\\(L\\B)

显示结果如下:

D = 0 L =

0.3636 -0.5000 1.0000 0.2727 1.0000 0 1.0000 0 0 U =

11.0000 3.0000 0 0 -1.8182 2.0000 0 0 0.0000

Warning: Matrix is close to singular or badly scaled.

Results may be inaccurate. RCOND = 2.018587e-017. > In D:\\Matlab\\pujun\\lx0720.m at line 4 X =

1.0e+016 * -0.4053

27 MATLAB6.0数学手册 1.4862 1.3511

说明 结果中的警告是由于系数行列式为零产生的。可以通过A*X验证其正确性。 (2)Cholesky分解 若A为对称正定矩阵,则Cholesky分解可将矩阵A分解成上三角矩阵和其转置的乘积,即:A?R??R 其中R为上三角阵。

方程 A*X=b 变成 R??R*X?b

所以 X?R\\(R?\\b)

(3)QR分解

对于任何长方矩阵A,都可以进行QR分解,其中Q为正交矩阵,R为上三角矩阵的初等变换形式,即:A=QR

方程 A*X=b 变形成 QRX=b 所以 X=R\\(Q\\b) 上例中 [Q, R]=qr(A) X=R\\(Q\\B)

说明 这三种分解,在求解大型方程组时很有用。其优点是运算速度快、可以节省磁盘空间、节省内存。

1.4.2 求线性齐次方程组的通解

在Matlab中,函数null用来求解零空间,即满足A2X=0的解空间,实际上是求出解空间的一组基(基础解系)。

格式 z = null % z的列向量为方程组的正交规范基,满足Z??Z?I。

z?null(A,?r?) % z的列向量是方程AX=0的有理基

?x1?2x2?2x3?x4?0?例1-79 求解方程组的通解:?2x1?x2?2x3?2x4?0

??x1?x2?4x3?3x4?0解:

>>A=[1 2 2 1;2 1 -2 -2;1 -1 -4 -3];

>>format rat %指定有理式格式输出 >>B=null(A,'r') %求解空间的有理基

运行后显示结果如下:

B =

2 5/3 -2 -4/3 1 0 0 1

或通过行最简行得到基:

>> B=rref(A)

B =

1.0000 0 -2.0000 -1.6667 0 1.0000 2.0000 1.3333

28