作业帮 > 综合 > 作业

matlab子函数中if语句不能运行

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/29 00:44:30
matlab子函数中if语句不能运行
主函数如下:
A=[80,20,100;40,30,30;10,90,60];
global M m ave
M=max(A);
m=min(A);
ave=mean(A);
eta(1,:)=M./sum(M);
eta(2,:)=ave./sum(ave);
eta(3,:)=m./sum(m);
alpha=0;
julei(A)
子函数如下:
function sigma=julei(A)
sigma(3,3)=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
sigma
下面是运行结果
? Undefined function or method 'ave' for input arguments of type 'double'.
Error in ==> julei at 5
if A(i,j)>=ave(j)
Error in ==> zhuchengxu at 10
julei(A)
主要问题:你在主程序中定义了全局变量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