(1)LU 分解法程序:function x=solvebyLU(A,b)
% 该函数利用LU分解法求线性方程组Ax=b的解
flag=isexist(A,b); %调用第一小节中的isexist函数判断方程组解的情况if flag==0
disp('该方程组无解!');
x=[];
return;
else
r=rank(A);
[m,n]=size(A);
[L,U,P]=lu(A);
y(1)=b(1);
if m>1
for i=2:m
y(i)=b(i)-L(i,1:i-1)*y(1:i-1)';
end
end
y=y'; % 解Ux=y得原方程组的一个特解
x0(r)=y(r)/U(r,r);
if r>1
for i=r-1:-1:1
x0(i)=(y(i)-U(i,i+1:r)*x0(i+1:r)')/U(i,i);
end
end
x0=x0';
if flag==1 %若方程组有唯一解
x=x0;
return;
else %若方程组有无穷多解
format rat;
Z=null(A,'r'); %求出对应齐次方程组的基础解系
[mZ,nZ]=size(Z);
x0(r+1:n)=0;
for i=1:nZ
t=sym(char([107 48+i]));
k(i)=t; %取k=[k1,k2...,];
end
x=x0;
for i=1:nZ
x=x+k(i)*Z(:,i); %将方程组的通解表示为特解加对应齐次通解形式
end
end
end
(2)矩阵的QR分解法(c语言):
void QR(double a[N][N],double q[N][N],double r1[N][N],int n) /*QR分解*/ {
int i,j,k,r,m;
double temp,sum,dr,cr,hr;
double ur[N],pr[N],wr[N];
double q1[N][N],emp[N][N];
for(i=1;i for(j=1;j { emp[i][j]=a[i][j]; }; for(i=1;i for(j=1;j { if(i==j)q[i][j]=1; else q[i][j]=0; }; for(r=1;r { temp=0; for(k=r+1;k temp+=fabs(a[k][r]); if(temp>=ZERO) { sum=0; for(k=r;k sum+=a[k][r]*a[k][r]; dr=sqrt(sum); if(a[r][r]>ZERO)m=-1; else m=1; cr=m*dr; hr=cr*(cr-a[r][r]); for(i=1;i { if(i if(i==r) ur[i]=a[r][r]-cr; if(i>r) ur[i]=a[i][r]; }; for(i=1;i { for(j=1;j sum+=q[i][j]*ur[j]; wr[i]=sum; }; for(i=1;i for(j=1;j { q1[i][j]=q[i][j]-wr[i]*ur[j]/hr; }; for(i=1;i for(j=1;j { q[i][j]=q1[i][j]; }; for(i=1;i { sum=0; for(j=1;j sum+=a[j][i]*ur[j]; pr[i]=sum/hr; }; for(i=1;i for(j=1;j { a[i][j]=a[i][j]-ur[i]*pr[j]; }; }; }; for(i=1;i for(j=1;j { if(fabs(a[i][j]) }; for(i=1;i for(j=1;j { r1[i][j]=a[i][j]; }; for(i=1;i for(j=1;j { a[i][j]=emp[i][j]; } (3)对称正定矩阵的Cholesky分解: function [X]=m_chol(A,b) [N,N]=size(A); X=zeros(N,1); Y=zeros(N,1); for i=1:N A(i,i)=sqrt(A(i,i)-A(i,1:i-1)*A(i,1:i-1)'); if A(i,i)==0 'A is singular. no unique solution' break; end; for j=i+1:N A(j,i)=(A(j,i)-A(j,1:i-1)*A(i,1:i-1)')/A(i,i); end end A b %前代法 for j=1:N Y(j)=(b(j)-A(j,1:j-1)*Y(1:j-1))/A(j,j); end Y; A=A' for k=N:-1:1 X(k)=(Y(k)-A(k,k+1:N)*X(k+1:N))/A(k,k); end matlab矩阵操作大全 1.1.1数值矩阵的生成 1.实数值矩阵输入 MATLAB的强大功能之一体现在能直接处理向量或矩阵。当然首要任务是输入待处理的向量或矩阵。 不管是任何矩阵(向量),我们可以直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于一方括号([])内;当矩阵是多维(三维以上),且方括号内的元素是维数较低的矩阵时,会有多 重的方括号。如: >> Time = [11 12 1 2 3 4 5 6 7 8 9 10] Time = 11 12 1 2 3 4 5 6 7 8 9 10 >> X_Data = [2.32 3.43 ; 4.37 5.98] X_Data = 2.43 3.43 4.37 5.98 >> vect_a = [1 2 3 4 5] vect_a = 12~ 3 4 5 >> Matrix_B = [1 2 3 ; >> 2 3 4 ; 3 4 5] Matrix_B = 1 2 3 2 3 4 3 4 5 >> Null_M = [ ] %生成一个空矩阵 2 .复数矩阵输入 复数矩阵有两种生成方式: 第一种方式 1/ 13 例1-1 >> a="2".7。b=13/25 >> C 二[1,2*a+i*b,b*sqrt(a) 5.4000 + 0.5200i 0.8544 5.3000 4.5000 第2种方式 例1-2 >> R=[1 2 3 。 4 5 6], M=[11 12 13 。 14 15 16] R = I 2 3 4 5 6 M = II 12 13 14 15 16 >> CN="R"+i*M CN = 1.0000 +11.0000i 2.0000 +12.0000i 3.0000 +13.0000i 4.0000 +14.0000i 5.0000 +15.0000i 6.0000 +16.0000i si n(pi/4),a+5*b,3.5+1] C= 1.0000 0.7071 一、矩阵的表示 在MATLAB中创建矩阵有以下规则: a、矩阵元素必须在”[ ]”内; b、矩阵的同行元素之间用空格(或”,”)隔开; c、矩阵的行与行之间用”;”(或回车符)隔开; d、矩阵的元素可以是数值、变量、表达式或函数; e、矩阵的尺寸不必预先定义。 二,矩阵的创建: 1、直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。建立向量的时候可以利用冒号表达式,冒号表达式可以产生一个行向量,一般格式是:e1:e2:e3,其中e1为初始值,e2为步长,e3为终止值。还可以用linspace函数产生行向量,其调用格式为:linspace(a,b,n) ,其中a和b是生成向量的第一个和最后一个元素,n是元素总数。 2、利用MATLAB函数创建矩阵 基本矩阵函数如下: (1) ones()函数:产生全为1的矩阵,ones(n):产生n*n维的全1矩阵,ones(m,n):产生m*n 维的全1矩阵; (2) zeros()函数:产生全为0的矩阵; (3) rand()函数:产生在(0,1)区间均匀分布的随机阵; (4) eye()函数:产生单位阵; (5) randn()函数:产生均值为0,方差为1的标准正态分布随机矩阵。 3、利用文件建立矩阵 当矩阵尺寸较大或为经常使用的数据矩阵,则可以将此矩阵保存为文件,在需要时直接将文件利用load命令调入工作环境中使用即可。同时可以利用命令reshape对调入的矩阵进行重排。reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n的二维矩阵。 二、矩阵的简单操作 1.获取矩阵元素 可以通过下标(行列索引)引用矩阵的元素,如Matrix(m,n)。 也可以采用矩阵元素的序号来引用矩阵元素。 矩阵元素的序号就是相应元素在内存中的排列顺序。 在MATLAB中,矩阵元素按列存储。 序号(Index)与下标(Subscript )是一一对应的,以m*n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。 其相互转换关系也可利用sub2ind和ind2sub函数求得。 2.矩阵拆分 科学计算与MATLAB语言 教学内容 第1讲介绍MATLAB概述与运算基础第2讲介绍MATLAB程序设计 第3讲MATLAB文件操作 第4讲绘图形功能 第5讲线形代数中的数值计算问题 第6讲数据处理方法与多项式 第7讲MATLAB符号计算 第8讲MATLAB的图形用户界面设计 第一讲MATLAB概述与运算基础MATLAB语言是一种广泛应用于工程计算及数值分析领域的新型高级语言,自1984年由美国MathWorks公司推向市场以来,历经十多年的发展与竞争,现已成为国际公认的最优秀的工程应用开发环境。MATLAB功能强大、简单易学、编程效率高,深受广大科技工作者的欢迎。 在欧美各高等院校,MATLAB已经成为线性代数、自动控制理论、数字信号处理、时间序列分析、动态系统仿真、图像处理等课程的基本教学工具,成为大学生、硕士生以及博士生必须掌握的基本技能。 MATLAB: 是英文MATrix LABorotory(矩阵实验室) 的缩写。 一. MATLAB特点: 1. 数值计算和符号计算功能 MATLAB的数值计算功能包括:矩阵运算、多项式和有 理分式运算、数据统计分析、数值积分、优化处理等。符 号计算将得到问题的解析解。 2.MATLAB语言 MATLAB除了命令行的交互式操作以外,还可以程序方式 工作。使用MATLAB可以很容易地实现C或FORTRAN语言的几乎全部功能,包括Windows图形用户界面的设计。 3.图形功能 MATLAB提供了两个层次的图形命令:一种是对图形句柄进行的低级图形命令,另一种是建立在低级图形命令之上的高级图形命令。利用MATLAB的高级图形命令可以轻而易举地绘制二维、三维乃至四维图形,并可进行图形和坐标的标识、视角和光照设计、色彩精细控制等等。 (1) LU分解 A是非奇异的,LU分解总是可以进行的。 [L,U]=lu(X):产生一个上三角阵U和一个变换形式的下三角阵L(行交换),矩阵X必须是方阵。 [L,U,P]=lu(X):产生一个上三角阵U和一个下三角阵L以及一个置换矩阵P,使之满足PX=LU。矩阵X必须是方阵。 实现LU分解后,线性方程组Ax=b的解x=U\(L\b)或x=U\(L\Pb),这样可以大大提高运算速度。 例7-2 用LU分解求解例7-1中的线性方程组。 命令如下: A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; b=[13,-9,6,0]'; [L,U]=lu(A); x=U\(L\b) 或采用LU分解的第2种格式,命令如下: [L,U ,P]=lu(A); x=U\(L\P*b) (2) QR分解 对矩阵X进行QR分解,就是把X分解为一个正交矩阵Q和一个上三角矩阵R的乘积形式。QR分解只能对方阵进行。MATLAB的函数qr可用于对矩阵进 行QR分解,其调用格式为: [Q,R]=qr(X):产生一个一个正交矩阵Q和一个上三角矩阵R,使之满足X=QR。[Q,R,E]=qr(X):产生一个一个正交矩阵Q、一个上三角矩阵R以及一个置换矩阵E,使之满足XE=QR。 实现QR分解后,线性方程组Ax=b的解x=R\(Q\b)或x=E(R\(Q\b))。 例7-3 用QR分解求解例7-1中的线性方程组。 命令如下: A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; b=[13,-9,6,0]'; [Q,R]=qr(A); x=R\(Q\b) 或采用QR分解的第2种格式,命令如下: [Q,R,E]=qr(A); x=E*(R\(Q\b)) (3) Cholesky分解 1.1 矩阵的表示 1.2 矩阵运算 1.2.14 特殊运算 1.矩阵对角线元素的抽取 函数diag 格式X = diag(v,k) %以向量v的元素作为矩阵X的第k条对角线元素,当k=0时,v为X的主对角线;当k>0时,v为上方第k条对角线;当k<0时,v为下方第k条对角线。 X = diag(v) %以v为主对角线元素,其余元素为0构成X。 v = diag(X,k) %抽取X的第k条对角线元素构成向量v。k=0:抽取主对角线元素;k>0:抽取上方第k条对角线元素;k<0抽取下方第k条对角线元素。 v = diag(X) %抽取主对角线元素构成向量v。 2.上三角阵和下三角阵的抽取 函数tril %取下三角部分 格式L = tril(X) %抽取X的主对角线的下三角部分构成矩阵L L = tril(X,k) %抽取X的第k条对角线的下三角部分;k=0为主对角线;k>0为主对角线以上;k<0为主对角线以下。函数triu %取上三角部分 格式U = triu(X) %抽取X的主对角线的上三角部分构成矩阵U U = triu(X,k) %抽取X的第k条对角线的上三角部分;k=0为主对角线;k>0为主对角线以上;k<0为主对角线以下。3.矩阵的变维 矩阵的变维有两种方法,即用“:”和函数“reshape”,前者主要针对2个已知维数矩阵之间的变维操作;而后者是对于一个矩阵的操作。 (1)“:”变维 (2)Reshape函数变维 格式 B = reshape(A,m,n) %返回以矩阵A的元素构成的m×n矩阵B B = reshape(A,m,n,p,…) %将矩阵A变维为m×n×p×… B = reshape(A,[m n p…]) %同上 B = reshape(A,siz) %由siz决定变维的大小,元素个数与A中元素个数 相同。 (5)复制和平铺矩阵 函数repmat 格式 B = repmat(A,m,n) %将矩阵A复制m×n块,即B由m×n块A平铺而成。 B = repmat(A,[m n]) %与上面一致 B = repmat(A,[m n p…]) %B由m×n×p×…个A块平铺而成 repmat(A,m,n) %当A是一个数a时,该命令产生一个全由a组成的m×n矩阵。 1.3 矩阵分解 1.3.1 Cholesky分解 函数chol 格式R = chol(X) %如果X为n阶对称正定矩阵,则存在一个实的非奇异上三角阵R,满足R'*R = X;若X非正定,则产生错误信息。 [R,p] = chol(X) %不产生任何错误信息,若X为正定阵,则p=0,R与上相同;若X非正定,则p为正整数,R是有序的上三角阵。 1.3.2 LU分解 Matlab 中的矩阵分解函数 矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个矩阵的乘积。常见的矩阵分解有LU分解(三角分解)、QR分解(正交变换)、Cholesky分解,以及Schur分解、Hessenberg分解、奇异分解等。 (1) LU分解(三角分解)lu函数 [L,U]=lu(X):产生一个上三角阵U和一个变换形式的下三角阵L(行交换),使之满足X=LU。注意,这里的矩阵X必须是方阵。 实现LU分解后,线性方程组Ax=b的解x=U\(L\b)或x=U\(L\Pb),这样可以大大提高运算速度。 [L,U,P]=lu(X):产生一个上三角阵U和一个下三角阵L以及一个置换矩阵P,使之满足PX=LU。当然矩阵X同样必须是方阵。(设P 是一个m×n的(0,1) 矩阵,如m≤n且P*P′=E,则称P为一个m×n的置换矩阵。) 例1用LU分解求解例1中的线性方程组。 命令如下: A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; b=[13,-9,6,0]'; x=U\(L\b) 或采用LU分解的第2种格式,命令如下: [L,U ,P]=lu(A); x=U\(L\P*b) (2) QR分解(正交变换) 对矩阵X进行QR分解,就是把X分解为一个正交矩阵Q和一个上三角矩阵R的乘积形式。QR分解只能对方阵进行。MATLAB的函数qr可用于对矩阵进行QR分解,其调用格式为: [Q,R]=qr(X):产生一个一个正交矩阵Q和一个上三角矩阵R,使之满足X=QR。 [Q,R,E]=qr(X):产生一个一个正交矩阵Q、一个上三角矩阵R以及一个置换矩阵E,使之满足XE=QR。 实现QR分解后,线性方程组Ax=b的解x=R\(Q\b)或x=E(R\(Q\b))。例2用QR分解求解例1中的线性方程组。 命令如下: A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; b=[13,-9,6,0]'; 1 4—6 矩阵分解的Matlab 命令 2 (1)矩阵的LU 分解 (2)矩阵的QR 分解(3 )矩阵的Cholesky 分解(4) 矩阵的奇异值分解(5)矩阵的特征值分解(6) 矩阵的Schur 分解(7) 矩阵的Jordan 标准型分解 3(1)矩阵的LU 分解 在Matlab 中用函数lu 来实现矩阵的LU 分解,其命令格式为:[L, U]=lu(X) 说明:U 矩阵为上三角矩阵,满足X=L*U. 4 [L,U,P]=lu(X) 说明:返回的P 矩阵是置换矩阵,矩阵U 是上三角矩阵,矩阵L 满秩矩阵,满足L*U=P*X. 5例4.1 >>a=[1,2,4;2,-1,5;-1,10,4];>> [b,c,p]=lu(a)运行结果:b = 1.0000 0 0-0.5000 1.0000 00.5000 0.2632 1.0000 6 c = 2.0000 -1.0000 5.00000 9.5000 6.50000 0 -0.2105p =0 1 00 0 11 0 0 7 (2)矩阵的QR 分解 在Matlab 中,矩阵的QR 分解可由函数qr 来实现,其常用的调用格式如下:①[B,C]=qr(A) 说明:返回的C 矩阵为上三角矩阵,矩阵B 为满秩矩阵。 [Q,R,E]=qr(A) 说明:返回的矩阵E 是置换矩阵,矩阵R 是上三角矩阵,矩阵Q 是满秩矩阵,上述矩阵满足关系A*E=Q*R. 8 例4.2 >> a=[1,2,4;2,-1,5;-1,10,4];>> [b,c,e]=qr(a)运行结果:b = -0.1952 -0.5068 -0.83970.0976 -0.8619 0.4976-0.9759 0.0152 0.2177 9 c = -10.2470 -4.1964 0.9759 0 -6.2762 -2.24580 0 -0.0622e =0 0 11 0 00 1 0 10 (3 )矩阵的Cholesky 分解 在Matlab 中用函数chol 对矩阵进行Cholesky 分解,函数chol 的调用格式为:1.R=chol(X) 说明:矩阵X 必须是正定矩阵,否则会返回错误信息,返回的矩阵R 是上三角矩阵。2.[R,p]=chol(X) 说明:此调用格式不管矩阵X 是否正定,都不会返回错误信息。如果矩阵X 正定,则返回上三角矩阵R, p 为零;如果矩阵X 非正定,则返回的矩阵R 也是上三角矩阵,但p 为正数。 11例4.4 >> a=[3,-1,1;-1,5,2;1,2,4];>> b=chol(a)运行结果:b = 1.7321 -0.5774 0.57740 2.1602 1.08010 0 1.5811 12 (4) 矩阵的奇异值分解 在Matlab 中,矩阵的奇异值分解则由函数svd 来实现,其调用格式为:[b,c,d]=svd(A) 说明:返回的矩阵b 为左奇异矩阵,矩阵d 为右奇异矩阵,矩阵c 为奇异值矩阵。例4.5 >> a=[1,2,4;2,-1,5;-1,10,4];>> [b,c,d]=svd(a) (1)LU 分解法程序:function x=solvebyLU(A,b) % 该函数利用LU分解法求线性方程组Ax=b的解 flag=isexist(A,b); %调用第一小节中的isexist函数判断方程组解的情况if flag==0 disp('该方程组无解!'); x=[]; return; else r=rank(A); [m,n]=size(A); [L,U,P]=lu(A); y(1)=b(1); if m>1 for i=2:m y(i)=b(i)-L(i,1:i-1)*y(1:i-1)'; end end y=y'; % 解Ux=y得原方程组的一个特解 x0(r)=y(r)/U(r,r); if r>1 for i=r-1:-1:1 x0(i)=(y(i)-U(i,i+1:r)*x0(i+1:r)')/U(i,i); end end x0=x0'; if flag==1 %若方程组有唯一解 x=x0; return; else %若方程组有无穷多解 format rat; Z=null(A,'r'); %求出对应齐次方程组的基础解系 [mZ,nZ]=size(Z); x0(r+1:n)=0; for i=1:nZ t=sym(char([107 48+i])); k(i)=t; %取k=[k1,k2...,]; end x=x0; for i=1:nZ x=x+k(i)*Z(:,i); %将方程组的通解表示为特解加对应齐次通解形式 end end end (2)矩阵的QR分解法(c语言): void QR(double a[N][N],double q[N][N],double r1[N][N],int n) /*QR分解*/ { int i,j,k,r,m; double temp,sum,dr,cr,hr; double ur[N],pr[N],wr[N]; double q1[N][N],emp[N][N]; for(i=1;i matlab矩阵的表示和简单操作 一、矩阵的表示 在MATLAB中创建矩阵有以下规则: a、矩阵元素必须在”[ ]”内; b、矩阵的同行元素之间用空格(或”,”)隔开; c、矩阵的行与行之间用”;”(或回车符)隔开; d、矩阵的元素可以是数值、变量、表达式或函数; e、矩阵的尺寸不必预先定义。 二,矩阵的创建: 1、直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素,输入的方法按照上面的规则。建立向量的时候可以利用冒号表达式,冒号表达式可以产生一个行向量,一般格式是:e1:e2:e3,其中e1为初始值,e2为步长,e3为终止值。还可以用linspace函数产生行向量,其调用格式为:linspace(a,b,n) ,其中a和b是生成向量的第一个和最后一个元素,n是元素总数。 2、利用MATLAB函数创建矩阵 基本矩阵函数如下: (1) ones()函数:产生全为1的矩阵,ones(n):产生n*n维的全1矩阵,ones(m,n):产生m*n维的全1矩阵; (2) zeros()函数:产生全为0的矩阵; (3) rand()函数:产生在(0,1)区间均匀分布的随机阵; (4) eye()函数:产生单位阵; (5) randn()函数:产生均值为0,方差为1的标准正态分布随机矩阵。 3、利用文件建立矩阵 当矩阵尺寸较大或为经常使用的数据矩阵,则可以将此矩阵保存为文件,在需要时直接将文件利用load命令调入工作环境中使用即可。同时可以利用命令reshape对调入的矩阵进行重排。reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n 的二维矩阵。 二、矩阵的简单操作 1.获取矩阵元素 可以通过下标(行列索引)引用矩阵的元素,如Matrix(m,n)。 也可以采用矩阵元素的序号来引用矩阵元素。 矩阵元素的序号就是相应元素在内存中的排列顺序。 在MATLAB中,矩阵元素按列存储。 序号(Index)与下标(Subscript )是一一对应的,以m*n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。 其相互转换关系也可利用sub2ind和ind2sub函数求得。 MATLAB 矩阵及其运算函数表 函数名函数功能 abs( ) 绝对值、负数的模、字符串的ASCII码值都可用来求字符串矩阵所 对应的ASCII码数值矩阵double( ) char( ) 可以把ASCII码数值矩阵转换为字符串矩阵 fix( ) 向零方向取整 floor( ) 不大于自变量的最大整数 ceil( ) 不小于自变量的最小整数 round( ) 四舍五入到最邻近的整数 rem(x,y) 求余函数 mod(x,y) % exp( ) 指数函数 [ ] 空操作符 format 格式符设置或改变数据输出格式 (其中格式符决定数据的输出格式) e1:e2:e3 冒号表达式可以产生一个行向量 (其中e1为初始值,e2为步长,e3为终止值) linspace(a,b,n) 产生一个行向量 (其中a和b是生成向量的第一个和最后一个元素,n是元素总数) [注:linspace(a,b,n)与a:(b-a)/(n-1):b等价] A(:,j) 表示取A矩阵的第j列全部元素 A(i,:) 表示A矩阵第i行的全部元素 A(i,j) 表示取A矩阵第i行、第j列的元素 A(i:i+m,:) 表示取A矩阵第i~i+m行的全部元素 A(:,k:k+m) 表示取A矩阵第k~k+m列的全部元素 A(i:i+m,k:k+m) 表示取A矩阵第i~i+m行内,并在第k~k+m列中的所有元素 zeros 产生全0矩阵(零矩阵) ones 产生全1矩阵(幺矩阵) eye 产生单位矩阵 rand 产生0~1间均匀分布的随机矩阵 randn 产生均值为0,方差为1的标准正态分布随机矩阵 zeros(size(A)) 建立一个与矩阵A同样大小的零矩阵 reshape(A,m,n) 在矩阵总元素保持不变的前提下,将矩阵A重新排成m×n的二维矩阵magic(n) 生成一个n阶魔方矩阵(其每行、每列及两条对角线上的元素和都相等) vander(V) 生成以向量V为基础向量的范得蒙矩阵(最后一列全为1,倒数第二列为一个指定的向量,其他各列是其后列与倒数第二列的点乘积) hilb(n) 生成希尔伯特矩阵 invhilb(n) 求n阶的希尔伯特矩阵的逆矩阵 (用一般方法求逆会因原始数据的微小扰动而产生不可靠的计算结果) toeplitz(x,y) 生成一个以x为第1列,y为第1行的托普利兹矩阵(除第1行第1列外, LU 分解原理 定理:设A C n n ,如果 A 的顺序主子式 A 11 ≠0, |a 11 a 12 a 21 a 22|≠0,…,|a 11a 12a 21a 22…a 12…a 22??a n?11a n?12? ?a n?1n?1 |≠0 则存在唯一的主对角线上元素全为 1 的下三角矩阵L 与唯一的上三角矩阵 U ,使得 A =LU . 证明:对矩阵A 的阶数使用数学归纳法. 显然,当 n=1 时,A 11=1 ?A 11 就是唯一的分解式。现假定对 n-1 阶矩阵,定理的结论成立。对 A 进行分块 A =( A A ?A A A A A A A AA ) 其中A A ,A A ∈A A ?A .由于 n-1 阶矩阵 A A ?A 的 k 阶顺序主子式就是 A 的 k 阶主子式(k=1,2,…,n-2),故它们都不为零.从而由归纳法假设,A A ?A 有唯一的 LU 分解 A A ?A =A A ?A A A ?A 其中A A ?A 的主对角线上的元素都1.由于 |A A ?A |=| A 11A 12A 21A 22 …A 12…A 22 ? ? A A ?11A A ?12 ? ? A A ?1A ?1 |=|A A ?A A A ?A |≠0 所以A A ?A 及A A ?A 是n-1阶可逆矩阵 先假设已有 A =LU ,其中 L =( A A ?A 0A A 1 ), U= ( A A ?A A A A A AA ) A ,A ∈A A ?A 是待定向量。作乘积 AA = (A A ?A A A ?A A A ?A A A A A A ?A A AA +A A A ) =(A A ?A A A A A A A AA )=A 则A,A 必须满足 A A ?A A =A A ,A A A A ?A =A A A ,A AA +A A A =A AA MATLAB中矩阵常用的操作函数 1. zeos : 生成零矩阵 2. ones : 生成1矩阵 3. eye : 生成单位矩阵 4. rand : 返回[0,1]之间的平均分布的随机数(矩阵) 5. randn : 返回标准正态分布的随机数(矩阵) 6. mean : 返回列的均值 7. std : 返回列的方差 8. magic : 返回魔方矩阵,即行、列,对角线元素之和都相等的矩阵 9. hilb : 返回Hilbert矩阵,即H(i,j)=1/(i+j-1) 的矩阵 10. toeplitz : 返回toeplitz矩阵 11. 常用运算: 和:A+B 积:A*B 转置:A',注意:如果A是复矩阵,则A'是共轭转置 行列式:det(A) 逆:inv(A) 内积:dot(a, b) 秩:rank(A) 迹:trace(A) 12. 线性方程组:Ax=b,可以用左除运算:x=A\b;也可以用逆运算:x=inv(A)*b,但效率不如左除运算。 13. Jordan 标准型:jordan(A),返回A的Jordan标准型。或者用两个参数接收结果:[V, J] = jordan(A),那么J是A的Jordan标准型,V是用到的相似变换矩阵,即A=V*J*inv(V)。 14. SVD分解,即奇异值分解:[U, S, V] = svd(A),A=USV'。 15. 特征值:eig(A)返回A的所有特征值。如果用两个参数接收结果:[E, F] = eig(A),那么E 的列是A的特征向量,F是A的特征值。 16. 范数: 1范数:norm(A, 1) 2范数:norm(A, 2) 无穷范数:norm(A, inf) Frobenius范数(也叫Euclid范数,简称F-范数或者E-范数),即A全部元素平方和的平方根:norm(A, 'fro') 17. 矩阵函数:通用方法是funm(A, @fun),即计算矩阵A的fun函数。 对矩阵中元素的操作:删除某一行: clc clear all a=[1 2 3;4 5 6] a(:,3)=[]; a 结果: a = 1 2 3 4 5 6 a = 1 2 4 5 >> 添加一行元素:clc a=[1 2 3;4 5 6] a(3,:)=[7 8 9] 结果: a = 1 2 3 4 5 6 a = 1 2 3 4 5 6 7 8 9 >> clc clear all a=ones(2,3) b=zeros(1,2) c=eye(2) d=diag(1:3) e=diag([1 2 3;4 5 6]) f=rand(2,3) g=randn(2,3) g1=tril(g) g2=triu(g) 结果: a = 1 1 1 1 1 1 b = 0 0 c = 1 0 0 1 d = 1 0 0 0 2 0 0 0 3 e = 1 5 f = 0.8147 0.1270 0.6324 0.9058 0.9134 0.0975 g = -0.4336 3.5784 -1.3499 0.3426 2.7694 3.0349 g1 = -0.4336 0 0 0.3426 2.7694 0 g2 = -0.4336 3.5784 -1.3499 0 2.7694 3.0349 程序四: 在(30,50)之间的随机分布的五阶矩阵: 程序: a=rand(5) b=30.*a+20 结果: a = 0.3171 0.7655 0.6463 0.6551 0.3404 0.9502 0.7952 0.7094 0.1626 0.5853 0.0344 0.1869 0.7547 0.1190 0.2238 0.4387 0.4898 0.2760 0.4984 0.7513 0.3816 0.4456 0.6797 0.9597 0.2551 b = 29.5130 42.9655 39.3894 39.6529 30.2116 48.5067 43.8560 41.2809 24.8784 37.5580 21.0334 25.6062 42.6406 23.5699 26.7144 33.1623 34.6929 28.2808 34.9509 42.5380 31.4468 33.3676 40.3911 48.7923 27.6529 5.3.3 矩阵分解的MATALAB实现 矩阵分解(decomposition, factorization)是多半将矩阵拆解为数个三角形矩阵(triangular matrix),依使用目的的不同,可分为三种矩阵分解法:1)三角分解法(Triangular Factorization),2)QR分解法(QR Factorization),3)奇异值分解法(Singular Value Decompostion)。 (1) 三角分解法 三角分解法是将原正方(square) 矩阵分解成一个上三角形矩阵或是排列(permuted) 的上三角形矩阵和一个下三角形矩阵,这样的分解法又称为LU 分解法。它的用途主要在简化一个大矩阵的行列式值的计算过程,求反矩阵,和求解联立方程组。不过要注意这种分解法所得到的上下三角形矩阵并非唯一,还可找到数个不同的一对上下三角形矩阵,此两三角形矩阵相乘也会得到原矩阵。 我们举以下二个矩阵为例: 利用三角分解法可将A和B二矩阵分别拆解为上下三角形矩阵 注意B分解的矩阵得到的第一个矩阵[LB]是排列的下三角形矩阵,如果第二、三列互换,则此变成完全的下三角形矩阵。 以MATLAB函数计算上述的LU分解法,其语法为[L,U]=lu(A),其中L代表下三角形矩阵U代表上三角形矩阵。我们来看一个例子。 >> A = [1 2 -1; -2 -5 3; -1 -3 0]; B=[1 3 2; -2 -6 1; 2 5 7]; >> [L1,U1] = lu(A); [L2,U2] = lu(B); >> L1; U1 L1 = % 注意这个矩阵L1和之前的[LA]不相同 -0.5 1 0 1 0 0 0.5 1 1 矩阵的Cholesky分解的Matlab实现 下次再补上改进的%Cholesky分解法, %Cholesky分解法 function [X]=m_chol(A,b) [N,N]=size(A); X=zeros(N,1); Y=zeros(N,1); for i=1:N A(i,i)=sqrt(A(i,i)-A(i,1:i-1)*A(i,1:i-1)'); if A(i,i)==0 'A is singular. no unique solution' break end for j=i+1:N A(j,i)=(A(j,i)-A(j,1:i-1)*A(i,1:i-1)')/A(i,i); end end A b %前代法 for j=1:N Y(j)=(b(j)-A(j,1:j-1)*Y(1:j-1))/A(j,j); end Y % A=A' for k=N:-1:1 X(k)=(Y(k)-A(k,k+1:N)*X(k+1:N))/A(k,k); end Cholesky分解 如果矩阵X是对称正定的,则Cholesky分解将矩阵X分解成一个下三角矩阵和上三角矩阵的乘积。设上三角矩阵为R,则下三角矩阵为其转置,即X=R'R。MATLAB函数chol(X)用于对矩阵X进行Cholesky分解,其调用格式为: R=chol(X):产生一个上三角阵R,使R'R=X。若X为非对称正定,则输出一个出错信息。 [R,p]=chol(X):这个命令格式将不输出出错信息。当X为对称正定的,则p=0,R与上述格式得到的结果相同;否则p为一个正整数。如果X 为满秩矩阵,则R为一个阶数为q=p-1的上三角阵,且满足 R'R=X(1:q,1:q)。 实现Cholesky分解后,线性方程组Ax=b变成R‘Rx=b,所以x=R\(R’\b)。例7-4 用Cholesky分解求解例7-1中的线性方程组。 命令如下: A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; b=[13,-9,6,0]'; R=chol(A) ??? Error using ==> chol Matrix must be positive definite 命令执行时,出现错误信息,说明A为非正定矩阵。 转自: http://203.208.37.104/search?q=cache:EfIWKymoWB8J:www.math.o https://www.wendangku.net/doc/4f12572264.html,/forums/index.php%3Fact%3DAttach%26type%3Dpost%26id%3 D213920+matlab+%E7%9F%A9%E9%98%B5LU%E5%88%86%E8 %A7%A3&hl=zh-CN&ct=clnk&cd=15&gl=cn&client=firefox-a&st_usg =ALhdy2-W-UGiapmEd7-JkiCNACw5NK2Gew 1.1矩阵的表示 1.2矩阵运算 1.2.14特殊运算 1.矩阵对角线元素的抽取 函数diag 格式X = diag(v,k)% 以向量 v 的元素作为矩阵 X 的第 k 条对角线元素,当 k=0 时, v 为 X 的主对角线;当 k>0 时,v 为上方第 k 条对角线;当 k<0 时, v 为下方第 k 条对角线。 X = diag(v)% 以 v 为主对角线元素,其余元素为 0 构成 X。 v = diag(X,k)%抽取 X 的第 k 条对角线元素构成向量 v。k=0:抽取主对角线元素; k>0 :抽取上方第 k 条对角线元素;k<0 抽取下方第 k 条对角线元素。 v = diag(X)% 抽取主对角线元素构成向量 v。 2.上三角阵和下三角阵的抽取 函数tril% 取下三角部分 格式L = tril(X)%抽取 X 的主对角线的下三角部分构成矩阵L L = tril(X,k)% 抽取 X 的第 k 条对角线的下三角部分; k=0 为主对角线; k>0 为主对角线以上; k<0 为主对角线以下。 函数triu% 取上三角部分 格式U = triu(X)%抽取 X 的主对角线的上三角部分构成矩阵U U = triu(X,k)% 抽取 X 的第 k 条对角线的上三角部分; k=0 为主对角线; k>0 为主对角线以上; k<0 为主对角线以下。3.矩阵的变维 矩阵的变维有两种方法,即用“:”和函数“reshape,”前者主要针对 2 个已知维数矩阵之间的变维操作;而后者是对 于一个矩阵的操作。 (1)“:”变维 (2)Reshape 函数变维 格式 B = reshape(A,m,n)%返回以矩阵 A 的元素构成的 m×n 矩阵 B B = reshape(A,m,n,p,)% 将矩阵 A 变维为 m×n×p× B = reshape(A,[m n p])%同上 B = reshape(A,siz)% 由 siz 决定变维的大小,元素个数与 A 中元素个数 相同。 (5)复制和平铺矩阵 函数repmat 格式 B = repmat(A,m,n)% 将矩阵 A 复制 m×n 块,即 B 由 m×n 块 A 平铺而成。 B = repmat(A,[m n])%与上面一致 B = repmat(A,[m n p]) %B 由 m×n×p× 个 A 块平铺而成 repmat(A,m,n)%当 A 是一个数 a 时,该命令产生一个全由 a 组成的 m×n 矩阵。 1.3矩阵分解 1.3.1Cholesky 分解 函数chol 格式R = chol(X)% 如果 X 为 n 阶对称正定矩阵,则存在一个实的非奇异上三角阵R,满足 R'*R = X ;若 X 非正定,则产生错误信息。 [R,p] = chol(X)% 不产生任何错误信息,若X 为正定阵,则p=0 ,R 与上相同;若X 非正定,则p 为正整数, R 是有序的上三角阵。 1.3.2 LU 分解 一、 题目 编写实现对N 阶非奇矩阵A 进行LU 分解的程序。 二、 算法组织 若n 阶方阵的各阶顺序主子行列式不为零则存在唯一的单位上三角矩阵L 和上三角矩阵L 式的A=LU 。其基本思想是GAUSS 消去法。参照《计算方法》第38页L 、U 各项计算公式编写公式。 1. 输入带分解矩阵A 2. For i=1,2,……n 2.1 将L 对角线元素赋值L (i ,i )=1; 3. For j=1,2,……n 3.1 将U 第一行元素赋值U (1,j )=A (1,j ); 4. For k=2,……n 4.1 将L 第一列元素赋值L(k,1)=A(k,1)/U(1,1); 5. For i=2,……n 5.1 For j=i ,……n 5.1.110 k kj ki ij kj i A L A U -=- ?∑ 5.2 For k=i+1,……n 5.2.1 1 0k jk ki ij kk jk i A L A U L -=?? -? ??? ∑ 三、 程序实现 clear all clc A=input('请输入一个方阵 ');%输入一个n 阶方阵 [n,n]=size(A); L=zeros(n,n); U=zeros(n,n); for i=1:n %将L 的主对角线元素赋值1 L(i,i)=1; end for j=1:n %求矩阵U 的第一行元素 U(1,j)=A(1,j); end for k=2:n %求矩阵L 的第一列元素 L(k,1)=A(k,1)/U(1,1); end for i=2:n %求L 、U 矩阵元素 for j=i:n s=0; for t=1:i-1 s=s+L(i,t)*U(t,j); end U(i,j)=A(i,j)-s; end for k=i+1:n r=0; for t=1:i-1 r=r+L(k,t)*U(t,i); end L(k,i)=(A(k,i)-r)/U(i,i); end end %输出矩阵L 、U L U 第二章 MATLAB 基础知识上机练习题目 (1)矩阵的基本操作 一、 答卷形式:新建一个word 文档,将以下每道练习题使用的命令(或程 序)及其结果按顺序排列在该word 文档中,文档中必须写上自己的名字和学号,并以自己的名字命名,最后提交word 文档。 二、 练习题目: 1、 生成一个3×3的矩阵A ,它的元素为你任意指定的9个不同的正整数,计算A 的行列式A 并将其赋值给变量b ,若b ≠0,求出矩阵B =1A -。若b =0,重新选择A 。 将所生成的矩阵A 及B 连在一起,构成一个3×6的矩阵,并付给变量C ,在workspace 中观察C 的类型、大小以及当前值。并用save 命令将C 存储为一个数据文件以备下列题目利用Load 命令调用; 2、 利用load 命令调出C 并取出它的1-2行,2-4列的子块,另存为一个2×3的矩阵d ,生成一个与d 相同大小的随机矩阵矩阵e ,计算d +e , d -e ,e d '*,d .*e , ()5 e d ' ,将e d '*结果中所有的对角线元素全部换为0.5。 3、 完成下列计算: 4、 4、利用rand(4,6)命令生成一个随机矩阵T,求T的矩阵大小,每一行、 每一列的最大值和最小值,整个矩阵的最大值与最小值;然后将整个矩阵的最大值所在位置的元素换为1000,将最小值所在位置的元素取为-1000。 >> T=rand(4,6) T = 0.8143 0.1966 0.3517 0.9172 0.3804 0.5308 0.2435 0.2511 0.8308 0.2858 0.5678 0.7792 0.9293 0.6160 0.5853 0.7572 0.0759 0.9340 0.3500 0.4733 0.5497 0.7537 0.0540 0.1299 >> RowMax=max(T) //每一列的最大值 RowMax = 0.9293 0.6160 0.8308 0.9172 0.5678 0.9340 >>k=T' //转秩后,求每一列的最大值就是原矩阵每行的最大值 k = 0.8143 0.2435 0.9293 0.3500 0.1966 0.2511 0.6160 0.4733 0.3517 0.8308 0.5853 0.5497 0.9172 0.2858 0.7572 0.7537 0.3804 0.5678 0.0759 0.0540 0.5308 0.7792 0.9340 0.1299 LineMax=max(k) 矩阵LDL T 分解与Cholesky 分解: ()2020,m i n (,)-2,T ij ij A LDL Cholesky i i j i j i j αα?==?=?≠? 求矩阵的分解与分解,其中 。 矩阵的LDLT 消去函数的程序代码: %矩阵的LDLT 分解 function [s,l,d]=ldlt(a) s=1;l=0;d=0; %判断矩阵是否对称 if a~=a' %矩阵不对称,输出错误信息 s=0; else b=diag(a); %列向量b 存放矩阵a 的对角元素,矩阵D 的元素也放在该向量 n=size(a,1); %矩阵a 维数n for k=1:n b(k)=b(k)-(a(k,1:k-1).^2)*b(1:k-1); if ~b(k) %如果矩阵D 的对角元素出现0,出现错误,停止计算 s=0; break else %进行递推 a(k+1:n,k)=(a(k+1:n,k)-a(k+1:n,1:k-1)*(b(1:k-1).*a(k,1:k-1)'))/b(k); end end if s l=tril(a)-diag(diag(a))+diag(b); d=diag(b); end end 矩阵的Cholesky 消去函数程序代码: %矩阵的cholesky 分解 function [s,g]=cholesky(a) s=1;g=0; %判断矩阵是否对称正定 if a~=a'|min(eig(a))<=0 %矩阵不是对称正定,输出错误信息 s=0; else %矩阵对称正定 n=size(a,1); %矩阵a 维数n a(1,1)=a(1,1)^(1/2); for i=2:n for j=1:i-1 a(i,j)=(a(i,j)-a(i,1:j-1)*a(j,1:j-1)')/a(j,j); %对角线下方元素计算matlab矩阵操作汇总
矩阵在matlab中的基本命令
Matlab界面、矩阵操作
关于matlab矩阵分解
matlab中的矩阵的基本运算命令
Matlab_中的矩阵分解函数
第4讲(4)Matlab中的矩阵分解命令
MATLAB 矩阵分解算法大全
matlab矩阵的表示和简单操作
MATLAB矩阵及其运算函数表
矩阵的LU分解(自编MATLAB)实验报告
MATLAB中矩阵常用的操作函数
6---matlab---对矩阵中元素的操作
矩阵分解的MATALAB实现
矩阵的Cholesky分解的Matlab实现
matlab中矩阵基本运算命令.docx
MATLAB中矩阵LU分解
MATLAB(1)-矩阵的基本操作
matlab中矩阵LDLT分解与Cholesky分解