正在研究gtk+,爭取盡快寫出帶有框體的程式,這個行列式的程式算是先寫著練練手,感受一下遞迴呼叫函式吧,應該算是dfs吧,寫起來實在是方便。
2014.3.3修改
之前犯了很嚴重的錯誤,b[maxnum][maxnum]陣列放在complemet_calculate函式內部,為自動變數,而返回的時候返回的b陣列的指標,返回函式體內部宣告定義的陣列位址是很不安全的,之前能夠正確執行的原因是函式結束時釋放該自動變數,但該位址所擁有的資料暫時沒有改動,系統知識標記了該部分資料可以修改,並不是進行資料的清空,所以指向該處的指標仍然可以正確讀取資料。而一旦系統修改了這部分資料,程式就會出現不可預知的錯誤。
安全的做法應當是在不需要同時存在的情況下,把b陣列宣告為外部陣列,就不會產生上述問題了。
2014.1.3 修改作
1.因為有了行列式計算的函式,於是就寫了矩陣求逆的函式加了進去,現在已經可以計算行列式大小,輸出伴隨矩陣,輸出余子式,代數余子式。矩陣的跡很好算,就先沒有寫,未來再加入計算a^2,計算矩陣的秩,計算矩陣特徵值等等。(開始時因為只是想算行列式,輸入函式寫的時候只能輸入為方陣,為了讓函式有廣泛適用性,新增著幾個功能的時候應該還要修改一下輸入函式。)
2.發現代數余子式的正負號似乎是錯的,改了一下
#include "stdio.h"
#include"math.h"
#include "conio.h"
#define maxnum100
//行列式最大大小
float b[maxnum][maxnum];//complemet_calculate函式的臨時陣列,宣告為外部變數防止資料丟失
float* complement_calculate(float a[maxnum],int n,int x,int y)//余子式矩陣計算函式,返回乙個n-1階二維陣列指標
for(j=0,p=0;j<=n-1;p++,j++)
b[m][p]=a[i][j];} }
returnb;
}float determinant_calculate(float a[maxnum],int n)//行列式計算函式
} returnresult;
}int determinant_input(float a[maxnum]) //行列式輸入函式,返回行列式大小n
for(j=1;j<=n-1;j++) }
returnn;
}void show(float a[maxnum],int n) //顯示n階矩陣函式,測試用
printf("\n"); }}
float *inverse_matrix_calculate(float a[maxnum],int n)//逆矩陣計算函式,若不可逆,返回空指標null
} returnb;
}int main()
執行截圖:
行列式求值 矩陣求逆
include include include include include include include include using namespace std 動態分配大小位size的一維陣列 templatebool allocatememory1d t p,const int size ...
行列式求值
行列式求值法則 傳送門 行列式求值,說白了就是用高斯消元把行列式消成上三角或者下三角 這裡選擇消成上三角,其實都一樣 用到的就是行列式求值的幾條性質,我這裡是用了乙個變數reo來記錄行列式的值 1 include2 include3 include4 include5 include6 includ...
矩陣行列式
對於乙個 n 行 n 列的矩陣 a 有矩陣的行列式 常用 det a a 表示 如果將矩陣的每一行視為乙個 n 維向量,則 n 階行列式的意義可以看做是 有向長度 面積 體積在 n 為空間下的擴充套件 具體的例子 n 1 時,a a 即有向長度 n 2 時,a a a a a vec times v...