Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

Why is MATLAB not solving for the internal heat generation components of my loop?

Asked by Paul on 10 Jan 2013

I am trying to model 1D transient heat transfer in the brain, however my code is not solving for the M and Q values below. The code is not returning an error but seems to be simply ignoring the values.

elseif 3 < i < 5
T(i,m+1)    = T(i,m) + k_skull*del_t_skull/(rho_skull*Cp_skull*del_i^2)*(T(i-1,m)-2*T(i,m)+T(i+1,m)) 
+ M_skull*3*exp((T(i,m)- T_art)/10) + Q_skull*3*exp((T(i,m)- T_art)/10)* rho_blood*Cp_blood*(T_art - T(i,m));

Note:

del_i = spacing of nodes
del_t_skull =  0.25*del_i^2/alpha_skull;
Where alpha is the thermal diffusvity.

Any help is very much appreciated

2 Comments

Image Analyst on 10 Jan 2013

You didn't give the code for solving M and Q - you just gave code for determining T. And you mean M_skull, and Q_skull, right? Well, there is nowhere in your code where you determine M_skull and Q_skull. They're just assumed to already have some values when you get to this line where you calculate T.

Paul on 12 Jan 2013

Sorry I am referring to M_skull and Q_skull. M_skull and Q_skull both are reference values (at 310 Kelvin) determined earlier in the code, but the value of M and Q are temperature dependent and I was trying to solve for this in the above code.

For example the M value is determined by the following equation: M = M_skull*3e^((T-T_art)/10)

where T is the temperature of a node at time m and T_art is a constant value for the arterial temperature.

Paul

Products

No products are associated with this question.

2 Answers

Answer by Walter Roberson on 12 Jan 2013
elseif 3 < i < 5

is evaluated as

elseif ((3 < i) < 5)

The (3 < i) part returns true (1) or false (0), both of which are always less than 5, so your elseif would always be considered to be true.

MATLAB does not have a range-test syntax. Use

elseif (3 < i) & (i < 5)

0 Comments

Walter Roberson
Answer by Roger Stafford on 12 Jan 2013

Besides the trouble Walter describes, you apparently lack an ellipsis following this line:

 T(i,m+1)= T(i,m)+k_skull*del_t_skull/(rho_skull*Cp_skull*del_i^2)*(T(i-1,m)-2*T(i,m)+T(i+1,m)) ...

The way it is now, the line after this with M_skull and Q_skull won't be included in the calculation. but you will get an unwanted display of the results of this line each time it executes.

0 Comments

Roger Stafford

Contact us