关于#matlab#的问题:分析第二个脚本参数不足的原因并给出修改意见

两个脚本,第一个能顺利运行,运行第二个时显示输入参数数目不足
%第一个脚本
clear all;close all;clc;
%宽和长%
width=78;
height=52;
w1=0.6;
w2=0.4;
%计算dmax%
dmax=width+height;
%运输成本 %
c=0.01;
%距离矩阵%
D = zeros(12,12);
%关联因子bij矩阵%
B = zeros(12,12);
u1=0;
u2=0;
%非物流关系矩阵%
T=[
0    3    0    0    1    2    0    0    0    0    1    0;
0    0    1    0    0    -1    0    0    0    2    0    0;
0    0    0    3    0    -1    0    0    0    2    0    0;
0    0    0    0    4    -1    0    0    0    0    0    0;
0    0    0    0    0    3    0    0    0    1    0    0;
0    0    0    0    0    0    2    -1    -1    2    -1    -1;
0    0    0    0    0    0    0    4    0    0    0    0;
0    0    0    0    0    0    0    0    0    1    3    0;
0    0    0    0    0    0    0    0    0    2    0    0;
0    0    0    0    0    0    0    0    0    0    0    0;
0    0    0    0    0    0    0    0    0    0    0    4;
0    0    0    0    0    0    0    0    0    0    0    0;
];    
%设定物流量% 
Q=[    
0    50000    1258    0    8400    13600    0    0    0    0    9625    0;
0    0    6600    0    0    0    0    0    0    34800    0    0;
0    0    0    87500    0    0    0    0    0    41600    0    0;
0    0    0    0    105000    0    0    0    0    0    0    0;
0    0    0    0    0    92000    0    0    0    6400    0    0;
0    0    0    0    0    0    36000    0    0    28700    0    0;
0    0    0    0    0    0    0    93000    0    0    0    0;
0    0    0    0    0    0    0    0    910    6300    79980    0;
0    0    0    0    0    0    0    0    0    16800    0    0;
0    0    0    0    0    0    0    0    0    0    0    0;
0    0    0    0    0    0    0    0    0    0    0    93600;
0    0    0    0    0    0    0    0    0    0    0    0;
];

%% 计算u1 %% 
cd=c*dmax; 
for i=1:10
for j=i+1:11
u1=u1+cd*Q(i,j);
end
end
u1=w1/u1;
%% 计算u2 %% 
for i=1:10
for j=i+1:11
u2=u2+T(i,j);
end
end
u2=w2/u2;
%第二个脚本
function fit=compute_fit(par) 
MAX=0;
A1=0; 
A2=0;
%% 固定系数
u1=1.4e-6;
 u2=1.5e-2;
%% 计算参数
[c Q T D B]=load_data(par);
l=[20 35 25 10 20 22 22 20 8 10 28];
w=[20 15 22 28 15 28 25 28 25 15 22];
l=l-3*ones(1,11);
w=w-3*ones(1,11); 
H=80;
W=90;
flag=0;
%% 计算第一项和第二项 目标函数第一项
for i=1:10
for j=i+1:11
A1 = A1 + c*Q(i,j)*D(i,j); 
A2 = A2 + c*T(i,j)*B(i,j);
end
end
%% 计算约束
for i=1:10
pp1 =par.x(i)-l(i)/2;
pp2 =par.y(i)-w(i)/2;
pp3 =H-l(i)/2-par.x(i);
pp4 =W-w(i)/2-par.y(i);
if ( pp1<0 || pp2<0 || pp3<0 || pp4<0 )
 flag=1;
break;
end
for j=1:10
if (i==j)
continue;
end
kk1=max([l(i)/2 + l(j)/2 - abs(par.x(i) - par.x(j)),0]);
kk2=max([w(i)/2 + w(j)/2 - abs(par.y(i) - par.y(j)),0]);

if ((kk1*kk2) ~= 0) 
flag = 1; 
break;
end
end
if ( flag == 1)
break;
end
end
%% 计算适应度
if (flag == 1)
fit=-1;

else
fit=1/(MAX + u1*A1 + u2*A2);
end

end
错误结果

![img](

######https://img-mid.csdnimg.cn/release/static/image/mid/ask/834803096546162.png "#left")
我的解答思路和尝试过的方法
看起来是第二个脚本在引用第一个脚本的参数时出现了问题,尝试过改第一个脚本的文件名,不起作用

我想要达到的结果

分析第二个脚本参数不足的原因并给出修改意见,使第二个脚本顺利运行,最终得到fit的值

第二个脚本你需要输入变量par,且这个变量是个结构体,里面有x和y即par.x和par.y的值
然后命令行是:

fit=compute_fit(par) 

没有par变量,不用命令行,直接运行是行不通的

怎样输入变量par呢,可以给一个示范吗
另外,您所说的x和y即par.x和par.y的值是单个数值还是类似下面这样的数据组呢
x=[56.4015 23.1922 52.7571 44.5785 70.9325 52.1415 60.9192 40.8203 39.5787 62.3682 19.3412]
y=[18.3244 20.5364 32.5016 56.7259 55.1850 14.3259 32.9592 39.9782 33.9240 47.1273 45.5385]
par.x=[-2.0802 -0.6835 -4.8451 4.8406 -3.3283 -3.9378 -1.2759 -3.0188 -0.1031 -1.6051 4.5163]
par.y=[4.2033 -4.4732 2.3786 -2.3088 -0.7716 0.4787 4.4274 -0.8226 4.8305 -1.9855 2.0110]

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632