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