How to iterate a differential equation in matlab?

2 views (last 30 days)
I need to iterate a differential equation until the output (the value of p) converges. Here is the code I wrote;
threshold = ((zeros(1,2048)));
old = p;
new = zeros(1,2048);
while norm( old-new) > threshold
old = p;
p = ((p * StateTransitionbwd) - (dd .* p));
new = p;
end
In the equation I am using dp/dt as p. Do you know how should I treat this differential equation and what should I change in my code?
Thanks a lot.

Answers (1)

Walter Roberson
Walter Roberson on 28 Aug 2015
Edited: Walter Roberson on 28 Aug 2015
Also note that norm() is non-negative, and you are comparing for > zeros(), so the loop is not going to terminate until the two values are identical in every component, not just close. That is not a good idea: due to numeric roundoff you can get into cycles when you get really really close, alternately overshooting and undershooting, never exactly equal.
Mind you, norm() of a vector is a scalar and you are comparing a scalar to a vector of zeros. That is going to result in a vector of results the same length as the zeros(), with each element identical. The result would be the same as if you were testing against a single 0.
  1 Comment
Salman Saeed
Salman Saeed on 28 Aug 2015
I have changed the norm to
while all(abs(old-new) > threshold)
I hope this will be fine as I want all of my elements in vectors to stop when they converge. Moreover please have a look at the link where I have attached a paper.

Sign in to comment.

Categories

Find more on Mathematics 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!