问题遇到的现象和发生背景
MATLAB2018a 提示未定义函数或变量cloud_transform
2021a版本则无此错误
用代码块功能插入代码,请勿粘贴截图
% 以下是主函数cloud_main.m
clc;
clear all;
% 每幅图生成N个云滴
N = 1500;
% 射击成绩原始数据,这里数据按列存储所以要转置
Y = [9.5 10.3 10.1 8.1
10.3 9.7 10.4 10.1
10.6 8.6 9.2 10.0
10.5 10.4 10.1 10.1
10.9 9.8 10.0 10.1
10.6 9.8 9.7 10.0
10.4 10.5 10.6 10.3
10.1 10.2 10.8 8.4
9.3 10.2 9.6 10.0
10.5 10.0 10.7 9.9]';
%每一组数据生成一组云滴
for i=1:size(Y,1)
%函数subplot是将多个图画到一个平面上的工具。
subplot(size(Y,1)/2,2,i);
[x,y,Ex,En,He]=cloud_transform(Y(i,:),N);
%将在第i副图上绘图
plot(x,y,'r.');
%为坐标轴命名
xlabel('射击成绩分布/环');
ylabel('确定度');
%为第i副图设置标题 num2str函数的功能是:把数值转换成字符串
title(strcat('第',num2str(i),'人射击云模型还原图谱'));
%axis( [xmin xmax ymin ymax] ) 设置当前坐标轴 x轴 和 y轴的限制范围
axis([8,12,0,1]);
end
以下是函数f2.m
%根据原始数据y_spor和需要的云滴个数n
%返回n个云滴,x代表n个云滴的数据值,y代表n个云滴的确定度
%Ex En He 分布代表原始数据的 期望 熵 超熵
function [x,y,Ex,En,He] = cloud_transform(y_spor,n)
%mean函数作用:求得矩阵的平均值(期望)
Ex=mean(y_spor);
%熵的求法:sum(abs(y_spor-Ex)).*sqrt(pi/2)
En=mean(sqrt(pi/2).*abs(y_spor-Ex));
%超熵的求法:sqrt(S.^2-En.^2) var函数作用:求得矩阵方差S^2
He=sqrt(var(y_spor)-En.^2);
for i=1:n
%生成以En为期望 以He^2为方差的正态随机数Enn
%randn(m)生成m行m列的标准正态分布的随机数或矩阵的函数
Enn=En+randn(1).*He;
%生成以Ex为期望,以Enn^2为方差的正态随机数x
x(i)=Ex+randn(1)*Enn;
%计算隶属度(确定度)
y(i)=exp(-(x(i)-Ex).^2/(2*Enn.^2));
end
end
运行结果及报错内容
我想要达到的结果
使代码正确运行