矩陣sum 矩陣LU分解的MATLAB與C 實現

2021-10-14 18:27:34 字數 1672 閱讀 1109

矩陣的lu分解目的是將乙個非奇異矩陣

比如 現在主要的問題是如何由矩陣

計算得到矩陣

和 呢?我們將在下面詳細討論。

首先從矩陣

入手,因為它是乙個上三角矩陣,所以很容易想到高斯消元法,依次把矩陣

主對角線左下角的元素消為

就得到

了。然後計算矩陣

,這裡有個技巧,可以這樣想,正是因為有了

,所以

的左下部分才能被消為

,所以我們記錄一下把

的左下部分消為

時矩陣

每行所乘的倍數,這個減去的倍數便是

左下元素的值!

在運算過程中左下相應元素減去的倍數(上面紅色的數字)便是矩陣$l$左下角的元素,可以得到:

其中n為方陣的行或列長度,可以看出先計算矩陣

的第一行,再計算矩陣

的第一列,再計算矩陣

的第二行,再計算矩陣

的第二列,依此類推。

clc,clear all,close all

% 矩陣的lu分解

%% 自己實現

a = [1 2 4;3 7 2;2 3 3]

[n,n] = size(a);

l = eye(n,n); % l初始化為單位矩陣

u = zeros(n,n); % u初始化為零矩陣

for i = 1 : n % 根據計算公式實現

for j = i : n

u(i,j) = a(i,j) - sum(l(i,1 : i - 1) .* u(1 : i - 1,j)');

endfor x = i + 1 : n

l(x,i) = (a(x,i) - sum(l(x,1 : i - 1) .* u(1 : i - 1,i)')) ./ u(i,i);

endendl

u%% 內建函式實現

[l1,u1] = lu(a)

#include #include using namespace std;

int main()

,, };

int n = a.size();

vector> u(n, vector(n));

vector> l(n, vector(n));

for (int i = 0; i < n; i++) //初始化矩陣l和矩陣u

for (int j = 0; j < n; j++)

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

for (int x = i + 1; x < n; x++)

}cout << "a:" << endl; //輸出矩陣a

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

cout << endl;

}cout << "l:" << endl; //輸出矩陣l

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

cout << endl;

}cout << "u:" << endl; //輸出矩陣u

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

cout << endl;

}return 0;

}

c 矩陣求逆的lu分解實現

c 矩陣求逆的lu分解實現 初學c 嘗試利用基礎知識編寫矩陣求逆。但發現求解伴隨陣的過程非常複雜且難以實現,而我正好看到一篇求三角陣伴隨矩陣的文章,故嘗試程式設計實現。在這種方法下,計算量明顯減小,實現方法,思路適合初學者。參考文獻 三角形矩陣求伴隨矩陣的一種方法 曾月新 求逆矩陣思路 1.求矩陣的...

矩陣LU分解的MATLAB與C 實現

矩陣的lu分解目的是將乙個非奇異矩陣 a 分解成 a lu 的形式,其中 l 是乙個主對角線為 1 的下三角矩陣 u 是乙個上三角矩陣。比如 a begin 1 2 4 3 7 2 2 3 3 end 我們最終要分解成如下形式 a l cdot u begin 1 0 0 3 1 0 2 1 1 e...

MIT線性代數 4 矩陣A的LU分解

乘以逆矩陣得到單位陣需要反著乘。第二行是第一行兩邊同時轉置的結果,得到的結論是a轉置的逆是a的逆的轉置。l是lower也就是下三角矩陣,u是upper也就是上三角矩陣。先是由e初等矩陣消元從a變化到u。l與e是什麼關係呢?答案是互為逆矩陣。2.2a ldu 有時候我們也可以把主元單獨分離出來,得到d...