300分,请高手给出(求4行4列逆矩阵的算法)!谢谢了 300分,请高手给出(求4行4列逆矩阵的算法)!谢谢了,各位兄弟! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 高斯约旦法void swap(double &a,double &b){ double temp; temp=a; a=b; b=temp;}void inverseMat(double* n,double m[4][4]){//?巣-??? int is[4]={0,1,2,3}; int js[4]={0,1,2,3}; double fDet = 1.0; double f =1.0; for(int x=0;x<4;x++) for(int y=0;y<4;y++) m[x][y]=*(n+x*4+y); for (int k = 0; k < 4; k ++){ double fMax = 0.0; //戞??? for (int i = k; i < 4; i ++){ for (int j = k; j < 4; j ++){ double f = abs(m[i][j]); if (f > fMax){ fMax = f; is[k] = i;//?戝?強??? js[k] = j;//?戝?強??? } } } if (is[k] != k){//晄?? f = -f; //??? swap(m[k][0],m[is[k]][0]); swap(m[k][1],m[is[k]][1]); swap(m[k][2],m[is[k]][2]); swap(m[k][3],m[is[k]][3]); } if (js[k] != k){ //晄??? f = -f; //??? swap(m[0][k], m[0][js[k]]); swap(m[1][k], m[1][js[k]]); swap(m[2][k], m[2][js[k]]); swap(m[3][k], m[3][js[k]]); } fDet *= m[k][k]; m[k][k] = 1.0/m[k][k]; for (int j= 0;j<4;j++){ if (j!= k) m[k][j] *= m[k][k]; } for (i = 0; i < 4; i ++) if (i != k) for (int j = 0; j < 4; j ++) if (j != k) m[i][j] = m[i][j] - m[i][k] * m[k][j]; for (i = 0; i < 4; i ++){ if (i != k) m[i][k] *= -m[k][k]; } } for (k = 3; k >= 0; k --){ if (js[k] != k){ swap(m[k][0], m[js[k]][0]); swap(m[k][1], m[js[k]][1]); swap(m[k][2], m[js[k]][2]); swap(m[k][3], m[js[k]][3]); } if (is[k] != k){ swap(m[0][k], m[0][is[k]]); swap(m[1][k], m[1][is[k]]); swap(m[2][k], m[2][is[k]]); swap(m[3][k], m[3][is[k]]); } } //cout<<endl<<"the result is "<<fDet*f<<endl;//??幃??} 楼上兄弟, double f = abs(m[i][j]);这个应该用 double f = fabs(m[i][j]);吧? GetDC()获取的CDC要不要释放 怎么让子窗口完全透明 急死我了 郁闷 关于控件问题 用VC制作简单的发送邮件的程序,麻烦给一点方向,谢谢您们了!!! 读取二进制文件的问题!!!!!!!!!! 超级难题???????????? ASP + COM高手受教? 各位高手求助呀!窗口和过滤的具体问题!解决多多送分! 本来全抛的信誉分不容许(只能给一百,我就多抛几次) 难道就没有人能够回答了吗?我给150分 请问?我想用MFC编写类似地图编辑器的界面 我晕,用#import导入类型库,生成的tlh文件中存在定义冲突怎么办?
void swap(double &a,double &b){
double temp;
temp=a;
a=b;
b=temp;
}
void inverseMat(double* n,double m[4][4]){//?巣-???
int is[4]={0,1,2,3};
int js[4]={0,1,2,3};
double fDet = 1.0;
double f =1.0;
for(int x=0;x<4;x++)
for(int y=0;y<4;y++)
m[x][y]=*(n+x*4+y);
for (int k = 0; k < 4; k ++){
double fMax = 0.0;
//戞???
for (int i = k; i < 4; i ++){
for (int j = k; j < 4; j ++){
double f = abs(m[i][j]);
if (f > fMax){
fMax = f;
is[k] = i;//?戝?強???
js[k] = j;//?戝?強???
}
}
}
if (is[k] != k){//晄??
f = -f;
//???
swap(m[k][0],m[is[k]][0]);
swap(m[k][1],m[is[k]][1]);
swap(m[k][2],m[is[k]][2]);
swap(m[k][3],m[is[k]][3]);
}
if (js[k] != k){ //晄???
f = -f;
//???
swap(m[0][k], m[0][js[k]]);
swap(m[1][k], m[1][js[k]]);
swap(m[2][k], m[2][js[k]]);
swap(m[3][k], m[3][js[k]]);
}
fDet *= m[k][k];
m[k][k] = 1.0/m[k][k];
for (int j= 0;j<4;j++){
if (j!= k)
m[k][j] *= m[k][k];
}
for (i = 0; i < 4; i ++)
if (i != k)
for (int j = 0; j < 4; j ++)
if (j != k)
m[i][j] = m[i][j] - m[i][k] * m[k][j];
for (i = 0; i < 4; i ++){
if (i != k)
m[i][k] *= -m[k][k];
}
}
for (k = 3; k >= 0; k --){
if (js[k] != k){
swap(m[k][0], m[js[k]][0]);
swap(m[k][1], m[js[k]][1]);
swap(m[k][2], m[js[k]][2]);
swap(m[k][3], m[js[k]][3]);
}
if (is[k] != k){
swap(m[0][k], m[0][is[k]]);
swap(m[1][k], m[1][is[k]]);
swap(m[2][k], m[2][is[k]]);
swap(m[3][k], m[3][is[k]]);
}
}
//cout<<endl<<"the result is "<<fDet*f<<endl;//??幃??
}
这个应该用 double f = fabs(m[i][j]);吧?