两个For循环同时工作? bvp4c

问题描述:

我想解决使用bvp4c(边界条件)的微分方程系统。我使用两个for循环来解决bvp4c的功能,但问题是循环先完成,然后只有最后一个值用于第二循环的迭代,是否有办法让它们同时工作?这意味着第一个for循环的第一次迭代使用第二个循环的第一次迭代值(而不是最后一次)。感谢两个For循环同时工作? bvp4c

function RTrajfoll(X,Y) 
    clf; 
    for i = 1:length(X)-1 
     init = bvpinit(linspace(X(i),X(i+1),10),[0 0]); 
     sol = bvp4c(@Kpath1,@bcpath,init); 
     x = linspace(X(i),X(i+1),100); 
     BS = deval(sol,x); 
     plot(x,BS(1,:),'linewidth',2) 
     axis([-2 6 -2 6]) 
     hold on 
    end 

    function bv = bcpath(L,R) 
     for j = 1:length(Y)-1 
      bv = [L(1)-Y(j) R(1)-Y(j+1)]; 
     end 
    end 

end 

%Differential equations dy/dx and dtheta/dx 
function dx = Kpath1(~,c) 
    L = 0.12;       
    r = 0.1; 
    WL = 0.25;WR = 0.25; 
    y = c(1);th = c(2); 
    dy = tan(th); 
    dth = (2*((r*WR)-(r*WL)))/(L*cos(th)*((r*WR)+(r*WL))); 
    dx = [dy;dth]; 
    pose = [y;th]; 
end 
+0

“X”和“Y”长度相同。即,对于i = 1:长度(X)-1'和'对于j = 1:长度(Y)-1'是否应该彼此对应? –

+0

是的,X和Y的长度都是一样的 –

看着@Lutz'你的答案可能不需要bv的完整功能。您可能会发现提供匿名函数句柄更方便,在这种情况下,您将不需要第三个参数:

sol = bvp4c(@Kpath1,@(L,R)[L(1)-Y(i) R(1)-Y(i+1)],init); 

所观察到的行为是完全预期的行为,你多次分配给bv,返回值是最后分配的值。

您将需要指数i传递给边界条件的功能,无论是作为一个参数

sol = bvp4c(@Kpath1,@(L,R)bcpath(L,R,i),init); 

function bv = bcpath(L,R,j) 
     bv = [L(1)-Y(j) R(1)-Y(j+1)]; 
end 

或在每次迭代重新定义bcpath,使用指数作为全球变量,

 for i = 1:length(X)-1 
     function bv = bcpath(L,R) 
      bv = [L(1)-Y(i) R(1)-Y(i+1)]; 
     end 
     init = bvpinit(linspace(X(i),X(i+1),10),[0 0]); 
     sol = bvp4c(@Kpath1,@bcpath,init); 
... 
+0

是的,谢谢你的帮助:) :) –