二元域矩阵求逆MATLAB代码

function[out]=inv_bin(in)%INV_BINSummaryofthisfunctiongoeshere%Detailedexplanationgoeshere%计算二进制稀疏矩阵的逆[m,n]=size(in);if(m~=n)fprintf(‘m~=n\n’);return;endE=eye…

大家好,又见面了,我是你们的朋友全栈君。

function [ out ] = inv_bin( in )
%INV_BIN Summary of this function goes here
%   Detailed explanation goes here
%   计算二进制稀疏矩阵的逆
[m,n] = size(in);
if(m~=n)
   fprintf('m~=n\n');
   return ;
end
E = eye(m);
%%
%做行变换,变成下三角阵
for i = 1:m
    noneZerosIndex = find(in(:,i));  %i到end行,第i列非零元
    noneZerosIndex = noneZerosIndex(find(noneZerosIndex>=i));
    if(length(noneZerosIndex)==0)  %该行为0
        randIndex = randi([i+1,m],1);
        %列交换
        temp = in(:,i);
        in(:,i) = in(:,randIndex);
        in(:,randIndex) = temp;
        %E交换
        temp = E(:,i);
        E(:,i) = E(:,randIndex);
        E(:,randIndex) = temp;
    end
    id1 = noneZerosIndex(1);
    %in交换
    temp = in(i,:);
    in(i,:) = in(id1,:);
    in(id1,:) = temp;
    %E交换
    temp = E(i,:);
    E(i,:) = E(id1,:);
    E(id1,:) = temp;
    
    noneZerosIndex = find(in(:,i));  %第i列非零元,用其中的第一行消其他行
    for cc = 1:length(noneZerosIndex)
        if(noneZerosIndex(cc)~=i)  %跳过第i行
            temp = mod(in(noneZerosIndex(cc),:)+in(i,:) , 2);
            in(noneZerosIndex(cc),:) = temp;
            temp = mod(E(noneZerosIndex(cc),:)+E(i,:) , 2);
            E(noneZerosIndex(cc),:) = temp;
        end
    end
end
out = E;
end

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129146.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • a标签去下划线或文字添加下修饰_a标签下划线(如何去掉a标签下划线)

    a标签去下划线或文字添加下修饰_a标签下划线(如何去掉a标签下划线)去掉a标签下划线:对超链接下划线设置使用代码"text-decoration"语法:text-decoration:none||underline||blink||overline||line-throughtext-decoration参数:none:.为什么我这个没有下划线?a:hover{color:red;}我爱你正常状态下的a标签是这…

    2022年5月2日
    74
  • 随机数生成 python_python生成多个随机数

    随机数生成 python_python生成多个随机数描述seed() 方法改变随机数生成器的种子,可以在调用其他随机模块函数之前调用此函数。。语法以下是seed()方法的语法:importrandomrandom.seed([x])randomrandom.seed([x])注意:seed(()是不能直接访问的,需要导入random模块,然后通过random静态对象调用该方法。参数x…

    2022年10月4日
    2
  • python中bool函数用法_在python中bool函数的取值方法「建议收藏」

    python中bool函数用法_在python中bool函数的取值方法「建议收藏」bool是Boolean的缩写,只有真(True)和假(False)两种取值bool函数只有一个参数,并根据这个参数的值返回真或者假。1.当对数字使用bool函数时,0返回假(False),任何其他值都返回真。>>>bool(0)False>>>bool(1)True>>>bool(-1)True>>>bool(213…

    2022年4月30日
    62
  • mac安装Android SDK

    mac安装Android SDK1、利用Androidsdk包进行安装:下载Androidsdk包后,点击tools下的android执行文件,SDKmanager打开空白。看网上教程需要重装sdk解决。重装sdk后,SDKmanager打开正常但无法选中各安装包前的复选框和安装按钮(整个SDKmanager点击无响应)。这个问题长时间未解决,所以放弃了此种方法。2、利用Androidcommand-line-tools安装。这种方法大概思路是:下载Androidcmdline-tools->用下载包中的s

    2022年7月21日
    19
  • Vue学习之跑马灯效果

    Vue学习之跑马灯效果Vue学习之跑马灯效果

    2022年4月23日
    40
  • vim删除多行以及插入多行

    vim删除多行以及插入多行如图最后一行所示:52,54d删除52到54行的全部内容

    2022年6月29日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号