高斯消元法求逆矩阵 matlab,求救!用高斯消元法求二进制矩阵的逆!

float Inverse(CLAYMATRIX& mOut, const CLAYMATRIX& rhs)

{

CLAYMATRIX m(rhs);

DWORD is[4];

DWORD js[4];

float fDet = 1.0f;

int f = 1;

for (int k = 0; k < 4; k ++)

{

// 第一步,全选主元

float fMax = 0.0f;

for (DWORD i = k; i < 4; i ++)

{

for (DWORD j = k; j < 4; j ++)

{

const float f = Abs(m(i, j));

if (f > fMax)

{

fMax        = f;

is[k]        = i;

js[k]        = j;

}

}

}

if (Abs(fMax) < 0.0001f)

return 0;

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.0f / m(k, k);

// 第三步

for (DWORD j = 0; j < 4; j ++)

{

if (j != k)

m(k, j) *= m(k, k);

}

// 第四步

for (DWORD i = 0; i < 4; i ++)

{

if (i != k)

{

for        (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]));

}

}

mOut = m;

return fDet * f;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB中,二进制矩阵(即只有0和1的矩阵)的可能不像普通实数矩阵那样直接使用inv()函数,因为二进制矩阵并不总是方阵,且它们不满足实数域中的除法运算规则。对于这种特殊的矩阵,通常有几种处理方式: 1. **如果矩阵是方阵并且满秩(即行秩等于列秩且非奇异)**: 可以先将二进制矩阵转换为等价的实数矩阵,例如,通过将每个1替换为正数(如1.0),将0替换为足够小的正数(通常用eps,MATLAB中的机器精度)。然后使用inv函数。 ```matlab binaryMatrix = [binary_elements]; epsilon = eps; realMatrix = binaryMatrix + epsilon * (1 - binaryMatrix); invRealMatrix = inv(realMatrix); ``` 2. **如果矩阵不是方阵或不可**: 如果矩阵是行向量(行数大于列数)或列向量(列数大于行数),则无法。如果是方阵但不满秩,那么它的逆矩阵不存在。 ```matlab if size(binaryMatrix, 1) ~= size(binaryMatrix, 2) error('Non-square matrix cannot be inverted.'); end ``` 3. **二进制矩阵特有的操作**: 对于某些特定的二进制矩阵,可能存在算法可以直接处理,例如,如果它是布尔矩阵(二值逻辑矩阵),可能需要应用布尔代数的原理。然而,这些方法通常涉及到复杂的逻辑运算而非简单的矩阵运算。 如果你遇到的是一个实际应用中的问题,并且矩阵确实满足条件能被转化为实数矩阵,上述方法是可取的。对于特殊情况,建议查阅MATLAB文档或搜索相关的数学资料以获取更精确的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值