簡體   English   中英

需要Matlab編碼重復幫助

[英]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

現在我想要的是獲取ab初始值,計算r ,以及r<5顯示到達目標並且在ab的每個分量的值增加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);

每次更新ab都需要重新計算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));

你並不真正需要的ifelseif ,以確定何時停止,你可以直接使用它作為在輸入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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM