行列式求值 矩陣求逆

2021-07-24 18:25:59 字數 2993 閱讀 5950

#include #include #include #include #include #include #include #include using namespace std;

//動態分配大小位size的一維陣列

templatebool allocatememory1d(t **p, const int size)

//動態分配rows行、cols列的二維陣列

templatebool allocatememory2d(t ***p, const int rows, const int cols)

return true;

}//釋放一維動態陣列的空間

templatevoid freememory1d(t **p)

}//釋放二維動態陣列的空間

templatevoid freememory2d(t ***p, const int rows)

} free(*p);

*p = null; }}

//template//void swap(t &a, t &b)

////用隨機數填充二維陣列(矩陣)

templatebool generatennumbers2d(t **a, int rows, int cols, v minvalue, v maxvalue)

} return true;

}void displayarray2d(double **a, const int rows, const int cols)

printf("\n"); }}

//降階法遞迴求行列式的值,就是按照線性代數書上的公式,我是按照第一行進行展開

template double static det(t **mat, const int n)}}

value += mat[0][i] * det(tmpmat, n - 1) * flag;

flag = -flag;

} freememory2d(&tmpmat, n - 1);

return value; }}

//將矩陣化為上三角矩陣來求行列式的值,精度比上面的降階法要低,我沒有考慮資料

//溢位的情況,適用範圍有限(上面也是)。

double static det1(double **mat, const int n)

if (j >= n)

if (j != i)

sign = -sign;

} //sub i row

for (row = j + 1; row < n; row++)

}} if (flag)

else

if (sign < 0)

}return result;

}//求乙個矩陣的鄰接矩陣,t為輸入矩陣,adjointmat存放t對應的鄰接矩陣,n為矩陣的階數

template bool adjointmatrix(t **mat, t ** &adjointmat, int n)

t **tmpmat = null;

allocatememory2d(&tmpmat, n - 1, n - 1);

int sign = -1, row, col, rowindex, colindex;

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

}rowindex++;}}

adjointmat[j][i] = s * det(tmpmat, n - 1);

s = -s;

} }freememory2d(&tmpmat, n - 1);

return true;

}//求乙個矩陣的逆矩陣

template int inversematrix(double d, t **mat, t ** &inversemat, int n)

} return 0;

}//兩個矩陣相乘,mat3 = mat1 * mat2

template bool matrixmultiply(t **mat1, t **mat2, t **&mat3, int n)

mat3[row][col] = sum;

} }return true;

}//誤差分析

template bool comparematrix(t **referencemat, t **mat, int n, double *absoluteerror, double *relativeerror)

} return true;

}void main(void)

else

cout << "分別用兩種方法計算行列式的值."

cout << "1.行列式的值為:" << d << endl;

cout << "2.行列式的值為:" << det1(mat, n) << endl;

allocatememory2d(&adjointmat, n, n);

cout<<"伴隨矩陣為:"

cout<}

} ret = inversematrix(d, adjointmat, adjointmat, n);

if (ret == -2)

else if (ret == -1)

else

cout<}

} if (isreversible)

cout << endl;

}}

//將mat矩陣置為單位矩陣

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

else mat[i][j] = 0;

}} if (isreversible)

freememory2d(&mat, n);

freememory2d(&adjointmat, n);

freememory2d(&tmpmat, n);

cout << "輸入行列式的階數:";

}}

矩陣求逆及行列式求值

正在研究gtk 爭取盡快寫出帶有框體的程式,這個行列式的程式算是先寫著練練手,感受一下遞迴呼叫函式吧,應該算是dfs吧,寫起來實在是方便。2014.3.3修改 之前犯了很嚴重的錯誤,b maxnum maxnum 陣列放在complemet calculate函式內部,為自動變數,而返回的時候返回的...

行列式求值

行列式求值法則 傳送門 行列式求值,說白了就是用高斯消元把行列式消成上三角或者下三角 這裡選擇消成上三角,其實都一樣 用到的就是行列式求值的幾條性質,我這裡是用了乙個變數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...