matlab输入错误怎么修改,matlab 一个错误 怎么修改
問題描述:
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
1個回答
分類:
綜合
2014-11-29
問題解答:
我來補答
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
這是對的。先把前面的好好改改再試試吧
展開全文閱讀
總結
以上是生活随笔為你收集整理的matlab输入错误怎么修改,matlab 一个错误 怎么修改的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac 本地下载安装Nginx
- 下一篇: matlab非线性优化求解,用MATLA