***********转孤独的猫***********

特征值问题的QZ分解

函数  qz

格式  [AA,BB,Q,Z,V] = qz(A,B)       %A、B为方阵,产生上三角阵AA和BB,正交矩阵Q、Z或其列变换形式,V为特征向量阵。且满足:Q*A*Z= AA 和Q*B*Z = BB。

[AA,BB,Q,Z,V] = qz(A,B,flag)   %产生由flag决定的分解结果,flag取值为:'complex':表示复数分解(默认),取值为'real':表示实数分解。

海森伯格形式的分解

如果矩阵H的第一子对角线下元素都是0,则H为海森伯格(Hessenberg)矩阵。如果矩阵是对称矩阵,则它的海森伯格形式是对角三角阵。MATLAB可以通过相似变换将矩阵变换成这种形式。

函数  hess

格式  H = hess(A)      %返回矩阵A的海森伯格形式

[P,H] = hess(A)   %P为酉矩阵,满足:A = PHP' 且P'P = eye(size(A))。

例1-75

>> A=[-149 -50 -154;537 180 546;-27 -9 -25];

>> [P,H]=hess(A)

P =

1.0000         0         0

0   -0.9987    0.0502

0    0.0502    0.9987

H =

-149.0000   42.2037 -156.3165

-537.6783  152.5511 -554.9272

0    0.0728    2.4489

H的第一子对角元素是H(3,1)=0。

线性方程的组的求解

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

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

若系数矩阵的秩r<n,则可能有无穷解;

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

求线性方程组的唯一解或特解(第一类问题)

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

1.利用矩阵除法求线性方程组的特解(或一个解)

方程:AX=b

解法:X=A\b

例1-76  求方程组 的解。

解:

>>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    %求解

运行后结果如下

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的最后一列元素就是所求之解。

例1-77  求方程组 的一个特解。

解:

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

>>B=[1  4  0]';

>>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)

例1-78  求方程组 的一个特解。

解:

>>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

1.4862

1.3511

说明  结果中的警告是由于系数行列式为零产生的。可以通过A*X验证其正确性。

(2)Cholesky分解

若A为对称正定矩阵,则Cholesky分解可将矩阵A分解成上三角矩阵和其转置的乘积,即:   其中R为上三角阵。

方程  A*X=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)

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

求线性齐次方程组的通解

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

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

% z的列向量是方程AX=0的有理基

例1-79  求解方程组的通解:

解:

>>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

0         0         0         0

即可写出其基础解系(与上面结果一致)。

写出通解:

syms  k1  k2

X=k1*B(:,1)+k2*B(:,2)      %写出方程组的通解

pretty(X)     %让通解表达式更加精美

运行后结果如下:

X =

[  2*k1+5/3*k2]

[ -2*k1-4/3*k2]

[           k1]

[           k2]

% 下面是其简化形式

[2k1 + 5/3k2 ]

[              ]

[-2k1 - 4/3k2]

[              ]

[      k1      ]

[              ]

[      k2      ]

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

非齐次线性方程组需要先判断方程组是否有解,若有解,再去求通解。

因此,步骤为:

第一步:判断AX=b是否有解,若有解则进行第二步

第二步:求AX=b的一个特解

第三步:求AX=0的通解

第四步:AX=b的通解= AX=0的通解+AX=b的一个特解。

例1-80  求解方程组

解:在Matlab中建立M文件如下:

A=[1  -2  3  -1;3  -1  5  -3;2  1  2  -2];

b=[1  2  3]';

B=[A b];

n=4;

R_A=rank(A)

R_B=rank(B)

format rat

if R_A==R_B&R_A==n      %判断有唯一解

X=A\b

elseif R_A==R_B&R_A<n    %判断有无穷解

X=A\b      %求特解

C=null(A,'r')    %求AX=0的基础解系

else X='equition no solve'     %判断无解

end

运行后结果显示:

R_A =

2

R_B =

3

X =

equition no solve

说明  该方程组无解

例1-81  求解方程组的通解:

解法一:在Matlab编辑器中建立M文件如下:

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

b=[1 4 0]';

B=[A b];

n=4;

R_A=rank(A)

R_B=rank(B)

format rat

if R_A==R_B&R_A==n

X=A\b

elseif R_A==R_B&R_A<n

X=A\b

C=null(A,'r')

else X='Equation has no solves'

end

运行后结果显示为:

R_A =

2

R_B =

2

Warning: Rank deficient, rank = 2  tol =   8.8373e-015.

> In D:\Matlab\pujun\lx0723.m at line 11

X =

0

0

-8/15

3/5

C =

3/2         -3/4

3/2          7/4

1            0

0            1

所以原方程组的通解为X=k1 +k2 +

解法二:用rref求解

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

b=[1 4 0]';

B=[A b];

C=rref(B)    %求增广矩阵的行最简形,可得最简同解方程组。

运行后结果显示为:

C =

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

0        1      -3/2     -7/4     -1/4

0        0        0        0         0

对应齐次方程组的基础解系为: ,   非齐次方程组的特解为: 所以,原方程组的通解为:X=k1 +k2 + 。

线性方程组的LQ解法

函数  symmlq

格式  x = symmlq(A,b)   %求线性方程组AX=b的解X。A必须为n阶对称方阵,b为n元列向量。A可以是由afun定义并返回A*X的函数。如果收敛,将显示结果信息;如果收敛失败,将给出警告信息并显示相对残差norm(b-A*x)/norm(b)和计算终止的迭代次数。

symmlq(A,b,tol)                %指定误差tol,默认值是1e-6。

symmlq(A,b,tol,maxit)           %maxit指定最大迭代次数

symmlq(A,b,tol,maxit,M)         %M为用于对称正定矩阵的预处理因子

symmlq(A,b,tol,maxit,M1,M2)     %M=M1×M2

symmlq(A,b,tol,maxit,M1,M2,x0)   %x0为初始估计值,默认值为0。

[x,flag] = symmlq(A,b,…)   %flag的取值为:0表示在指定迭代次数之内按要求精度收敛;1表示在指定迭代次数内不收敛;2表示M为坏条件的预处理因子;3表示两次连续迭代完全相同;4表示标量参数太小或太大;5表示预处理因子不是对称正定的。

[x,flag,relres] = symmlq(A,b,…)     % relres表示相对误差norm(b-A*x)/norm(b)

[x,flag,relres,iter] = symmlq(A,b,…)  %iter表示计算x的迭代次数

[x,flag,relres,iter,resvec] = symmlq(A,b,…)   %resvec表示每次迭代的残差:norm(b-A*x0)

[x,flag,relres,iter,resvec,resveccg] = symmlq(A,b,…)   %resveccg表示每次迭代共轭梯度残差的范数

双共轭梯度法解方程组

函数  bicg

格式  x = bicg(A,b)   %求线性方程组AX=b的解X。A必须为n阶方阵,b为n元列向量。A可以是由afun定义并返回A*X的函数。如果收敛,将显示结果信息;如果收敛失败,将给出警告信息并显示相对残差norm(b-A*x)/norm(b)和计算终止的迭代次数。

bicg(A,b,tol)                 %指定误差tol,默认值是1e-6。

bicg(A,b,tol,maxit)            %maxit指定最大迭代次数

bicg(A,b,tol,maxit,M)          %M为用于对称正定矩阵的预处理因子

bicg(A,b,tol,maxit,M1,M2)      %M=M1×M2

bicg(A,b,tol,maxit,M1,M2,x0)    %x0为初始估计值,默认值为0。

[x,flag] = bicg(A,b,…)   %flag的取值为:0表示在指定迭代次数之内按要求精度收敛;1表示在指定迭代次数内不收敛;2表示M为坏条件的预处理因子;3表示两次连续迭代完全相同;4表示标量参数太小或太大。

[x,flag,relres] = bicg(A,b,…)       % relres表示相对误差norm(b-A*x)/norm(b)

[x,flag,relres,iter] = bicg(A,b,…)    %iter表示计算x的迭代次数

[x,flag,relres,iter,resvec] = bicg(A,b,…)     %resvec表示每次迭代的残差:norm(b-A*x0)

例1-83  调用MATLAB6.0数据文件west0479。

>> load west0479

>> A=west0479;    %将数据取为系数矩阵A。

>> b=sum (A,2);     %将A的各行求和,构成一列向量。

>> X=A\b;         %用“\”求AX=b的解。

>> norm(b-A*X)/norm(b)    %计算解的相对误差。

ans =

1.2454e-017

>> [x,flag,relres,iter,resvec] = bicg(A,b)    %用bicg函数求解。

x =  (全为0,由于太长,不显示出来)

flag =

1       %表示在默认迭代次数(20次)内不收敛。

relres =        %相对残差relres = norm(b-A*x)/norm(b) =norm(b)/norm(b) = 1。

1

iter =          %表明解法不当,使得初始估计值0向量比后来所有迭代值都好。

0

resvec =  (略)               %每次迭代的残差。

>> semilogy(0:20,resvec/norm(b),'-o')   %作每次迭代的相对残差图形,结果如下图。

>> xlabel('iteration number')           %x轴为迭代次数。

>> ylabel('relative residual')           %y轴为相对残差。

图1-1  双共轭梯度法相对误差图

稳定双共轭梯度方法解方程组

函数  bicgstab

格式  x =bicgstab(A,b)

bicgstab(A,b,tol)

bicgstab(A,b,tol,maxit)

bicgstab(A,b,tol,maxit,M)

bicgstab(A,b,tol,maxit,M1,M2)

bicgstab(A,b,tol,maxit,M1,M2,x0)

[x,flag] = bicgstab(A,b,…)

[x,flag,relres] = bicgstab(A,b,…)

[x,flag,relres,iter] = bicgstab(A,b,…)

[x,flag,relres,iter,resvec] = bicgstab(A,b,…)

稳定双共轭梯度法解方程组,调用方式和返回的结果形式和命令bicg一样。

例1-84

>>load west0479;

>>A=west0479;

>>b=sum(A,2);

>>[x,flag]=bicgstab(A,b)

显示结果是x的值全为0,flag=1。表示在默认误差和默认迭代次数(20次)下不收敛。

若改为:

>>[L1,U1] = luinc(A,1e-5);

>>[x1,flag1] = bicgstab(A,b,1e-6,20,L1,U1)

即指定误差,并用A的不完全LU分解因子L和U作为预处理因子M=L*U,其结果是x1的值全为0,flag=2表示预处理因子为坏条件的预处理因子。

若改为

>>[L2,U2]=luinc(A,1e-6);      %稀疏矩阵的不完全LU分解。

>>[x2,flag2,relres2,iter2,resvec2]=bicgstab(A,b,1e-15,10,L2,U2)

%指定最大迭代次数为10次,预处理因子M=L*U。

>>semilogy(0:0.5:iter2,resvec2/norm(b),'-o')    %每次迭代的相对残差图形,见图1-2。

图1-2  稳定双共轭梯度方法的相对误差图

>>xlabel('iteration number')

>>ylabel('relative residual')

结果为

x2=(其值全为1,略)

flag2 =

0         %表示收敛

relres2 =

2.8534e-016    %收敛时的相对误差

iter2 =

6        %计算终止时的迭代次数

resvec2 =       %每次迭代的残差

复共轭梯度平方法解方程组

函数  cgs

格式  x = cgs(A,b)

cgs(A,b,tol)

cgs(A,b,tol,maxit)

cgs(A,b,tol,maxit,M)

cgs(A,b,tol,maxit,M1,M2)

cgs(A,b,tol,maxit,M1,M2,x0)

[x,flag] = cgs(A,b,…)

[x,flag,relres] = cgs(A,b,…)

[x,flag,relres,iter] = cgs(A,b,…)

[x,flag,relres,iter,resvec] = cgs(A,b,…)

调用方式和返回的结果形式与命令bicg一样。

共轭梯度的LSQR方法

函数  lsqr

格式  x = lsqr(A,b)

lsqr(A,b,tol)

lsqr(A,b,tol,maxit)

lsqr(A,b,tol,maxit,M)

lsqr(A,b,tol,maxit,M1,M2)

lsqr(A,b,tol,maxit,M1,M2,x0)

[x,flag] = lsqr(A,b,…)

[x,flag,relres] = lsqr(A,b,…)

[x,flag,relres,iter] = lsqr(A,b,…)

[x,flag,relres,iter,resvec] = lsqr(A,b,…)

调用方式和返回的结果形式与命令bicg一样。

例1-85

>>n = 100;

>>on = ones(n,1);

>>A = spdiags([-2*on 4*on -on],-1:1,n,n);   %产生一个对角矩阵

>>b = sum(A,2);

>>tol = 1e-8;    %指定精度

>>maxit = 15;   %指定最大迭代次数

>>M1 = spdiags([on/(-2) on],-1:0,n,n);

>>M2 = spdiags([4*on -on],0:1,n,n);       %M1*M2=M,即产生预处理因子

>>[x,flag,relres,iter,resvec] = lsqr(A,b,tol,maxit,M1,M2,[])

结果显示

x的值全为1

flag =

0      %表示收敛

relres =

3.5241e-009    %表示相对残差

iter =

12       %计算终止时的迭代次数

广义最小残差法

函数  qmres

格式  x = gmres(A,b)

gmres(A,b,restart)

gmres(A,b,restart,tol)

gmres(A,b,restart,tol,maxit)

gmres(A,b,restart,tol,maxit,M)

gmres(A,b,restart,tol,maxit,M1,M2)

gmres(A,b,restart,tol,maxit,M1,M2,x0)

[x,flag] = gmres(A,b,…)

[x,flag,relres] = gmres(A,b,…)

[x,flag,relres,iter] = gmres(A,b,…)

[x,flag,relres,iter,resvec] = gmres(A,b,…)

除参数restart(缺省时为系数方阵A的阶数n)可以给出外,调用方式和返回的结果形式与命令bicg一样。

例1-86

>>load west0479;

>>A = west0479;

>>b = sum(A,2);

>>[x,flag] = gmres(A,b,5)

结果显示flag=1,表示在默认精度和默认迭代次数下不收敛。

若最后一行改为

>>[L1,U1] = luinc(A,1e-5);

>>[x1,flag1] = gmres(A,b,5,1e-6,5,L1,U1)

结果flag1=2,说明该方法失败,原因是U1的对角线上有0元素,构成坏条件的预处理因子。

若改为:

[L2,U2] = luinc(A,1e-6);

tol = 1e-15;

[x4,flag4,relres4,iter4,resvec4] = gmres(A,b,4,tol,5,L2,U2)

[x6,flag6,relres6,iter6,resvec6] = gmres(A,b,6,tol,3,L2,U2)

[x8,flag8,relres8,iter8,resvec8] = gmres(A,b,8,tol,3,L2,U2)

结果flag4=0,flag6=0,flag8=0表示参数restart分别取为4,6,8时收敛。

最小残差法解方程组

函数  minres

格式  x = minres(A,b)

minres(A,b,tol)

minres(A,b,tol,maxit)

minres(A,b,tol.maxit,M)

minres(A,b,tol,maxit,M1,M2)

minres(A,b,tol,maxit,M1,M2,x0)

[x,flag] = minres(A,b,…)

[x,flag,relres] = minres(A,b,…)

[x,flag,relres,iter] = minres(A,b,…)

[x,flag,relres,iter,resvec] = minres(A,b,…)

[x,flag,relres,iter,resvec,resveccg] = minres(A,b,…)

这里A为对称矩阵,这种方法是寻找最小残差来求x。调用方式和返回的结果形式与命令bicg一样。

例1-87

>>n = 100; on = ones(n,1);

>>A = spdiags([-2*on 4*on -2*on],-1:1,n,n);

>>b = sum(A,2);

>>tol = 1e-10;

>>maxit = 50;

>>M1 = spdiags(4*on,0,n,n);

>> [x,flag,relres,iter,resvec,resveccg] = minres(A,b,tol,maxit,M1,[],[])

结果显示:

flag =

0

relres =

4.6537e-014

iter =

49

resvec =(略)

resveccg =(略)

预处理共轭梯度方法

函数  pcg

格式  x = pcg(A,b)

pcg(A,b,tol)

pcg(A,b,tol,maxit)

pcg(A,b,tol,maxit,M)

pcg(A,b,tol,maxit,M1,M2)

pcg(A,b,tol,maxit,M1,M2,x0)

pcg(A,b,tol,maxit,M1,M2,x0,p1,p2,…)

[x,flag] = pcg(A,b,tol,maxit,M1,M2,x0,p1,p2,…)

[x,flag,relres] = pcg(A,b,tol,maxit,M1,M2,x0,p1,p2,…)

[x,flag,relres,iter] = pcg(A,b,tol,maxit,M1,M2,x0,p1,p2,…)

[x,flag,relres,iter,resvec] = pcg(A,b,tol,maxit,M1,M2,x0,p1,p2,…)

调用方式和返回的结果形式与命令bicg一样,这里A为对称正定矩阵。

准最小残差法解方程组

函数  qmr

格式  x = qmr(A,b)

qmr(A,b,tol)

qmr(A,b,tol,maxit)

qmr(A,b,tol,maxit,M)

qmr(A,b,tol,maxit,M1,M2)

qmr(A,b,tol,maxit,M1,M2,x0)

qmr(afun,b,tol,maxit,m1fun,m2fun,x0,p1,p2,…)

[x,flag] = qmr(A,b,…)

[x,flag,relres] = qmr(A,b,…)

[x,flag,relres,iter] = qmr(A,b,…)

[x,flag,relres,iter,resvec] = qmr(A,b,…)

调用方式和返回的结果形式与命令bicg一样,这里A为方阵。

例1-88

>>load west0479;

>>A = west0479;

>>b = sum(A,2);

>>[x,flag] = qmr(A,b)

结果显示flag=1,表示在缺省情况下不收敛

若改为

>>[L1,U1] = luinc(A,1e-5);

>>[x1,flag1] = qmr(A,b,1e-6,20,L1,U1)

结果显示 flag=2,表示是坏条件的预处理因子,不收敛。

若改为

>>[L2,U2] = luinc(A,1e-6);

>>[x2,flag2,relres2,iter2,resvec2] = qmr(A,b,1e-15,10,L2,U2)

>>semilogy(0:iter2,resvec2/norm(b),'-o')     %每次迭代的相对残差图形

>>xlabel('iteration number')

>>ylabel('relative residual')

结果为

x=(全为1,略)

flag2 =

0    %表示收敛

relres2 =      %表示相对残差

2.8715e-016

iter2 =           %计算终止时的迭代次数

8

resvec2 =          %每次迭代的残差

1.0e+005 *

7.0557

7.1773

3.4032

1.7220

0.0000

0.0000

0.0000

0.0000

0.0000

图1-3  准最小残差法相对误差图

特征值与二次型

工程技术中的一些问题,如振动问题和稳定性问题,常归结为求一个方阵的特征值和特征向量。

特征值与特征向量的求法

设A为n阶方阵,如果数“ ”和n维列向量x使得关系式 成立,则称 为方阵A的特征值,非零向量x称为A对应于特征值“ ”的特征向量。

详见1.3.5和1.3.6节:特征值分解问题。

例1-89  求矩阵 的特征值和特征向量

解:

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

>>[V,D]=eig(A)

结果显示:

V =

-0.7071   -0.2425    0.3015

0          0    0.9045

-0.7071   -0.9701    0.3015

D =

-1     0     0

0     2     0

0     0     2

即:特征值-1对应特征向量(-0.7071  0  -0.7071)T

特征值2对应特征向量(-0.2425  0  -0.9701)T和(-0.3015  0.9045  -0.3015)T

例1-90  求矩阵 的特征值和特征向量。

解:

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

>>[V,D]=eig(A)

结果显示为

V =

0        0.4082   -0.4082

0        0.8165   -0.8165

1.0000   -0.4082    0.4082

D =

2     0     0

0     1     0

0     0     1

说明  当特征值为1 (二重根)时,对应特征向量都是k (0.4082  0.8165  -0.4082)T,k为任意常数。

提高特征值的计算精度

函数  balance

格式  [T,B] = balance(A)   %求相似变换矩阵T和平衡矩阵B,满足 。

B = balance(A)      %求平衡矩阵B

复对角矩阵转化为实对角矩阵

函数  cdf2rdf

格式  [V,D] = cdf2rdf (v,d)   %将复对角阵d变为实对角阵D,在对角线上,用2×2实数块代替共轭复数对。

例1-91

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

>> [v,d]=eig(A)

v =

1.0000            -0.0191 - 0.4002i  -0.0191 + 0.4002i

0                  0 - 0.6479i        0 + 0.6479i

0             0.6479             0.6479

d =

1.0000                  0                  0

0             4.0000 + 5.0000i        0

0                  0             4.0000 - 5.0000i

>> [V,D]=cdf2rdf(v,d)

V =

1.0000   -0.0191   -0.4002

0         0   -0.6479

0    0.6479         0

D =

1.0000         0         0

0    4.0000    5.0000

0   -5.0000    4.0000

正交基

命令  orth

格式  B=orth(A)   %将矩阵A正交规范化,B的列与A的列具有相同的空间,B的列向量是正交向量,且满足:B'*B = eye(rank(A))。

例1-92  将矩阵 正交规范化。

解:

>>A=[4  0  0; 0  3  1; 0  1  3];

>>B=orth(A)

>>Q=B'*B

则显示结果为

P =

1.0000         0         0

0    0.7071   -0.7071

0    0.7071    0.7071

Q =

1.0000         0         0

0    1.0000         0

0         0    1.0000

二次型

例1-93  求一个正交变换X=PY,把二次型

化成标准形。

解:先写出二次型的实对称矩阵

在Matlab编辑器中建立M文件如下:

A=[0 1 1 -1;1 0 -1 1;1 -1 0 1;-1 1 1 0];

[P,D]=schur(A)

syms y1 y2  y3 y4

y=[y1;y2;y3;y4];

X=vpa(P,2)*y         %vpa表示可变精度计算,这里取2位精度

f=[y1 y2 y3 y4]*D*y

运行后结果显示如下:

P =

780/989      780/3691       1/2       -390/1351

780/3691     780/989       -1/2        390/1351

780/1351    -780/1351      -1/2        390/1351

0            0           1/2       1170/1351

D =

1            0            0            0

0            1            0            0

0            0           -3            0

0            0            0            1

X =

[ .79*y1+.21*y2+.50*y3-.29*y4]

[ .21*y1+.79*y2-.50*y3+.29*y4]

[ .56*y1-.56*y2-.50*y3+.29*y4]

[               .50*y3+.85*y4]

f =

y1^2+y2^2-3*y3^2+y4^2

即    f =

秩与线性相关性

矩阵和向量组的秩以及向量组的线性相关性

矩阵A的秩是矩阵A中最高阶非零子式的阶数;向量组的秩通常由该向量组构成的矩阵来计算。

函数  rank

格式  k = rank(A)       %返回矩阵A的行(或列)向量中线性无关个数

k = rank(A,tol)    %tol为给定误差

例1-94  求向量组 , , , , 的秩,并判断其线性相关性。

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

>>k=rank(A)

结果为

k =

3

由于秩为3 < 向量个数,因此向量组线性相关。

求行阶梯矩阵及向量组的基

行阶梯使用初等行变换,矩阵的初等行变换有三条:

1.交换两行  (第i、第j两行交换)

2.第i行的K倍

3.第i行的K倍加到第j行上去

通过这三条变换可以将矩阵化成行最简形,从而找出列向量组的一个最大无关组,Matlab将矩阵化成行最简形的命令是rref或rrefmovie。

函数  rref或rrefmovie

格式  R = rref(A)         %用高斯—约当消元法和行主元法求A的行最简行矩阵R

[R,jb] = rref(A)     %jb是一个向量,其含义为:r = length(jb)为A的秩;A(:, jb)为A的列向量基;jb中元素表示基向量所在的列。

[R,jb] = rref(A,tol)   %tol为指定的精度

rrefmovie(A)        %给出每一步化简的过程

例1-95  求向量组a1=(1,-2,2,3),a2=(-2,4,-1,3),a3=(-1,2,0,3),a4=(0,6,2,3),a5=(2,-6,3,4)的一个最大无关组。

>> a1=[1  -2  2  3]';

>>a2=[-2  4  -1  3]';

>>a3=[-1  2  0  3]';

>>a4=[0  6  2  3]';

>>a5=[2  -6  3  4]';

A=[a1  a2  a3  a4  a5]

A =

1    -2    -1     0     2

-2     4     2     6    -6

2    -1     0     2     3

3     3     3     3     4

>> [R,jb]=rref(A)

R =

1.0000         0    0.3333         0    1.7778

0    1.0000    0.6667         0   -0.1111

0         0         0    1.0000   -0.3333

0         0         0         0         0

jb =

1     2     4

>> A(:,jb)

ans =

1    -2     0

-2     4     6

2    -1     2

3     3     3

即:a1  a2  a4为向量组的一个基。

稀疏矩阵技术

稀疏矩阵的创建

函数  sparse

格式  S = sparse(A)   %将矩阵A转化为稀疏矩阵形式,即由A的非零元素和下标构成稀疏矩阵S。若A本身为稀疏矩阵,则返回A本身。

S = sparse(m,n)   %生成一个m×n的所有元素都是0的稀疏矩阵

S = sparse(i,j,s)   %生成一个由长度相同的向量i,j和s定义的稀疏矩阵S,其中i,j是整数向量,定义稀疏矩阵的元素位置(i,j),s是一个标量或与i,j长度相同的向量,表示在(i,j)位置上的元素。

S = sparse(i,j,s,m,n)         %生成一个m×n的稀疏矩阵,(i,j)对应位置元素为si,m = max(i)且n =max(j)。

S = sparse(i,j,s,m,n,nzmax)    %生成一个m×n的含有nzmax个非零元素的稀疏矩阵S,nzmax的值必须大于或者等于向量i和j的长度。

例1-96

>> S=sparse(1:10,1:10,1:10)

S =

(1,1)        1

(2,2)        2

(3,3)        3

(4,4)        4

(5,5)        5

(6,6)        6

(7,7)        7

(8,8)        8

(9,9)        9

(10,10)      10

>> S=sparse(1:10,1:10,5)

S =

(1,1)        5

(2,2)        5

(3,3)        5

(4,4)        5

(5,5)        5

(6,6)        5

(7,7)        5

(8,8)        5

(9,9)        5

(10,10)       5

将稀疏矩阵转化为满矩阵

函数  full

格式  A=full(S)   %S为稀疏矩阵,A为满矩阵。

例1-97

>> S=sparse(1:5,1:5,4:8)

S =

(1,1)        4

(2,2)        5

(3,3)        6

(4,4)        7

(5,5)        8

>> A=full(S)

A =

4     0     0     0     0

0     5     0     0     0

0     0     6     0     0

0     0     0     7     0

0     0     0     0     8

稀疏矩阵非零元素的索引

函数  find

格式  k = find(x)   %按行检索X中非零元素的点,若没有非零元素,将返回空矩阵。

[i,j] = find(X)    %检索X中非零元素的行标i和列标j

[i,j,v] = find(X)   %检索X中非零元素的行标i和列标j以及对应的元素值v

例1-98  上例中

>> [i,j,v]=find(S)

则显示为:

I =[ 1  2    3   4    5]’

j =[ 1  2    3   4    5]’

v =[4  5    6   7    8]’

外部数据转化为稀疏矩阵

函数  spconvert

格式  S=spconvert(D)   %D是只有3列或4列的矩阵

说明:先运用load函数把外部数据(.mat文件或.dat文件)装载于MATLAB内存空间中的变量T;T数组的行维为nnz或nnz+1,列维为3(对实数而言)或列维为4(对复数而言);T数组的每一行(以[i,j,Sre,Sim]形式)指定一个稀疏矩阵元素。

例1-99

>> D=[1  2  3;2  5  4;3  4  6;3  6  7]

D =

1     2     3

2     5     4

3     4     6

3     6     7

>> S=spconvert(D)

S =

(1,2)        3

(3,4)        6

(2,5)        4

(3,6)        7

>> D=[1 2 3 4; 2 5 4 0;3 4 6 9;3 6 7 4];

D =

1     2     3     4

2     5     4     0

3     4     6     9

3     6     7     4

>> S=spconvert(D)

S =

(1,2)      3.0000 + 4.0000i

(3,4)      6.0000 + 9.0000i

(2,5)      4.0000

(3,6)      7.0000 + 4.0000i

基本稀疏矩阵

1.带状(对角)稀疏矩阵

函数  spdiags

格式  [B,d] = spdiags(A)    %从矩阵A中提取所有非零对角元素,这些元素保存在矩阵B中,向量d表示非零元素的对角线位置。

B = spdiags(A,d)     %从A中提取由d指定的对角线元素,并存放在B中。

A = spdiags(B,d,A)    %用B中的列替换A中由d指定的对角线元素,输出稀疏矩阵。

A = spdiags(B,d,m,n)   %产生一个m×n稀疏矩阵A,其元素是B中的列元素放

在由d指定的对角线位置上。

例1-100

>>A = [11   0   13    0

0   22    0   24

0    0   33    0

41    0    0   44

0    52    0    0

0     0   63    0

0     0    0   74];

>>[B,d] = spdiags(A)

B =

41    11     0

52    22     0

63    33    13

74    44    24

d =

-3      %表示B的第1列元素在A中主对角线下方第3条对角线上

0      %表示B的第2列在A的主对角线上

2      %表示B的第3列在A的主对角线上方第2条对角线上

例1-101

>> B=[1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16];

>> d=[-2 0 1 3];

>> A=spdiags(B,d,4,4);

>> full(A)

ans =

2     7     0    16

0     6    11     0

1     0    10    15

0     5     0    14

2.单位稀疏矩阵

函数  speye

格式  S = speye(m,n)   %生成m×n的单位稀疏矩阵

S = speye(n)     %生成n×n的单位稀疏矩阵

3.稀疏均匀分布随机矩阵

函数  sprand

格式  R = sprand(S)           %生成与S具有相同稀疏结构的均匀分布随机矩阵

R = sprand(m,n,density)    %生成一个m×n的服从均匀分布的随机稀疏矩阵,非零元素的分布密度是density。

R = sprand(m,n,density,rc)   %生成一个近似的条件数为1/rc、大小为m×n的均匀分布的随机稀疏矩阵。

4.稀疏正态分布随机矩阵

函数  sprandn

格式  R = sprandn(S)            %生成与S具有相同稀疏结构的正态分布随机矩阵。

R = sprandn(m,n,density)    %生成一个m×n的服从正态分布的随机稀疏矩阵,非零元素的分布密度是density。

R = sprandn(m,n,density,rc)   %生成一个近似的条件数为1/rc、大小为m×n的均匀分布的随机稀疏矩阵。

5.稀疏对称随机矩阵

函数  sprandsym

格式  R = sprandsym(S)   %生成稀疏对称随机矩阵,其下三角和对角线与S具有相同的结构,其元素服从均值为0、方差为1的标准正态分布。

R = sprandsym(n,density)    %生成n×n的稀疏对称随机矩阵,矩阵元素服从正态分布,分布密度为density。

R = sprandsym(n,density,rc)   %生成近似条件数为1/rc的稀疏对称随机矩阵

R = sprandsym(n,density,rc,kind)   %生成一个正定矩阵,参数kind取值为kind=1表示矩阵由一正定对角矩阵经随机Jacobi旋转得到,其条件数正好为1/rc;kind=2表示矩阵为外积的换位和,其条件数近似等于1/rc;kind=3表示生成一个与矩阵S结构相同的稀疏随机矩阵,条件数近似为1/rc ,density被忽略。

稀疏矩阵的运算

1.稀疏矩阵非零元素的个数

函数  nnz

格式  n = nnz(X)    %返回矩阵X中非零元素的个数

2.稀疏矩阵的非零元素

函数  nonzeros

格式  s = nonzeros(A)    %返回矩阵A中非零元素按列顺序构成的列向量

例1-102

>>A =[ 2     7     0    16

0     6    11     0

1     0    10    15

0     5     0    14];

>> s=nonzeros(A)

结果为:

s =[ 2  1  7  6  5  11  10  16  15  14]’

3.稀疏矩阵非零元素的内存分配

函数  nzmax

格式  n = nzmax(S)    %返回非零元素分配的内存总数n

4.稀疏矩阵的存贮空间

函数  spalloc

格式  S = spalloc(m,n,nzmax)   %产生一个m×n阶只有nzmax个非零元素的稀疏矩阵,这样可以有效减少存贮空间和提高运算速度。

5.稀疏矩阵的非零元素应用

函数  spfun

格式  f = spfun('function',S)   %用S中非零元素对函数'function'求值,如果'function'不是对稀疏矩阵定义的,同样可以求值。

例1-103  4阶稀疏矩阵对角矩阵

S =

(1,1)        1

(2,2)        2

(3,3)        3

(4,4)        4

f= spfun('exp',S)    %即指数e的非零元素方幂。

结果为

f =

(1,1)       2.7183

(2,2)       7.3891

(3,3)      20.0855

(4,4)      54.5982

6.把稀疏矩阵的非零元素全换为1

函数  spones

格式  R = spones(S)    %将稀疏矩阵S中的非零元素全换为1

画稀疏矩阵非零元素的分布图形

函数  spy

格式  spy(S)   %画出稀疏矩阵S中非零元素的分布图形。S也可以是满矩阵。

spy(S,markersize)            % markersize为整数,指定点阵大小。

spy(S,'LineSpec')            %'LineSpec'指定绘图标记和颜色

spy(S,'LineSpec',markersize)   %参数与上面相同

图1-4  稀疏矩阵非零元素的分布图形

例1-104

>> load west0479

>> A=west0479;

>> spy(A,'ro',3)

结果如图1-4所示。

矩阵变换

1.列近似最小度排序

函数  colamd

格式  p = colamd(S)   %返回稀疏矩阵S的列的近似最小度排序向量p

2.列最小度排序

函数  colmmd

格式  p = colmmd(S)   %返回稀疏矩阵S的列的最小度排序向量p,按p排列后的矩阵为S(: , p)。

例1-105  比较稀疏矩阵S与排序后的矩阵S(: , p)

>> load west0479;

>> S=west0479;

>> p=colmmd(S);

>> subplot(2,2,1),spy(S)

>> subplot(2,2,2),spy(S(:,p))

>> subplot(2,2,3),spy(lu(S))

>> subplot(2,2,4),spy(lu(S(:,p)))

图1-5  稀疏矩阵的排序图

3.非零元素的列变换

函数  colperm

格式  j = colperm(S)   %返回一个稀疏矩阵S的列变换的向量。列按非0元素升序排列。有时这是LU分解前有用的变换:LU(S(:,j))。如果S是一个对称矩阵,对行和列进行排序,有利于Cholesky分解:chol(S(j,j))

4.Dulmage-Mendelsohn分解

函数  dmperm

格式  p = dmperm (A)     %返回A的行排列向量p,这样,如果A满列秩,就使得A(p,:)是具有非0对角线元素的方阵。

[p,q,r] = dmperm(A)    %A为方阵,p为行排列向量,q为列排列向量,使得A(p,q)

是上三角块形式,r为索引向量。

[p,q,r,s] = dmperm(A)   %A不是方阵,p,q,r含义与前面相同,s也是索引向量。

例1-106

>> A=[11 0 13 0;41 0 0 44;0 22 0 24;0 0 63 0]

A =

11     0    13     0

41     0     0    44

0    22     0    24

0     0    63     0

>> [p,q,r]=dmperm(A)

p =

3     2     1     4

q =

2     4     1     3

r =

1     2     3     4     5

>> A(p,q)

ans =

22    24     0     0

0    44    41     0

0     0    11    13

0     0     0    63

5.整数的随机排列

函数  randperm

格式  p = randperm (n)   %对正整数1,2,3,…,n的随机排列,可以用来创建随机变换矩阵。

例1-107

>> p=randperm(6)

p =

3     4     6     5     1     2

6.稀疏对称近似最小度排列

函数  symamd

格式  p = symamd(S)    %S为对称正定矩阵,返回排列向量p。

7.稀疏逆Cuthill-McKee排序

函数  symrcm

格式  r = symrcm (S)   %返回S的对称逆Cuthill-McKee排序r,使S的非0元素集中在主对角线附近。

8.稀疏对称最小度排列

函数  symmmd

格式  p = symmmd(S)   %返回S的对称最小度排列向量p,S为对称正定矩阵。

例1-108

>> B = bucky+4*speye(60);

>>r = symrcm(B);

>>p = symmmd(B);

>>R = B(r,r);

>>S = B(p,p);

>>subplot(2,2,1), spy(R), title('B(r,r)')

>>subplot(2,2,2), spy(S), title('B(s,s)')

>>subplot(2,2,3), spy(chol(R)), title('chol(B(r,r))')

>>subplot(2,2,4), spy(chol(S)), title('chol(B(s,s))')

图1-6  稀疏对称最小度排列图

稀疏矩阵的近似欧几里得范数和条件数

命令  矩阵A条件数的1-范数估计值

函数  condest

格式  c = condest(A)       %计算方阵A的1-范数中条件数的下界值c

[c,v] = condest(A)   %方阵A的1-范数中条件数的下界值c和向量v,使得 ,即:

norm(A*v,1) = norm(A,1)*norm(v,1)/c。

命令  2-范数估计值

函数  normest

格式  nrm = normest(S)          %返回矩阵S的2-范数的估计值,相对误差为10-6

nrm = normest(S,tol)       %tol为指定的相对误差,而不用默认误差10-6

[nrm,count] = normest(…)   %count为给出的计算范数迭代的次数

其条件数的计算与前面1.2.12相同。

稀疏矩阵的分解

命令  不完全的LU分解

函数  luinc

格式  [L,U] = luinc(X,'0')       %X为稀疏方阵;L为下三角矩阵的置换形式;U为上三角矩阵;'0'是一种分解标准。

[L,U,P] = luinc(X,'0')      %L为下三角阵,其主对角线元素为1;U为上三角阵,p为单位矩阵的置换形式。

[L,U] = luinc(X,options)   %options取值为:droptol表示指定的舍入误差;milu表示改变分解以便于从上三角分解因子中抽取被去掉的列元素。ugiag为1表示用droptol值代替上三角因子中的对角线上的零元素,默认值为0。thresh为中心临界值。

[L,U] = luinc(X,droptol)    %droptol表示指定不完全分解的舍入误差

[L,U,P] = luinc(X,options)

[L,U,P] = luinc(X,droptol)

例1-109

>> S=[11 0 13 0;41 0 0 44;0 22 0 24;0 0 63 0]

S =

11     0    13     0

41     0     0    44

0    22     0    24

0     0    63     0

>> S=sparse(S)

S =

(1,1)       11

(2,1)       41

(3,2)       22

(1,3)       13

(4,3)       63

(2,4)       44

(3,4)       24

>> luinc(S,'0')

ans =

(1,1)      41.0000

(4,1)       0.2683

(2,2)      22.0000

(3,3)      63.0000

(4,3)       0.2063

(1,4)      44.0000

(2,4)      24.0000

>> [L,U,p]=luinc(S,'0')

L =

(1,1)       1.0000

(4,1)       0.2683

(2,2)       1.0000

(3,3)       1.0000

(4,3)       0.2063

(4,4)       1.0000

U =

(1,1)       41

(2,2)       22

(3,3)       63

(1,4)       44

(2,4)       24

p =

(4,1)        1

(1,2)        1

(2,3)        1

(3,4)        1

命令  稀疏矩阵的不完全Cholesky分解

函数  cholinc

格式  R = (X,droptol)      %稀疏矩阵X的不完全Cholesky分解,droptol为指定误差。

R = cholinc(X,options)   %options取值为:droptol表示舍入误差;michol表示如果michol=1,则从对角线上抽取出被去掉的元素。rdiag表示用droptol值代替上三角分解因子中的对角线上的零元素。

R = cholinc(X,'0')       %'0'是一种分解标准

[R,p] = cholinc(X,'0')    %不产生任何出错信息,如果R存在,则p=0;如果R不存在,则p为正整数。

R = cholinc(X,'inf')      %进行Cholesky无穷分解

稀疏矩阵的特征值分解

函数  eigs

格式  d = eigs(A)          %求稀疏矩阵A的6个最大特征值d,d以向量形式存放。

d = eigs(A,B)       %求稀疏矩阵的广义特征值问题。满足AV=BVD,其中D为特征值对角阵,V为特征向量矩阵,B必须是对称正定阵或Hermitian正定阵。

d = eigs(A,k)        %返回k个最大特征值

d = eigs(A,B,k)      %返回k个最大特征值

d = eigs(A,k,sigma)   %sigma取值:'lm' 表示最大数量的特征值;'sm' 最小数量特征值;对实对称问题:'la'表示最大特征值;'sa'为最小特征值;对非对称和复数问题:'lr' 表示最大实部;'sr' 表示最小实部;'li' 表示最大虚部;'si'表示最小虚部。

d = eigs(A,B,k,sigma)         %同上

d = eigs(A,k,sigma,options)     % options为指定参数:参见eigs帮助文件。

d = eigs(A,B,k,sigma,options)   %同上。以下的参数k、sigma、options相同。

d = eigs(Afun,n)            %用函数Afun代替A,n为A的阶数,D为特征值。

d = eigs(Afun,n,B)

d = eigs(Afun,n,k)

d = eigs(Afun,n,B,k)

d = eigs(Afun,n,k,sigma)

d = eigs(Afun,n,B,k,sigma)

d = eigs(Afun,n,k,sigma,options)

d = eigs(Afun,n,B,k,sigma,options)

[V,D] = eigs(A,…)   %D为6个最大特征值对角阵,V的列向量为对应特征向量。

[V,D] = eigs(Afun,n,…)

[V,D,flag] = eigs(A,…)   %flag表示特征值的收敛性,若flag=0,则所有特征值都收敛,否则,不是所有都收敛。

[V,D,flag] = eigs(Afun,n,…)

转载于:https://www.cnblogs.com/hyb221512/p/9303574.html

矩阵方程求解内置函数相关推荐

  1. python函数type的用意_Python内置函数Type()函数一个有趣的用法

    Python内置函数Type()函数一个有趣的用法 今天在网上看到type的一段代码 ,然后查了一下文档,才知道type还有三个参数的用法. 以前只是知道type可以检测对象类型.然后发现了一个有趣的 ...

  2. 不借助 matlab 内置函数,生撸均值方差模型

    不借助 matlab 内置函数,生撸均值方差模型 前言 我在之前的一篇文章中介绍了,如何使用 matlab 自带的函数(对象)portfolio,实现均值方差模型.matlab 内置的函数自然实用.但 ...

  3. Python3.9全部73个内置函数说明

    以下是Python3.9全部73个内置函数的说明: 内置函数 说明 示例 1 abs(x) 求x的绝对值 abs(-3.4) == 3.4 2 all(x) 判断序列x中的每个元素是否都是True,如 ...

  4. opencv 图像操作,常用 OpenCV 内置函数

    OpenCV 如何对图像的像素进行操作 对图像的像素进行操作,我们可以实现空间增强,反色,大部分图像特效系列都是基于像素操作等目的.先来看一下内存空间中图像矩阵,也就是Mat的矩阵数值部分是怎么存储的 ...

  5. Python基本内置函数及常用库汇总(加用法)

    在初学Python时的基础内置函数汇总 微信关注公众号:夜寒信息 致力于为每一位用户免费提供更优质技术帮助与资源供给,感谢支持!   最近暑假想学习Python,为了让自己未来的就业多一分竞争力,也为 ...

  6. MATLAB 求函数极值的内置函数一览表(实则优化算法函数汇总)

    MATLAB 求函数极值的内置函数一览表 收集了几乎所有的 MATLAB 内置的优化函数,可收藏,需要时查阅. 文章目录 MATLAB 求函数极值的内置函数一览表 简介 概览 求函数极值(或最大值最小 ...

  7. Python 常用内置函数map、zip、filter、reduce、enumerate

    Python 中有许多非常实用的内置函数,通过这些函数我们可以方便的实现某些功能,下面就列举一些常用的内置函数. 1. map() 函数 map() 可以根据提供的函数对指定序列做映射,它接受一个函数 ...

  8. 2021年大数据Hive(五):Hive的内置函数(数学、字符串、日期、条件、转换、行转列)

    全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 Hive的内置函数 一.数学函数 1. 取整函数: round ...

  9. python3 内置函数map 返回的迭代器转为列表

    python3 内置函数map 返回的是迭代器,python2 返回的才是列表, 在python3中想要使用需要把迭代器在转换成列表 list_a = [1, 2, 3, 4, 5]def add(n ...

最新文章

  1. 11个问题助你彻底搞懂工业互联网
  2. jfinal上传图片,生成日期文件夹,图片重命名
  3. chapter3.1封装和解构
  4. 高度为k的二叉树个数(递推分析)
  5. Codeforces 786B Legacy (线段树优化建图)
  6. WPF CanExecuteChanged
  7. 计算机网络class2(标准化工作及相关组织)
  8. zynq平台交叉编译器的安装
  9. ORCU浅析之安装和作用
  10. docker+阿里云镜像容器进行环境的备份与获取
  11. 软考信息安全工程师教程第二版
  12. javascript查看详情与收起详情
  13. iFunk翼S苏宁京东热卖进行中
  14. 【论文阅读】【综述】A survey of deep learning techniques for autonomous driving
  15. 中文版 Ubuntu主目录里的桌面等中文目录名称改成英文
  16. amazon创建sns_我们如何在36小时内重新创建Amazon Go
  17. 服务器日志文件已被清除恢复,Linux服务器入侵后日志文件删除/恢复方法
  18. qt中二维数组的使用_文件数据通过qt将二维数组中的像素点显示成一张图片
  19. Visual Studio 2019背景美化(背景透明化+自定义背景图片)
  20. Kamiya艾美捷抗胸腺嘧啶二聚体单抗(环丁烷嘧啶二聚体CPD)说明书

热门文章

  1. Vue + Element 实现导入导出Excel
  2. 查网站百度权重的工具
  3. UDK官方视频教程带中文字幕虚幻引擎UDK(16章全) ㍿
  4. 2018软工实践_团队作业_1
  5. 创客教育中的空间设计实物原理
  6. (he)的平方等于she
  7. Mysql table_definition_cache
  8. linux内核顶层Makefile详解
  9. alv edit and save all
  10. 变量的作用域和生命周期