How to use global variable which is changing in every time step?
조회 수: 2 (최근 30일)
이전 댓글 표시
I have a particular code which looks like this:
function H = newmain
global b1 b2 b3
b1=1.0;
b2=2.0;
b3=0.33;
options=odeset('InitialStep', 0.01, 'MaxStep', 0.01, 'RelTol', 10., 'AbsTol',10.);
[t2,y2]=ode45(@equation,[0:0.05:0.1],[1 2 0], options);
H = [t2 y2]
X=[b1 b2 b3]
end
function dy=equation(t,y)
global b1 b2 b3
dy=zeros(3,1);
b1=((b1+(1.-exp(-b3))))
b2=b1-y(1)
b3=b1+b2+y(2)
dy(1)=-b1*y(1);
dy(2)=b3*y(1)+b2*y(2);
dy(3)=sqrt(b1)+y(1)+y(3);
end
I have given initial values for b1,b2 and b3 which are my global variables. I want to understand how the solver uses this code to return a new value of b1,b2 and b3.
Can global be used to keep a value constant throughout the code?
I am solving 12 algebraic and 6 odes which look like the above code. b1,b2,b3 are synonymous with my algebraic variables and dy(1).... are my odes. When I solve that code I get an error saying "NaN". So I am unable to find out loophole in my code.
Thanks!
댓글 수: 0
채택된 답변
추가 답변 (1개)
Walter Roberson
2012년 10월 8일
One thing you need to keep in mind is that ode45() does not promise to evaluate in strictly increasing time steps.
참고 항목
카테고리
Help Center 및 File Exchange에서 Ordinary Differential Equations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!