Using loop for calculating ode with different parameter

조회 수: 2 (최근 30일)
Martin Pecha
Martin Pecha 2017년 11월 9일
댓글: Steven Lord 2017년 11월 10일
How can I create a cycle, where I would use ode45 and be able to get a solution for 3 different values of a constant k so I don't have to change it manually.
example k=1 --> solution, then k=10 --> solution etc.
At the end, I would need to put all solutions into the same plot to compare.

답변 (1개)

Eric
Eric 2017년 11월 9일
Use a for loop. If k is non-linear, just put your values of interest into a vector.
loop_i = 0;
for k = [1 10 ....Rest of your numbers];
loop_i = loop_i+1;
[t{loop_i}, y{loop_i}] = ode45(...Whatever involving k);
end
I have to admit I don't know what size outputs the function ode45() will return, so sticking them in cells was simply a safe bet for me. If you always expect the same size vector to be returned, you could use y(:,loop_i) instead, or y(:,:,loop_i), etc. If y(:,loop_i) works for you, plotting will be as easy as plot(t,y).
  댓글 수: 5
Martin Pecha
Martin Pecha 2017년 11월 10일
Thanks, this works perfectly, however new problem occured. I have defined k=1 in function. when I use loop it give 3 same results and not taking in account the k = [1 10 100] in loop. How can I change it?
Steven Lord
Steven Lord 2017년 11월 10일
Pass k into your ODE function (the first input to the ODE solver) as an additional parameter. The description of the odefun input argument in the documentation for ode45 contains a link "Parameterizing Functions" that describes various techniques you can use to do that.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by