MATLAB: How to gather all the values from a loop into an array

arrayfor loop

Hi,
I was wondering how can I gather all the values into an array because I need to plot the answer later. This is part of the code I am writing:
for i=x0:h1:xx-h1 % Where h1 is the step size
y1=y1+dy(i,y1)*h1;
i=i+h1;
end
If someone knows, please let me know! Thanks!

Best Answer

  • Knowing only what you posted, I would do something like this:
    i=x0:h1:xx-h1; % Where h1 is the step size

    y1v = zeros(size(i)); % Preallocate


    for k = 1:numel(i)
    y1=y1+dy(i,y1(k))*h1;
    y1v(k) = y1;
    end
    That stores the existing values of ‘y1’ as vector ‘y1v’ so it stores the values while not otherwise disrupting the code. The ‘i’ vector is now separate, so to plot them later, something like this would likely work:
    figure
    plot(i, y1v)
    grid
    I did not test this, however it should work.
    EDIT —
    With the full code (not available when I first posted this), it changes to:
    yi=@(x)exp(1/3*x.^3-1.2*x);
    dy=@(x,y)y*x.^2-1.2*y;
    x0=0; xx=2; y1=1; y2=1;
    xp=[0:0.01:2];
    h1=0.25;
    h2=0.1;
    i1=x0:h1:xx-h1; % Where h1 is the step size
    y1v = zeros(size(i1)); % Preallocate
    for k = 1:numel(i1)
    y1=y1+dy(i1(k),y1)*h1;
    y1v(k) = y1;
    end
    i2=x0:h2:xx-h2; % Where h2 is the step size
    y2v = zeros(size(i2)); % Preallocate
    for k = 1:numel(i1)
    y2=y2+dy(i2(k),y2)*h2;
    y2v(k) = y2;
    end
    figure
    plot(i1, y1v, i2, y2v)
    grid
    This runs without error, and appears to produce the correct result.