Why does my function keep returning zero?

11 vues (au cours des 30 derniers jours)
Prithvi Shams
Prithvi Shams le 3 Oct 2019
Commenté : Rik le 3 Oct 2019
In the following code, my objective is to plug different values of T and alpha into the functon and calculate y for two situations: when alpha < = 0.3 and when alpha > 0.3.
However, when I call the function in the command window, I keep getting y = 0. In fact, for whatever value of T and alpha I choose (in the context of the problem I'm trying to solve, T = 350 and alpha = 0.3), I get y = 0. If I remove y from the code and try to calculate just K1, K2, K3 by plugging different values of T into the function, I still get 0. What is wrong with the code?
function [y] = cure(T, alpha)
A1 = 2.101*10^8;
A2 = -2.014*10^9;
A3 = 1.96*10^5;
E1 = 8.07*10^4;
E2 = 7.78*10^4;
E3 = 5.66*10^4;
B = 0.47;
R = 8.31; %Universal gas constant
K1 = A1*exp(-(E1/R*T));
K2 = A2*exp(-(E2/R*T));
K3 = A3*exp(-(E3/R*T));
if alpha <= 0.3
y = (K1 + K2*alpha)*(1 - alpha)*(B - alpha);
elseif alpha < 0.3
y = K3(1 - alpha);
end
end
Here is how I tried to execute the function in the Command window,
[y] = cure(350, 0.3)
  3 commentaires
Prithvi Shams
Prithvi Shams le 3 Oct 2019
Silly mistake on my part! Thanks a lot, solved the problem.
Rik
Rik le 3 Oct 2019
Your conditionals almost overlap entirely.
In general it is a good idea to have an else statement with an error if you don't expect the else to ever be triggered. (same goes for switch and otherwise)

Connectez-vous pour commenter.

Réponse acceptée

Shubham Gupta
Shubham Gupta le 3 Oct 2019
Replace
K1 = A1*exp(-(E1/R*T));
by
K1 = A1*exp(-(E1/(R*T)));
ans subsequently for K2 & K3 too.

Plus de réponses (0)

Tags

Produits


Version

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by