1. C语言矩阵上三角和下三角
上三角和下三角是根据主对角线来划分的;
在你举得列子力
123
456
789
的159就是这个这个数列的主对角线
所以
123
56
9
是上三角;
1
45
789
是下三角
2. 什么是下三角矩阵最好能举个例子,在数据结构中遇到
一个矩阵称为下三角矩阵如果对角线上方的元素全部为0。类似地,一个矩阵称为上三角矩阵如果对角线下方的元素全部为0。
3. MATLAB编程与应用系列-第3章 矩阵运算(4)
矩阵的分解是矩阵相关运算中的重要内容,MATLAB提供了用于矩阵分解运算的多种函数。本节将集中介绍MATLAB所提供的矩阵分解运算函数的功能及使用。
矩阵的三角分解又称高斯消去法分解,它的目的是将一个矩阵分解成一个下三角矩阵L和一个上三角矩阵U的乘积,即A=LU。MATLAB提供了专门的函数lu来计算矩阵的LU分解。该函数的调用格式如下:
其中,返回矩阵U为上三角阵,矩阵L为下三角阵或其变换形式,且满足LU=X。返回矩阵P为单位矩阵的行变换矩阵,满足LU=PX。
奇异值分解在矩阵分析中占有极其重要的作用。MATLAB提供了用于矩阵奇异值分解的函数svd,该函数是利用LINPACK程序库中的ZSVDC编制而成的。在计算的过程中假如经过75步QR分解仍得不到一个奇异值,那么系统会给出“不收敛”的提示。奇异值分解函数svd的几种调用格式如下:
其中,命令①返回向量s包含矩阵X分解所得到的全部奇异值向量。命令② 返回一个与X同大小的对角矩阵S和两个酉矩阵U与V,且满足= U S V'。命令③ 得到一个“有效大小”的分解,如果m×n维矩阵X中m>n则只计算出矩阵U的前n列,矩阵S的大小为n×n。
MATLAB提供了eig函数来对矩阵进行特征值分解,该函数的几种调用格式如下:
其中,①计算矩阵A的特征值d,返回结果以向量形式存放。②计算方阵A和B的广义特征值d,返回结果以向量形式存放。③计算矩阵A的特征值对角阵D和特征向量阵V,使AV=VD成立。④计算矩阵A的特征值对角阵D和特征向量阵V,使AV=VD成立。当矩阵A中有与截断误差数量级相差不远的值时,该指令可能更精确。'nobalance'起误差调节作用。⑤计算矩阵A和B的广义特征值向量阵V和广义特征值阵D,满足AV=BVD。最后一条命令⑥由flag指定算法计算矩阵A和B的特征值D和特征向量V。其中,flag的可能值为:'chol' 和'qz' 。当flag值为'chol'时表示对B使用Cholesky分解算法,其中A为对称Hermitian矩阵,B为正定阵。当flag值为'qz'时表示使用QZ算法,其中A、B为非对称或非Hermitian矩阵。
MATLAB提供了chol函数来对矩阵进行Cholesky分解,该函数的调用格式为:
函数调用格式①如果X为n阶对称正定矩阵,则存在一个实的非奇异上三角阵R,满足R'*R = X;若X非正定,则产生错误信息。②不产生任何错误信息,若X为正定阵,则p=0,R与上相同;若X非正定,则p为正整数,R是有序的上三角阵。
正交矩阵是指矩阵的列向量相互正交,且各个列向量的长度相等。QR分解就是将矩阵A分解成一个正交矩阵与一个上三角矩阵的乘积。MATLAB提供了用于矩阵QR分解的函数,表3.7中介绍用于矩阵QR分解的函数调用格式和功能。
表3.7 矩阵QR分解
Schur分解将使用schur函数,该函数的调用格式为:
命令行①-③返回正交矩阵U和schur矩阵T,满足A = U T U'。其中,若A有复特征根,则flag='complex',否则flag='real'。
即使是实阵,在其特征值中也可能出现复数。实际使用中常需要把这一对对共轭复数特征值转化为一个(2x2)的实数块。函数调用格式为:
MATLAB提供了gsvd函数对矩阵进行广义奇异值分解,其具体调用格式为:
其中,函数调用格式①返回酉矩阵U和V、一个普通方阵X、非负对角矩阵C和S,满足A = U C X',B = V S X',C' C + S' S = I (I为单位矩阵)。A和B的列数必须相同,行数可以不同。函数调用格式②和①基本相同,而③则返回广义奇异值sigma值。
MATLAB提供了qz函数对矩阵进行特征值问题的QZ分解,该函数的调用格式为:
其中函数调用格式①中A、B为方阵,返回结果AA和BB为上三角阵,Q、Z为正交矩阵或其列变换形式,V为特征向量阵,且满足Q A Z= AA 和Q B Z = BB。命令行②产生由flag决定的分解结果,flag取值为'complex'表示复数分解(默认);取值为'real'表示实数分解。
如果矩阵H的第一子对角线下元素都是0,则H为海森伯格(Hessenberg)矩阵。如果矩阵是对称矩阵,则它的海森伯格形式是对角三角阵。MATLAB可以通过相似变换将矩阵变换成这种形式,具体调用格式为:
4. 在MATLAB里怎样将上三角和下三角矩阵表示出来
上三角矩阵函数:
triu(A,k)%求矩阵A的第K条对角线以上的元素。
下三角矩阵函数:
tril(A,k)%求矩阵A的第K条对角线以下的元素。
例如:
tril(ones(3,3),0)
ans =
1 0 0
1 1 0
1 1 1
>> triu(ones(3,3),0)
ans =
1 1 1
0 1 1
0 0 1
MATLAB 矩阵处理
相关函数:
zeros():产生全0矩阵,即零矩阵
ones():产生全1矩阵,即幺矩阵
eye():产生对角线为1的矩阵。当矩阵是方阵时,得到一个单位矩阵
rand():产生,(0,1),(0,1)区间均匀分布的随机矩阵
randn():产生均值为0,方差为1的标准正态分布随机矩阵
一些技巧:
rand()产生随机数 x;fix(a+(b-a)*x)产生,(a,b),(a,b)区间上均匀分布的随机整数
randn()产生随机数 y;μ+σyμ+σy 得到均值为μμ、方差为σ2σ2的随机数
5. 怎样在matlab中写出一个下三角矩阵,矩阵的元素的表达和它的位置有关,
矩阵为a,下三角块保存到向量a中
n
=
length(a);
a
=
zeros([1,n*(n-1)/2]);
for
i=1:n;
l
=
(i-1)*(2*n-i)/2+1;
a(l:(l+n-i-1))
=
a((i+1):end,i);
end;
max(a)
很高兴回答楼主的问题
如有错误请见谅
6. (1) 用C语言编程输出下列倒三角矩阵
#include <stdio.h>
#define N 4
main()
{
int i,j,a[N][N]={{3,5,6,3},{0,8,9,1},{0,0,5,0},{0,0,0,7}};
for(i = 0;i < N; ++i) {
for(j = 0; j < N; ++j) {
if(j < i) printf(" ");
else printf("%3d",a[i][j]);
} printf("\n");
}
}
//这个已经试验过了,给你的一样,若你的数有规律,或者想要随机数就用一楼的
7. C语言编程求矩阵的下三角之和,要有代码的,谢谢
你的题目是统计下三角的和,对角线的值不计算在内吗?
如果是,下面的程序1满足要求。如果不是,对角线元素需要计算,下面的程序2满足要求。
程序1:
#include <stdio.h>
main()
{ int a[10][10],row,col,sum=0; /* row col 控制矩阵的行、列大小 */
int i,j;
printf("Input the row and column of array divided by blank:\n");
scanf("%d%d",&row,&col);
printf("Now input %d numbers:\n",row*col);
for(i=0;i<row;i++)
for(j=0;j<col;j++)
scanf("%d",&a[i][j]);
for(i=1;i<row;i++)
for(j=0;j<i;j++)
sum+=a[i][j];
printf("The sum below diagonal line is %d\n",sum);
}
程序2:
#include <stdio.h>
main()
{ int a[10][10],row,col,sum=0;
int i,j;
printf("Input the row and column of array divided by blank:\n");
scanf("%d%d",&row,&col);
printf("Now input %d numbers:\n",row*col);
for(i=0;i<row;i++)
for(j=0;j<col;j++)
scanf("%d",&a[i][j]);
for(i=1;i<row;i++)
for(j=0;j<=i;j++)
sum+=a[i][j];
printf("The sum below diagonal line is %d\n",sum);
}
8. c语言。数据结构。设有下三角矩阵用数组A[0..10,0..10]表示,按行优先顺序存放其非零元素
每个元素占两个字节,一个一个推就行了:
100
102
104
106
108
110
112
114
116
118
120
122
124
126
128
130
132
134
136
138
140
每放一个元素,地址加2,于是A[5,5]的地址是140