#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...