There is a great library called UCALC which allows you to set up an
expression and evaluate it
for e.g. you an define an expression by calling a function in UCALC
then call it with various values of x
for e.g. see this page
http://www.ucalc.com/mathparser/sample6.html
It is very fast. I have used it in VB when there is lot of number
crunching to be done.
Is there a Python equivalent.
I looked at numPy and SciPy sites (just skimmed through) did'nt seem
to have what I wanted.
Any pointers?
--
DarkCowherd
Larry Bates
Larry Bates
> Python has built in eval function and doesn't require
> a library.
>
> Larry Bates
>
Are you kidding? Read the original post a little more closely. The
o.p. is looking for a library that evaluates mathematical expressions
and is callable from python code.
max
He is absolutely correct.
From the web page referenced:
ucDefineFunction("area(length,width) = length*width");
ucDefineFunction("frac(x)=abs(abs(x)-int(abs(x)))");
ucDefineFunction("test() = 5");
ucDefineFunction("abc(x, y=10) = x + y");
ucDefineFunction("shl[x, y] = x * 2^y");
cout.precision(16);
cout << ucEval("frac(150/17) * area(20,30)") << endl;
cout << ucEval("abc(5)-abc(3,4)*(#b01101 shl 1)")
<< endl;
The python equivalent:
exec "def area(length,width): return length*width"
exec "def frac(x): return abs(abs(x) - int(abs(x)))"
exec "def test(): return 5"
exec "def abc(x, y=10): return x + y"
exec "def shl(x, y): return x * 2^y"
print eval("frac(150/17) * area(20,30)")
print eval("abc(5) - abc(3,4) * shl(0x0E, 1)")
--Scott David Daniels
Scott....@Acm.Org
Ouch, I sure was wrong. You did such a good job making me look
foolish that it was mentioned in Python-URL!. At least Larry Bates
had the grace not to call me an idiot.
max
I also forgot how to convert binary to an integer (the #b01101 above)
when I was writing it, so that last line should read:
print eval("abc(5) - abc(3,4) * shl(int('01101', 2), 1)")
--Scott David Daniels
Scott....@Acm.Org
"Python-URL!" makes a point of highlighting positive achievements.
We all create enough foolishness to obviate any need to pass *that*
on.
Well moving to Python from another language needs lots of chanegs
inside your head.
--
DarkCowherd
Python has 'eval' and 'exec', so you can process at run-time anything
that you can type into script file. However, it will be a bit more
verbose than UCALC, because Python is more general.
If you're looking for scientific calculator, which can be embedded or
scripted, then perhaps you should take a look at
http://home.eol.ca/~parkw/index.html#rpn
It is RPN calculator with full support for <math.h> functions and some
features found in typical programmable scientific calculators.
Eg.
3+4/5-8 --> rpn 4 5 / 3 + 8 - = --> -4.2
x^2+5x-10
--> rpn 'f(x)= dup 5 + x 10 -'
rpn 1 'f(x)' = --> -4
rpn 5 'f(x)' = --> 40
or it can be scripted directly using shell function, like
--> func () {
rpn $1 dup 5 + x 10 - =
}
func 1
func 5
Sum(x^2+5, 1, 10). I assume this is sum of x^2+5, for x=1,2,...,10
--> rpn clear
for i in {1..10}; do
rpn $i x^2 5 + +
done
rpn = --> 435
--
William Park <openge...@yahoo.ca>, Toronto, Canada
ThinFlash: Linux thin-client on USB key (flash) drive
http://home.eol.ca/~parkw/thinflash.html
BashDiff: Super Bash shell
http://freshmeat.net/projects/bashdiff/
Perhaps this should be:
exec "def shl(x, y): return x * 2 ** y"
or
exec "def shl(x, y): return x << y"
--Scott David Daniels
Scott....@Acm.Org