日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

矩阵求逆操作的复杂度分析(逆矩阵的复杂度分析)

發布時間:2023/12/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 矩阵求逆操作的复杂度分析(逆矩阵的复杂度分析) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

矩陣求逆操作的復雜度分析
逆矩陣的復雜度分析

1 背景

之前寫過一篇關于矩陣復雜度分析的文章,沒有想到閱讀人數那么多。對于IT相關人士來說,從代碼層次再結合基本數學知識,就能夠很好地理解矩陣的復雜度如何計算得到和分析。其中一位讀者提出“矩陣求逆的復雜度如何分析”。今天就來一起共同探討一下,筆者知道,矩陣求逆有多種方法,這里就來探討最基本的方式,其他優化方式,讀者可以看完本篇博客后,自行分析,因為原理基本上差不是很多。本篇博客僅僅是拋磚引玉。

2 求逆操作分析

2.1 求逆矩陣基本原理

這里很多讀者可以容易忽視掉,先復習一下。
(A∣E)=(E∣A?1)(A|E) = (E| A^{-1})(AE)=(EA?1)
相信大家對這個公式都比較熟悉,即把原矩陣和一個單位矩陣對齊后,進行行列變化,就得到了單位矩陣,右邊部分就算逆矩陣。

證明如下:
A?1(A∣E)=(A?1A∣A?1E)A^{-1}(A|E) = (A^{-1}A| A^{-1}E)A?1(AE)=(A?1AA?1E)
=(E∣A?1)= (E| A^{-1})=(EA?1)
思考為什么呢?

因為:
A?1A=EA^{-1}A=EA?1A=E,右乘A?1A^{-1}A?1后:
A?1E=A?1A^{-1}E=A^{-1}A?1E=A?1

故變化的橋梁就是存在A?1A^{-1}A?1

3 逆矩陣復雜度分析-高斯消元法

3.1 代碼層次

/* 函數說明:將原矩陣a和一個單位矩陣E作成一個大矩陣(A,E), 用初等變換將大矩陣中的a變成E,則會得到(E,A^{-1})的形式 * */ void inverseMatrix(double arc[d][d], int n, double ans[d][d])//計算矩陣的逆 {/*d = n : 表示維度arc[d][d] : 原始矩陣,dxdans[d][d] : 變化后的結果矩陣,dxd ,一開始初始化為單位矩陣*/int i, j, k;//列double max, tempA, tempB, P;int max_num;double arcCopy[d][d];memcpy(arcCopy, arc, 288);for (i = 0; i < n; i++){ans[i][i] = 1;}for (i = 0; i < n; i++)//第i列{max = fabs(arcCopy[i][i]);max_num = i;for (j = i + 1; j < n; j++)//選出主元{if (fabs(arcCopy[j][i]) > max){max = fabs(arcCopy[j][i]);max_num = j;}}for (k = 0; k < n; k++)//交換行{tempA = arcCopy[i][k];arcCopy[i][k] = arcCopy[max_num][k];arcCopy[max_num][k] = tempA;tempB = ans[i][k];ans[i][k] = ans[max_num][k];ans[max_num][k] = tempB;}for (k = i + 1; k < n; k++){P = arcCopy[k][i] / arcCopy[i][i];for (j = 0; j < n; j++){arcCopy[k][j] = arcCopy[k][j] - arcCopy[i][j] * P;ans[k][j] = ans[k][j] - ans[i][j] * P;}}}for (i = 0; i < n; i++)//行{P = arcCopy[i][i];for (j = i; j < n; j++){arcCopy[i][j] = arcCopy[i][j] / P;}for (j = 0; j < n; j++){ans[i][j] = ans[i][j] / P;}}for (i = n - 1; i > 0; i--){for (j = i - 1; j >= 0; j--){for (k = 0; k < n; k++){ans[j][k] = ans[j][k] - ans[i][k] * arcCopy[j][i];}}} }

3.2 結果

逆矩陣時間復雜為:O(n^3)

開銷代價最大是這里,

for (i = n - 1; i > 0; i--){for (j = i - 1; j >= 0; j--){for (k = 0; k < n; k++){ans[j][k] = ans[j][k] - ans[i][k] * arcCopy[j][i];}}}

4 逆矩陣復雜度分析-伴隨矩陣

這個比較直接:
A?1=A?/det(A)A^{-1} = A^{*}/det(A)A?1=A?/det(A)
先計算A的伴隨矩陣,再計算A的行列式值。
前者的復雜度為:N?O(N!)N*O ( N ! ) N?O(N!)
后者的復雜度為:N2?O((N?1)!)N^2 ?O((N?1)!) N2?O((N?1)!)

故使用伴隨矩陣求解方式的復雜度為:
N?O(N!)+N2?O((N?1)!)N*O ( N ! ) + N^2 ?O((N?1)!) N?O(N!)+N2?O((N?1)!)

ps:本博客只考慮基本的操作,不考慮優化處理

總結

以上是生活随笔為你收集整理的矩阵求逆操作的复杂度分析(逆矩阵的复杂度分析)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。