Evalaute a string left to right
    3 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
Given an input string that represents a function (like 'f(x) = x^2 +2/2x+3') and a input value (like x=2), how can I evaluate something of this form from left to right (ignoring the pemdas rules). I think I should use some loop for this
0 commentaires
Réponses (1)
  James Tursa
      
      
 le 19 Fév 2015
        
      Modifié(e) : James Tursa
      
      
 le 19 Fév 2015
  
      If you will accept evaluating this all at once, here is one way to do it (only works if the rhs is legit MATLAB syntax, which your example isn't):
>> s = 'f(x) = x^2 + 2/(2*x) + 3'
s =
f(x) = x^2 + 2/(2*x) + 3
>> e = find(s=='=',1)
e =
     6
>> p = find(s=='(',1)
p =
     2
>> f = str2func(['@' s(p:e-1) s(e+1:end)])
f = 
    @(x)x^2+2/(2*x)+3
>> f(2)
ans =
    7.5000
If you really need to evaluate it piecemeal for some reason, that is going to be much more involved because you will need to code up a parser with operator precedences etc.
0 commentaires
Voir également
Catégories
				En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

