[英]Matlab coding repetition help required
所以我有這個代碼,
clc
clear all
close all
a = [1,2];
b = [1,1];
r = sqrt((a(:,1) + b(:,1))^2+((a(:,2) + b(:,2))^2));
finished=false;
while ~finished
%default case, finish if case is done
finished=true;
if r<5
display('reaching target')
a = a+1;
b = b+1;
%start from begin in this case:
finished=false;
elseif r>5
disp('job done')
end
end
現在我想要的是獲取a
和b
初始值,計算r
,以及r<5
顯示到達目標並且在a
和b
的每個分量的值增加1之后從頂部重新開始的代碼。重復該事物再次,現在再次如果r
的值小於5,則在增加值之后再次開始。 如果r>5
的值顯示'job done'
並停止運行代碼。
我想你在問如何避免在循環中重復計算r
的公式。 您可以使用匿名函數來執行此操作。
calc_r = @(x, y) sqrt((x(:,1) + y(:,1))^2 + ((x(:,2) + y(:,2))^2));
然后調用此函數以在需要時更新r
r = calc_r(a, b);
每次更新a
和b
都需要重新計算r
,如下所示:
a = [1,2];
b = [1,1];
r = sqrt((a(:,1) + b(:,1))^2+((a(:,2) + b(:,2))^2));
finished=false;
while ~finished
%default case, finish if case is done
finished=true;
r = sqrt((a(:,1) + b(:,1))^2+((a(:,2) + b(:,2))^2));
if r<5
display('reaching target')
a = a+1;
b = b+1;
%start from begin in this case:
finished=false;
elseif r>5
disp('job done')
end
end
你的向量是1維的,這意味着你不需要:
,所以更簡單的方法是:
r = sqrt((a(1) + b(1))^2+((a(2) + b(2))^2));
你並不真正需要的if
和elseif
,以確定何時停止,你可以直接使用它作為在輸入while
。 我可能會做這樣的事情(假設您不想使用匿名函數等大幅改變您的方法)。
a = [1,2];
b = [1,1];
while sqrt((a(1) + b(1))^2 + (a(2) + b(2))^2) < 5
a = a + 1;
b = b + 1;
disp('reaching target')
end
disp('job done')
如果你的方程式比上面的方程式更復雜,你可能想要像最初那樣單獨計算它(使代碼可讀)。 我還是建議你放棄了if
S和else
Ş不過。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.