FuncDesigner

  1,557 downloads
0.51 BSD License    
5.0/5 1
A Python module for function design and automatic derivatives, for Linux distributions

description

download

specifications

changelog

FuncDesigner is an open source CAS (Computer Algebra System) written in Python. Below are three examples, so you can understand how the project works.

Example:

from FuncDesigner import *

a, b, c = oovars('a', 'b', 'c')

f1, f2 = sin(a) + cos(b) - log2(c) + sqrt(b), sum(c) + c * cosh(b) / arctan(a) + c[0] * c[1] + c[-1] / (a * c.size)

f3 = f1*f2 + 2*a + sin(b) * (1+2*c.size + 3*f2.size)

f = 2*a*b*c + f1*f2 + f3 + dot(a+c, b+c)

point = {a:1, b:2, c:[3, 4, 5]} # however, you'd better use numpy arrays instead of Python lists

print(f(point))

print(f.D(point))

print(f.D(point, a))

print(f.D(point, [b]))

print(f.D(point, fixedVars = [a, c]))

Expected output:
[ 140.9337138 110.16255336 80.67870244]
{a: array([ 69.75779959, 88.89020412, 109.93551537]), b: array([-23.10565554, -39.41138045, -59.08378522]),
c: array([[ 6.19249888, 38.261221 , 38.261221 ],
[ 29.68377935, -0.18961959, 29.68377935],
[ 23.03059873, 23.03059873, -6.22406763]])}
[ 69.75779959 88.89020412 109.93551537]
{b: array([-23.10565554, -39.41138045, -59.08378522])}
{b: array([-23.10565554, -39.41138045, -59.08378522])}


 * You can use "for" cycle in FuncDesigner code

Example:

from FuncDesigner import *

a, b, c = oovars('a', 'b', 'c')

f1, f2 = sin(a) + cos(b) - log2(c) + sqrt(b), sum(c) + c * cosh(b) / arctan(a) + c[0] * c[1] + c[-1] / (a * c.size)

f3 = f1*f2 + 2*a + sin(b) * (1+2*c.size + 3*f2.size)

F = sin(f2)*f3 + 1

M = 15

for i in range(M): F = 0.5*F + 0.4*f3*cos(f1+2*f2)

point = {a:1, b:2, c:[3, 4, 5]} # however, you'd better use numpy arrays instead of Python lists

print(F(point))

print(F.D(point))

print(F.D(point, a))

print(F.D(point, [b]))

print(F.D(point, fixedVars = [a, c]))

[ 4.63468686 0.30782902 1.21725266]
{a: array([-436.83015952, 204.25331181, 186.38788436]), b: array([ 562.63390316, -273.23484496, -256.32464645]),
c: array([[ 395.96975635, 167.24928464, 55.74976155],
 [ -74.80518167, -129.34496329, -19.94804845],
 [ -57.42472654, -45.93978123, -66.30049589]])}
[-436.83015952 204.25331181 186.38788436]
{b: array([ 562.63390316, -273.23484496, -256.32464645])}
{b: array([ 562.63390316, -273.23484496, -256.32464645])}


Example:

from FuncDesigner import *

from openopt import NLP

a, b, c = oovars('a', 'b', 'c')

f = sum(a*[1, 2])**2+b**2+c**2

startPoint = {a:[100, 12], b:2, c:40} # however, you'd better use numpy arrays instead of Python lists

p = NLP(f, startPoint)

p.constraints = [(2*c+a-10)**2 < 1.5 + 0.1*b, (a-10)**28.9, a+b > [ 7.97999836, 7.8552538 ],

a < 9, (c-2)**2 < 1, b < -1.02, c > 1.01, ((b + c * log10(a).sum() - 1) ** 2).eq(0)]

r = p.solve('ralg')

print r.xf

Expected output:
...
objFunValue: 717.75631 (feasible, max constraint = 7.44605e-07)
{a: array([ 8.99999792, 8.87525277]), b: array([-1.01999971]), c: array([ 1.0613562])}
READ MORE   
Last updated on September 18th, 2013
3  
FuncDesignerFuncDesignerFuncDesigner

0 User reviews so far.

SUBMIT