模糊关系合成运算的Matlab实现

您所在的位置:网站首页 矩阵乘法matlab程序 模糊关系合成运算的Matlab实现

模糊关系合成运算的Matlab实现

2024-07-06 17:46| 来源: 网络整理| 查看: 265

最近课程学到模糊数学,里面有关于模糊关系合成运算,传递闭包的概念,十分不好理解,本来想手算几个例子来理解的,结果算到一半就烦了还十分容易算错,于是我就打算用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)

得到的结果

0.7000 0.3000 0.4000 0.9000 0.6000 0.4000 0.7000 0.6000

结果正确! 那么求传递闭包的只需将传入的矩阵设为相同就可以了! 那么模糊相似矩阵的传递闭包怎么求呢,只需要反复调用函数,当结果不改变时,即为该模糊相似矩阵的传递闭包。 例如: [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)

于是有 如图 再次相乘 如图 再次相乘,发现结果不改变 如图 故求得传递闭包



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3