震驚!c語言中求矩陣的逆只要10行!!!

2021-03-01 教主的回憶館
咳咳,標題黨而已,10行是解決不了問題的。別想桃子了233

但是!核心的部分真的10行就夠了,其他的都是為這個代碼更加generalization…

首先要用c語言做矩陣的逆運算,就要知道用手咋求矩陣的逆的

首先翻開你的線性代數,兩種辦法:

一種是:

               

           

另一種是:

非常明顯,如果你在考線代的時候用第一種的

寫完一題就可以瀟灑交卷了

畢竟時間到了,0分總比不交卷違背考場紀律被背一個處分要好得多233



所以計算機寫代碼的時候,我們也果斷採用第二種:

 

下面是具體思路

首先我們需要兩個矩陣。一個放A,一個放E,然後要弄一個工具把A變成E的同時,E也要進行同樣的操作變成A-1。之後再輸出就行了。

因此總結一下就是:

1決定n維數組的大小n,要用戶自己輸入

2創建兩個二維數組,用來放A,E(E要自己創建且隨n不同要變化)

3弄一個可以整活的代碼,把(A,E)變成(E,A-1)

4然後輸出就好了

 

 

說完這些,估計你要打我了,鬼不知道啊…

關鍵是可以整活的代碼你變給我啊

咳咳,別急,下面就是整活代碼具體思路

 

首先我們知道在第二種解題思路中,怎麼用手算呢?

先將第一行第一列元素化為1,將第一列其餘元素化為0;

將第二行第二列元素化為1,將第二列其餘元素化為0;

…………

將第n行第n列元素化為1,將第n列其餘元素化為0。

因此我們要做的操作有兩個

   一個是將一個元素化為一   另一個是其餘同列化為0

 

我是先進行後面的操作,舉個例子

把a11乘於(a21/a11)然後把它變負之後加到a21上,同理用循環該行都進行一個操作,目的是讓a21變0。

這是第一個循環

之後如法炮製再次利用循環講a11乘以一個數變負加到a31,再對該行進行同樣的操作。目的是讓a31變0。

第二個循環

弄完a11了,再利用一個循環把a22 a33….都弄好就行了。

第三個了啊

(我是用了3個循環疊加完成的,你會發現只需要一行代碼加上三個循環這部分就可以搞定了)

最後你就會發現會出現一個除了對角線的一列之外都是0了。
這個時候已經成功了一半了。

(一開始我還以為我成功了,後來發現每一行的非零項可能不是1耶...)

之後你只要把a11 a22 a33 不是1的全部整為1就可以了,這裡用個條件判斷和類似之前的代碼就行了

因此核心代碼只要4+4=8行!

加上一個後面需要變動的點,一共10行就夠了!!!

 

當然看完之後你鐵定是不行的,肯定要自己嘗試嘗試啦~

如果想嘗試的話,最好是先和我一樣弄一個要做的需求1234

再根據這個一步一步填充,如果試完還是不行的話

想要原始碼和注釋嗎

(狗頭微笑臉)

想桃子呢,不會給你的233

 

相關焦點

  • C語言 | 求矩陣對角線元素和
    「要成為絕世高手,並非一朝一夕,除非是天生武學奇才,但是這種人…萬中無一」這道理放在C語言學習上也一併受用
  • 關於伴隨矩陣與逆矩陣問題
    OK 那麼今天講的是伴隨矩陣與逆矩陣的一些小應用與小公式。開始正文:首先我們來看伴隨矩陣定義:這裡伴隨矩陣定義有個要注意一下第一行是A11 A21...An1 而我們的A矩陣第一行是a11 a12...a1n。也就是行跟列的位置對調了。
  • 利用EXCEL的矩陣函數解多元一次方程
    下面開始我們的方程組計算過程,先將方程組左邊的常數寫在一組單元格中,如下圖的(B8:C9),再將右邊的常數寫在另一組單元格中(D8:D9),然後在一組空的單元格裡的第一個單元格中寫出計算公式,就是圖中上方的函數。
  • 定量分析方法第09講:矩陣分析基礎一
    ([[2, 3], [4, 5]])b + cb - cmatrix([[3, 5], [7, 9]])matrix([[-1, -1], [-1, -1]])矩陣乘法np.dot(b, c)matrix
  • C語言中的奇技淫巧
    前言學習C語言的過程中,總會遇到很多令人眼前一亮的代碼,尤其是你寫了幾十行的代碼,別人只用了簡單幾行的遞歸就實現的功能
  • 【暑期必備46個知識點:37】:伴隨矩陣
    ,叫做伴隨矩陣,為什麼稱它為伴隨,因為它是從原矩陣衍生出來的,可以說沒有原矩陣,就沒有伴隨矩陣。問題索引:伴隨矩陣的定義是什麼?伴隨矩陣需要記憶的結論有哪些?如何求伴隨矩陣?說到伴隨矩陣的定義,就不得不提到一個概念——代數餘子式,這個概念是從行列式這一章中提出來的,簡單來說是這樣:如果有一個元素aij,那麼這個元素的代數餘子式就是把i行j列去掉,剩下的部分,如果把這些代數餘子式按照一定的順序排列,形成矩陣,這個矩陣就是伴隨矩陣。接下來就是詳細定義:設Aij為元素aij的代數餘子式,定義A*=(Aji)為矩陣A的伴隨矩陣。
  • C語言 | 魔方矩陣
    「要成為絕世高手,並非一朝一夕,除非是天生武學奇才,但是這種人…萬中無一」這道理放在C語言學習上也一併受用
  • C語言 | 求100~200的素數​
    「要成為絕世高手,並非一朝一夕,除非是天生武學奇才,但是這種人…萬中無一」這道理放在C語言學習上也一併受用
  • Excel高級使用技巧7、矩陣計算
    數組名的設置步驟是:選定數組域,單擊「插入」菜單,選擇「名稱」項中的「定義」命令,輸入數組名,單擊「確定」按鈕即可。更簡單的命名辦法為:選擇數組域,單擊名稱框,直接輸入名稱就行了。 矩陣函數是Excel進行矩陣計算的專用模塊。
  • 【C語言程序設計】C語言迴文數怎麼求?
    將平方後的(a的)每一位進行分解,按從低位到高位的順序依次暫存到數組中,再將數組中的元素按照下標從大到小的順序重新將其組合成一個數眾(如n=15,則a=225且k=522),若k等於n×n則可判定n為迴文數。算法設計從低位到高位將某一整數拆分。
  • C語言 | 選擇1或2調用max或min
    在編程方面有著天賦異稟的人畢竟是少數,我們大多數人想要從C語言小白進階到高手,需要經歷的是日積月累的學習。那麼如何學習呢?當然是每天都練習一道C語言題目!!作者閆小林白天搬磚,晚上做夢。我有故事,你有酒麼?例36:C語言實現輸入兩個整數,然後讓用戶選擇1或者2,選擇1是調用max,輸出兩者中的大數,選擇2是調用min,輸出兩者中的小數。
  • 教您用R語言畫直方圖!| 繽紛燦爛R語言 | 醫學方R語言高階課程
    :接受一個數值向量或者一個矩陣;當為一個向量時,則該向量用來繪製左半邊的條形圖或者直方圖;當為一個矩陣時,該矩陣的第一列數據用來繪製左半邊的圖,第二列用來繪製右半邊的圖,而其他列(假如存在其他列)則被自動忽略了。
  • C語言求回文素數代碼及解析
    下面列出兩位和三位整數中包含的所有回文素數。兩位回文素數:11三位回文素數:101、131、151、181、191、313、353、373、383、727、757、787、 797、 919、 929本題要求解的問題是:求出所有不超過1000的回文素數。
  • C語言入門必備的18個經典程序
    共9行9列,i控制行,j控制列。通過鍵盤輸入3名學生4門課程的成績,分別求每個學生的平均成績和每門課程的平均成績。要求所有成績均放入一個4行5列的數組中,輸入時同一人數據間用空格,不同人用回車其中最後一列和最後一行分別放每個學生的平均成績、每門課程的平均成績及班級總平均分。
  • c語言的選擇結構(一)
    在c語言中關係運算符共有六種。關係運算符含義優先級結合性<小於這幾個運算符優先級相同,但比下面高。左結合<=小於或等於>大於>=大於或等於==等於這幾個運算符優先級相同,但比上面低。
  • C語言 | 求小於1000數的平方根
    「要成為絕世高手,並非一朝一夕,除非是天生武學奇才,但是這種人…萬中無一」這道理放在C語言學習上也一併受用
  • C語言太簡單?這14道C語言謎題,你能答對幾個?
    錯在了第三個,第一個是10沒有什麼問題,第二個是4,也沒有什麼問題,因為是32位機上一個int有4個字節。但是第三個為什麼輸出的不是11呢?居然還是10?原因是,sizeof不是一個函數,是一個操作符,其求i++的類型的size,這是一件可以在程序運行前(編譯時)完全的事情,所以,sizeof(i++)直接就被4給取代了,在運行時也就不會有了i++這個表達式。
  • C語言求水仙花數代碼解析
    問題分析根據「水仙花數」的定義,判斷一個數是否為「水仙花數」,最重要的是要把給出的三位數的個位、十位、百位分別拆分,並求其立方和(設為s),若s與給出的三位數相等, 三位數為「水仙花數」,反之,則不是。算法設計「水仙花數」是指滿足某一條件的三位數,根據這一信息可以確定整數的取值範圍是 100〜999。