matlab子函数中if语句不能运行
发布网友
发布时间:2022-04-22 07:01
我来回答
共3个回答
热心网友
时间:2022-06-17 03:17
主要问题:
你在主程序中定义了全局变量
global M m ave
要想在函数中使用这几个全局变量,需要在函数中也用同样的语句进行声明才行,否则在函数中出现的标识符会被理解为局部变量或函数的名字。
另外,主程序中的alpha和eta也不会自己跑到函数中去,也需要声明成全局变量,或者把定义移到函数中去。
其实,你所定义的几个全局变量(以及alpha和eta)在主程序中并没有其他用处,这样的话,不如把这些变量直接在函数中作为局部变量来定义和使用,例如:
function sigma=julei(A)
M=max(A);
m=min(A);
ave=mean(A);
eta(1,:)=M./sum(M);
eta(2,:)=ave./sum(ave);
eta(3,:)=m./sum(m);
sigma(3,3)=0;
alpha=0;
for i=1:size(A,1)
for j=1:size(A,2)
if A(i,j)>=ave(j)
sigma(i,1)=sigma(i,1)+(A(i,j)-ave(j))/((1+alpha)*M(j)-ave(j))*eta(i,j);
sigma(i,2)=sigma(i,2)+((1+alpha)*M(j)-A(i,j))/((1+alpha)*M(j)-ave(j))*eta(i,j);
else
sigma(i,2)=sigma(i,2)+(A(i,j)-(1-alpha)*m(j))/(ave(j)-(1-alpha)*m(j))*eta(i,j);
sigma(i,3)=sigma(i,3)+((ave(j)-A(i,j))/(ave(j)-(1-alpha)*m(j)))*eta(i,j);
end
end
end
这样,主程序就很简单了:
A=[80,20,100;40,30,30;10,90,60];
S=julei(A)
输出:
S =
0.6667 0 0.3333
0 0.3685 0.6315
0.3333 0.4500 0.2167
热心网友
时间:2022-06-17 03:17
A(i,j)>=ave(j) 想表达什么意思?
julei(A)是想干啥?没见过这种表达的。
热心网友
时间:2022-06-17 03:17
if A(i,j)>=ave(j)
本身就表示的不对追问应该怎么表达呀,我知道不对= =