Evalaute a string left to right

1 view (last 30 days)
Bob Whiley
Bob Whiley on 19 Feb 2015
Edited: James Tursa on 19 Feb 2015
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

Answers (1)

James Tursa
James Tursa on 19 Feb 2015
Edited: James Tursa on 19 Feb 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.

Categories

Find more on Characters and Strings in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!