如何解決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的,寫代碼的時候要注意,以免寫串。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章