求矩阵传递闭包_模糊矩阵合成运算(模糊矩阵相乘)的Matlab实现

本文介绍了如何使用Matlab编程求解模糊矩阵的传递闭包。通过模糊矩阵的合成运算(模糊矩阵相乘),利用“先取小后取大”的算法结合max()和min()函数,实现模糊矩阵的乘法。通过反复自乘矩阵直到结果不变,即可得到传递闭包。同时,展示了对一个具体模糊矩阵进行传递闭包计算的过程。
摘要由CSDN通过智能技术生成

15ba6cb28fa1b4deaf723a7157ec434e.png

最近课程学到模糊数学,里面有关于模糊矩阵乘法传递闭包的概念,十分不好理解,本来想手算几个例子来理解的,结果算到一半就烦了还十分容易算错,于是我就打算用matlab编写一个。

这里就不讲什么是模糊矩阵的乘法了。百度上能搜到的我这里就不赘述了,网上也有很多关于传递闭包的解释,都比较通俗易懂。我看到教材求传递闭包的方法就是模糊矩阵反复自乘,当结果t(.R)不改变的时候即为传递闭包的值。

那么首先要编程的就是如何算模糊矩阵乘法,也叫模糊矩阵合成运算,算法是“先取小后取大”。用max()函数,min()函数就能搞定,最后再根据矩阵运算规则。于是有

function [R]=fuzzymm(A,B)
%模糊矩阵合成运算(模糊矩阵相乘)的Matlab实现
%运算规则,先"取小后取大"
%输入必须为二阶矩阵A为m行n列, B为n行p列;
[m,n]=size(A);[q,p]=size(B);%获得输入矩阵的维度信息
if n~=q
    disp('第一个矩阵的列数和第二个矩阵的行数不相同!');
else
    R=zeros(m,p);%初始化矩阵
for k =1:m    
    for j=1:p
        temp=[];
        for i =1:n
            Min = min(A(k,i),B(i,j)); %求出第i对的最小值
            temp=[temp Min]; %将求出的最小值加入的数组中
        end
        R(k,j)=max(temp);
    end
end
end
end

我们来测试一下

clc
clear all;
A=[0.3 0.7 0.2;1,0,0.4;0,0.5,1;0.6,0.7,0.8];
B=[0.1,0.9;0.9,0.1;0.6,0.4];
[R]=fuzzymm(A,B);
disp(R)

结果正确!

那么求传递闭包的只需将传入的矩阵设为相同就可以了!

那么模糊相似矩阵的传递闭包怎么求呢,只需要反复调用函数,当结果不改变时,即为该模糊相似矩阵的传递闭包。

例如:

[1 0.1 0.8 0.5 0.3;

0.1 1 0.1 0.2 0.4;

0.8 0.1 1 0.3 0.1;

0.5 0.2 0.3 1 0.6;

0.3 0.4 0.1 0.6 1]

clc
clear all
R=[1 0.1 0.8 0.5 0.3;0.1 1 0.1 0.2 0.4;0.8 0.1 1 0.3 0.1;0.5 0.2 0.3 1 0.6;0.3 0.4 0.1 0.6 1];
[tR]=fuzzymm(R,R)

于是有

744756cbed4a432fd00051eb3473d7ed.png

再次相乘

0f49e63863a94d6484855d9e1af3ae3c.png

再次相乘,发现结果不改变

1862d8a4075800e2e5b43277cb268cf8.png

故求得传递闭包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值