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)

本身就表示的不对追问应该怎么表达呀,我知道不对= =

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com