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
来源:学生作业帮助网 编辑:六六作业网 时间:2025/01/01 07:38:09
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
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)
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
主要问题:
你在主程序中定义了全局变量
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