matlab提示生成非标量值得,Uniform 输出中存在非标量值(在索引 1 处,输出 1)。 请将 'Un......

在MATLAB程序中,出现错误:'错误使用 arrayfun',提示'Uniform 输出中存在非标量值(在索引 1 处,输出 1)'。尝试设置 'UniformOutput' 为 false,但问题仍然存在。代码涉及多工能函数'DuoGongNeng',包括随机数生成、矩阵操作和遗传算法优化。求解此问题的具体原因。

请大神帮忙看一下具体咋回事?

错误使用 arrayfun

Uniform 输出中存在非标量值(在索引 1 处,输出 1)。

请将 'UniformOutput' 设置为 false。

function [x,f]=DuoGongNeng

P=[320;170;60;200;230;260;80;80;240;70;220;220;120;240;440;420;90;270;210];

Rmin=0.8;

Rmax=0.9999;

W=[0.52;0.39;0.32;0.2;0.35];

S=120;

pc=0.9;

G=500;

pm=0.01;

x=zeros(G,19);

Rs=zeros(G,1);

f=zeros(G,1);

theta=zeros(S,19);

theta=unifrnd(0.8,0.9999,S,19);

T=0;

D=zeros(S,1);

g=zeros(S,19);

gg=zeros(5,1);

fit=@(p)(0.5+2*(S-p)/(S-1));

for r=1:500

Cs=zeros(S,1);

for i=1:S

for j=1:19

T=T+P(j)*exp(theta(i,j)/Rmin-1);

g(i,j)=exp(theta(i,j)-1);

end

Cs(i,1)=T;

gg(i,1)=g(i,1)+g(i,2)+g(i,3)+g(i,4)+g(i,5)+g(i,6)+g(i,7)+g(i,11)+g(i,12)+g(i,15)+g(i,17)+g(i,18)+g(i,19);

gg(i,2)=g(i,1)+g(i,2)+g(i,3)+g(i,4)+g(i,5)+g(i,6)+g(i,7)+g(i,8)+g(i,15)+g(i,16)+g(i,17)+g(i,18)+g(i,19);

gg(i,3)=g(i,9)+g(i,10)+g(i,11)+g(i,12)+g(i,13)+g(i,14)+g(i,15)+g(i,17)+g(i,18)+g(i,19);

gg(i,4)=g(i,1)+g(i,2)+g(i,3)+g(i,5)+g(i,15)+g(i,17)+g(i,18)+g(i,19);

gg(i,5)=g(i,1)+g(i,2)+g(i,3)+g(i,5)+g(i,8)+g(i,15)+g(i,17);

end

D=prod(theta,2);

for t=1:S

if D(t,1)<0.7

Cs(t,1)=0;

else if gg(t,1)

Cs(t,1)=0;

end

end

end

[sort0,ind]=sort(Cs);

if r>1&&sort0(1)>f(r-1)

f(r)=f(r-1);

x(r,:)=theta(r-1,:);

else f(r)=sort0(1);

x(r,:)=theta(ind(1),:);

end

FIT=zeros(120,1);

FIT(ind)=fit(1:120);

for i=1:S

if D(t,1)<0.7||gg(t,1)

FIT(i)=0;

end

end

%复制部分

CopyP=FIT/sum(FIT);

Copyind=find(CopyP>0);

interval=cumsum(CopyP(Copyind));

Test=rand(S,1);

Testresult=arrayfun(@(x)find(interval>=x,1,'first'),Test);

Frequency=accumarray(Testresult,1);

Theta=cell(length(Frequency),1);

for kk=1:length(Frequency)

Theta{kk}=repmat(theta(Copyind(kk),:),Frequency(kk),1);

end

Theta=cell2mat(Theta);

%交叉部分

Randmatch=randperm(S);

for k=1:S/2

if rand

a=unidrnd(2,1,19)-1;

temp=Theta(Randmatch(2*k-1),:).*a+Theta(Randmatch(2*k),:).*(1-a);

Theta(Randmatch(2*k),:)=Theta(Randmatch(2*k-1),:).*a+Theta(Randmatch(2*k),:).*(1-a);

Theta(Randmatch(2*k-1),:)=temp;

end

end

%变异部分

for k=1:S

if rand

pos=unidrnd(19,1);

Theta(k,pos)=unifrnd(0.9,0.99);

end

end

theta=Theta;

end

plot(1:G,f);

xlabel('迭代数目');

ylabel('总成本');

title('Process of reliability optimization allocation')

这个程序运行总是说错误使用 arrayfun

Uniform 输出中存在非标量值(在索引 1 处,输出 1)。

请将 'UniformOutput' 设置为 false。

但是看到书上arrayfun就是这样用的,不知道是哪里错了  找不到原因,求大神指点!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值