How to use global variable which is changing in every time step?

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!

 Akzeptierte Antwort

Azzi Abdelmalek
Azzi Abdelmalek am 8 Okt. 2012

0 Stimmen

use break points to debug your code

5 Kommentare

yes I will try that. thanks!
In your equation function insert
global b1 b2 b3 b
% at the end of equation function add
b=[b ;b1 b2 b3]
% don't forget in your main program to set
global b1 b2 b3 b
Hey thanks a lot! i got the solution for the above problem!!! But i have used the same logic for my actual code and it isn't working! How can i pass initial values? Thanks again!
what is your actual problem?
I have tried to explain it there. Thanks once again!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Walter Roberson
Walter Roberson am 8 Okt. 2012

0 Stimmen

One thing you need to keep in mind is that ode45() does not promise to evaluate in strictly increasing time steps.

2 Kommentare

Okay. But I am confused about the role of "global variable" . Will the solver return a new value for the same in every time step?
The solver isn't returning a new value for my code. It is using the initial values for some variables and a changing value for some global variables. What could be the problem?

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by