作业帮 > 综合 > 作业

matlab 一个错误 怎么修改

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/05 22:59:35
matlab 一个错误 怎么修改
clc,clear
a=[3 2
1 5
5 4
4 7
0 8
3 11
7 9
9 6
10 2
14 0
17 3
14 6
12 9
10 12
7 14
2 16
6 18
11 17
15 12
19 9
22 5
21 0
27 9
15 19
15 14
20 17
21 13
24 20
25 16
28 18
5 12
17 16
25 7
9 20
9 15
30 12];
a1=[1.50
1.80
2.55
1.20
0.85
1.30
3.20
2.30
1.40
1.50
1.10
2.70
1.80
2.80
0.60
1.50
0.80
1.50
0.80
1.40
1.20
1.80
1.40
1.60
2.60
1.00
2.00
1.00
2.10
1.20
1.90
1.30
3.20
1.20
2.50
1.30];%a1为各个站点的垃圾量
a2=[];%a2中的aij 为第i个节点到第j个节点两者垃圾重量之和
for n=1:36
a2(n,1)=a1(n);
end
for i=1:36
for j=2:36
a2(i,j)=a1(i)+a1(j);
end
end
a2;
x=a(:,1);
y=a(:,2);
plot(x,y,'*')
grid on
set(gca,'xTick',(0:30))
set(gca,'yTick',(0:20))
for i=1:36
s1(i)=a(i,1)+a(i,2);
end
s1
for m=1:20
hang=find(s1==max(s1));%找到距离最远的点的下标
if length(hang)>1&max(s1)~=0
hang=hang(1);
end
%从最远点开始拉垃圾 然后寻找下一个距离最远点最近的 并且在它左下方的点
k=1;
a3(1,1)=hang;%用a3来放已近找到的点
s1(hang)=0;%将已经用过的点在s1中置为0
d=zeros(1,36);
t=a1(hang);
for n=1:35
x=a(hang,1);
y=a(hang,2);
for i=1:36
if a(i,1)6
continue;
else
if length(hang)==1&max(d)~=0
k=k+1;
a3(m,k)=hang;
s1(hang)=0;
end
end
end
end
a3
Subscripted assignment dimension mismatch.
Error in baidu (line 101)
a3(1,1)=hang;%用a3来放已近找到的点
是说这个错误?其实就是维数不对,hang可能不是一个数字,可能是一个矩阵.因为你的代码下面这一句:
if length(hang)>1&max(s1)~=0
hang=hang(1);
end
%从最远点开始拉垃圾 然后寻找下一个距离最远点最近的 并且在它左下方的点
k=1;
a3(1,1)=hang;%用a3来放已近找到的点
你给hang赋值为hang(1)是有条件的,条件不满足的时候hang就不是一个数字而是一个矩阵,事实上你输出s1就会发现,max(s1)==0,这样hang就不会是一个数字了,具体你的要求我不大明了,要改的话可以考虑把这个判断语句改一改.就帮你到这了
再问: 其实a3(m,k)=hang
if length(hang)>1&max(s1)~=0
hang=hang(1);
end

当时怕hang不为一个数 所以才有上面的代码
然而当hang 不满足上面的式子的时候 是不是s1中的所有元素已经全部置为0了呢
请教高手
到底该怎么修改才能达到将s1中所有元素 逐渐放入a3 然后s1中元素 逐渐变为0
再答: 首先第一个问题。
反例:当length(hang)=1且max(s1)=1时,它不满足这个式子,故s1中并非所有元素置0。故式子不对,建议不要第一个判断条件,即改成max(s1)~=0,这样就对了。原因自己思考思考
至于第二个问题,你是说这?
if length(hang)==1&max(d)~=0
k=k+1;
a3(m,k)=hang;
s1(hang)=0;
end
这是对的。先把前面的好好改改再试试吧