需要Matlab编码重复帮助

时间:2014-02-05 18:11:30

标签: matlab

所以我有这个代码,

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'并停止运行代码。

2 个答案:

答案 0 :(得分:1)

我想你是在问如何避免重复计算循环中r的公式。您可以使用anonymous function来执行此操作。

calc_r = @(x, y) sqrt((x(:,1) + y(:,1))^2 + ((x(:,2) + y(:,2))^2));

然后调用此函数以在需要时更新r

r = calc_r(a, b);

答案 1 :(得分:1)

每次更新ra时,您都需要重新计算b,如下所示:

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')

如果你的方程式比上面的方程式更复杂,你可能想要像最初那样单独计算它(使代码可读)。我仍然建议你放弃ifelse s。