loop in a loop

7 views (last 30 days)
Hugo B
Hugo B on 25 Feb 2022
Edited: Stephen23 on 25 Feb 2022
Hello!
I want to repeat the inner loop 10 times but it doesn't work. How do I solve that?
(Part of a bigger project)
hold on;
for k=1:10
for i=1:n-1
y(i+1)=y(i)+f(y(i))*dt+g(y(i)).*(B(i+1)-B(i));
end
plot(t,y)
end
  10 Comments
Torsten
Torsten on 25 Feb 2022
B = sqrt(dt)*randn(n,1)
instead of
for i=2:n
b = b + sqrt(dt)*randn(1);
B = [B;b];
end
Otherwise, the B in the inner loop will still be unchanged.
Hugo B
Hugo B on 25 Feb 2022
Edited: Stephen23 on 25 Feb 2022
Answer in comment from Torsten works. Thank you everyone!

Sign in to comment.

Answers (2)

Torsten
Torsten on 25 Feb 2022
Edited: Torsten on 25 Feb 2022
The outer loop is superfluous - so I deleted it.
dt = ...;
B = ...;
f = @(y) ...;
g = @(y) ...;
t = ...;
y = zeros(size(t));
y(1) = ...;
for i = 2:numel(t)
y(i) = y(i-1) + f(y(i-1))*dt + g(y(i-1))*(B(i)-B(i-1));
end
plot(t,y)
  1 Comment
Hugo B
Hugo B on 25 Feb 2022
I want the outer loop to be able to repeat the inner loop 10 times. Since Brownian motion is included in earlier steps, this loop will change every time, which I want and to be able to plot it.

Sign in to comment.


Voss
Voss on 25 Feb 2022
figure();
n = 100;
t = linspace(0,1,n);
dt = t(2);
f = @some_function;
g = @some_function;
B = randn(1,100);
hold on;
for k=1:10
y = zeros(1,n); % (re-)initialize y to be all zeros for each plot
for i=1:n-1
y(i+1)=y(i)+f(y(i))*dt+g(y(i)).*(B(i+1)-B(i));
end
plot(t,y);
end
function out = some_function(in);
out = in+randn(size(in));
end
  1 Comment
Hugo B
Hugo B on 25 Feb 2022
I think this could work but now the inital values does not work. How do I add this again? initial for y I mean

Sign in to comment.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!