對角矩陣的儲存

2021-10-18 04:11:57 字數 2145 閱讀 9457

概念:對角矩陣又稱是帶狀矩陣,是指在(nxn)的矩陣非零元素集中在主對角線及其兩側,共l(奇數)條對角線的帶狀區域內,則稱為l對角矩陣。

平行於主對角線的非零元素連成的線稱作頻寬:上三角和下三角各有半頻寬

同時該矩陣的行和列是相同的,所以該矩陣以對角線上下對稱(而且對角線上資料行=列)

對矩陣資料的統計=需要儲存的空間(data[masize]),對角矩陣每行資料沒有規律也不便於統計。如果隨著階數的增長統計難度會逐漸加大,即需要乙個方便簡潔的統計方法,如果矩陣每一行的資料的數量是一致相同的的那麼就會大大減小了統計的難度。

可以對每行進行資料填充但又不影響儲存(可以對每行進行填充零元素,這樣既保證了每行資料相同又不影響資料儲存):

這樣每一行的資料數量都相同,矩陣外的資料不用儲存。

maxsize(一維陣列的數量):每行資料x行數(lxn-2d),第一行和最後一行的零不進行儲存所以要減去(d為半頻寬)

目的:將矩陣帶狀中的資料儲存到一維陣列中

排序:儲存順序和矩陣順序儲存一致

由此可知資料必須在矩陣帶狀中才可以進入一維陣列,則應將帶狀以外的資料全部排除掉

以對角線為界分析可知,下標之差最大為半頻寬。而帶狀之外的資料下標之差已經超過了半頻寬,由此可以利用對角線進行判斷區分資料

aij若|i-j|>d則說明資料全部在帶狀以外均為零,不用儲存

若|i-j|<=d則說明資料在帶狀以內是需要儲存的資料,可以對其進行查詢和輸出

對資料定位的前提條件,定位在帶狀區域內才可以進行定位。若不在則無法定位,所以查詢資料時的判斷條件為資料是否在帶狀區域內

現在假設查詢資料為aij,資料最終會放進一維陣列中。則統計aij前面共有多少個資料就可以得知aij在一維陣列中的具體位置。

aij前有i-1行每行的資料數量為l,則可知道前i-1行的資料數量是(i-1)xl-d

第i行中對角線前的資料有d個(半頻寬的數量)

最後加上j-i即可,綜上可知在第一行減去了乙個d個零(掐頭去尾),在第i行中加上了乙個d的資料最後抵消

數量=(i-1)xl+j-i//任意資料的位置

printf("對角矩陣如下\n");

區覺得函式,標頭檔案math和stdlib都可以 

int array1[maxsize];

int k = 0;

for (int i =0;i<6; i++)

}} printf("一維陣列:");

三對角矩陣壓縮儲存 注意對角元素的下標

對角矩陣的壓縮儲存 對角矩陣是指所有非零元素全部集中在中心幾條對角線上的矩陣。下面以三對角矩陣 所有非零元素集中在中心三條對角線上 為例描述對角矩陣的壓縮儲存方法。圖2 8是乙個三對角矩陣,使用一維陣列a m 來壓縮儲存矩陣資訊,則陣列中的元素依次為a11,a12,a21,a22,a23,a32,a...

python矩陣對角化 大矩陣對角化python

我使用scipy中的linalg來得到155x156矩陣的e值和特徵向量。然而,與矩陣相比,特徵值的階數似乎是隨機的。我希望第乙個特徵值對應於矩陣中的第乙個數。請看下面我的例行程式。我首先讀取的是乙個包含所有浮點數的檔案 1u1o.dat 2533297.650278 2373859.531153 ...

對角化求可逆矩陣 矩陣對角化方法

矩陣對角化方法 摘要 本文給出了一種不同於傳統方法的矩陣對角化方法,利用矩陣的初等變換,先求出矩陣的特徵根與特徵向 量,接著再判斷矩陣是否可對角化。矩陣特徵根 特徵向量 對角化the methods of the diagonalization of the matrix gabstract in ...