如何解决MATLAB云模型生成一条线的问题

最近,收到几位网友的邮件,发现有一个曲线总是趴在坐标轴上,在此以某位同学的情况为例(已授权),分析一下原因,并给出解决方案。
注意,这里是用的MATLAB,没找到其专属的代码块,因此选了python模块来加载。

1.下面是这位同学的代码

clear;
N=1500;
En1=0;
Ex1=0.103;
He1=0.0131;
Ex2=0.309;
En2=0.064;
He2=0.0081;
Ex3=0.5;
En3=0.039;
He3=0.005;
Ex4=0.691;
En4=0.064;
He4=0.0081;
Ex5=1;
En5=0.103;
He5=0.0131;
CloudDrp=zeros(2,N);
for i=1:N
E_n1=normrnd(En1,He1,1,1);
E_n2=normrnd(En2,He2,1,1);
E_n3=normrnd(En3,He3,1,1);
E_n4=normrnd(En4,He4,1,1);
E_n5=normrnd(En5,He5,1,1);
CloudDrp(1,i)=normrnd(Ex1,E_n1,1,1);
CloudDrp(2,i)=exp(-(CloudDrp(1,i)-Ex1)^2/(2*En1^2));
CloudDrp(3,i)=normrnd(Ex2,E_n2,1,1);
CloudDrp(4,i)=exp(-(CloudDrp(3,i)-Ex2)^2/(2*En2^2));
CloudDrp(5,i)=normrnd(Ex3,E_n3,1,1);
CloudDrp(6,i)=exp(-(CloudDrp(5,i)-Ex3)^2/(2*En3^2));
CloudDrp(7,i)=normrnd(Ex4,E_n4,1,1);
CloudDrp(8,i)=exp(-(CloudDrp(7,i)-Ex4)^2/(2*En4^2));
CloudDrp(9,i)=normrnd(Ex5,E_n5,1,1);
CloudDrp(10,i)=exp(-(CloudDrp(9,i)-Ex5)^2/(2*En5^2));
end
plot(CloudDrp(1,:),CloudDrp(2,:),'b.')
hold on
plot(CloudDrp(3,:),CloudDrp(4,:),'b.')
plot(CloudDrp(5,:),CloudDrp(6,:),'b.')
plot(CloudDrp(7,:),CloudDrp(8,:),'b.')
plot(CloudDrp(9,:),CloudDrp(10,:),'b.')
axis([0,1,0,1]);

2.生成的图像如下
在这里插入图片描述
可以看到,第一个图形是“趴”在坐标轴上的,隶属度为0.

3.为验证是否是Ex=0的数据有问题,把Ex=0的云单独生成。

clear;
N=1500;
En1=0;
Ex1=0.103;
He1=0.0131;
CloudDrp=zeros(2,N);
for i=1:N
E_n1=normrnd(En1,He1,1,1);
CloudDrp(1,i)=normrnd(Ex1,E_n1,1,1);
CloudDrp(2,i)=exp(-(CloudDrp(1,i)-Ex1)^2/(2*En1^2));
end
plot(CloudDrp(1,:),CloudDrp(2,:),'b.')
axis([0,1,0,1]);

在这里插入图片描述
发现确实是这一组的问题。

4.修改代码

clear;
N=3000;
Ex1=0;
En1=0.103;
He1=0.0131;
>> CloudDrp = zeros(2,N);
for i=1:N
E_n1 = normrnd(En1,He1,1,1);   
CloudDrp(1,i) = normrnd(Ex1,E_n1,1,1);
CloudDrp(2,i) = exp(-(CloudDrp(1,i)-Ex1)^2/(2*E_n1^2));
end
plot(CloudDrp(1,:),CloudDrp(2,:),'.')

在这里插入图片描述
5.检查生成的总体图形
在这里插入图片描述
7.对比发现,是绘图时多引用了参数b,网上的代码确有引入b的,写代码的时候要注意,以免写串。

发布了5 篇原创文章 · 获赞 4 · 访问量 984

猜你喜欢

转载自blog.csdn.net/weixin_44616447/article/details/104166875