开发工具:
文件大小: 17kb
下载次数: 0
上传时间: 2012-12-27
详细说明:
使用选主元法求矩阵的逆 #include #include #include #include using namespace std; //选主元求矩阵的逆 vector SolveInverseMatrix(vector dt) { double inputMatrix[5][5]; int mark = 1; double detVal = 0.0; vector outputVal; vector::iterator ibeg = dt.begin(); for (int i = 0; i < 5; ++i) { for (int j = 0; j < 5; ++j) { inputMatrix[i][j] = *ibeg; ++ibeg; } } int row[5]; int column[5]; for (int k = 0 ; k < 5; ++k) { double maxVal = 0.0; for (int i = k; i < 5; ++i) { for (int j = k; j < 5; ++j) { double elem = abs(inputMatrix[i][j]); if (elem > maxVal) { maxVal = elem; row[k] = i; column[k] = j; } } } try { if (row[k] != k) { mark = -mark; int temp = row[k]; swap(inputMatrix[k][0],inputMatrix[temp][0]); swap(inputMatrix[k][1],inputMatrix[temp][1]); swap(inputMatrix[k][2],inputMatrix[temp][2]); swap(inputMatrix[k][3],inputMatrix[temp][3]); swap(inputMatrix[k][4],inputMatrix[temp][4]); } if (column[k] != k) { mark = -mark; int temp = column[k]; swap(inputMatrix[0][k],inputMatrix[0][temp]); swap(inputMatrix[1][k],inputMatrix[1][temp]); swap(inputMatrix[2][k],inputMatrix[2][temp]); swap(inputMatrix[3][k],inputMatrix[3][temp]); swap(inputMatrix[4][k],inputMatrix[4][temp]); } } catch (exception ex) { } if (abs(maxVal) < 0.0001) return 0; detVal = inputMatrix[k][k]; inputMatrix[k][k] = 1.0 / inputMatrix[k][k]; for (int j = 0; j < 5; ++j) { if(j != k)inputMatrix[k][j] *= inputMatrix[k][k]; inputMatrix[k][j] /= maxVal; } for (int i = 0; i < 5; ++i) { if (i != k) { for (int j = 0; j < 5; ++j) { if(j != k)inputMatrix[i][j] = inputMatrix[i][j] - inputMatrix[i][k] * inputMatrix[k][j]; } } } for (int i = 0; i < 5; ++i) { if (i != k) { inputMatrix[i][k] *= -inputMatrix[k][k]; } } } for (int k = 4; k >= 0; --k) { if (column[k] != k) { int temp = column[k]; swap(inputMatrix[k][0],inputMatrix[temp][0]); swap(inputMatrix[k][1],inputMatrix[temp][1]); swap(inputMatrix[k][2],inputMatrix[temp][2]); swap(inputMatrix[k][3],inputMatrix[temp][3]); swap(inputMatrix[k][4],inputMatrix[temp][4]); } if (row[k] != k) { int temp = row[k]; swap(inputMatrix[0][k],inputMatrix[0][temp]); swap(inputMatrix[1][k],inputMatrix[1][temp]); swap(inputMatrix[2][k],inputMatrix[2][temp]); swap(inputMatrix[3][k],inputMatrix[3][temp]); swap(inputMatrix[4][k],inputMatrix[4][temp]); } } for (int i = 0; i < 5; ++i) { for (int j = 0; j < 5; ++j) { outputVal.push_back(inputMatrix[i][j]); } } detVal *= mark; //行列式的值 return outputVal; } int main() { int count = 0; vector tempVector; tempVector.push_back(5); tempVector.push_back(0); tempVector.push_back(0); tempVector.push_back(0); tempVector.push_back(0); tempVector.push_back(0); tempVector.push_back(5); tempVector.push_back(0); tempVector.push_back(0); tempVector.push_back(0); tempVector.push_back(0); tempVector.push_back(0); tempVector.push_back(5); tempVector.push_back(0); tempVector.push_back(0); tempVector.push_back(0); tempVector.push_back(0); tempVector.push_back(0); tempVector.push_back(5); tempVector.push_back(0); tempVector.push_back(0); tempVector.push_back(0); tempVector.push_back(0); tempVector.push_back(0); tempVector.push_back(5); vector outputVector = SolveInverseMatrix(tempVector); vector::iterator ibeg = outputVector.begin(); vector::iterator iend = outputVector.end(); for (;ibeg != iend; ++ibeg) { ++count; cout<<*ibeg<<"\t\t"; if (count % 5 == 0) { cout<
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.