Comments (1)
Proof of concept for option 4:
from casadi import *
h = MX.sym("h")
v = MX.sym("v")
m = MX.sym("m")
f = Function('f',[h],[h**2])
cg = CodeGenerator('f')
cg.add(f)
cg.add(f.forward(1))
cg.generate()
f = external('f',Importer('f.c','shell'))
g = Function('g',[h],[cos(h)])
cg = CodeGenerator('g')
cg.add(g)
cg.add(g.forward(1))
cg.generate()
g = external('g',Importer('g.c','shell'))
a = MX.sym("a")
b = MX.sym("b")
u = 9
p = [a,b]
y = [v, (u-a*v**2)/m-9.81, -b*u**2+g(f(h)*m+sqrt(v))]
x = [h,v,m]
def my_jacobian(y,x,p):
[y_lifted,w,wdef] = extract(y,{"lift_shared":False,"lift_calls":True})
sp = jacobian_sparsity(vcat(wdef),vcat(w))
nnz = [jacobian(wdef[r],w[c]) for r,c in zip(sp.row(),sp.get_col())]
J = Function("J",[vcat(x),vcat(w),vcat(p)],[vcat(nnz)],{"always_inline":True})
jac = MX.sym("jac",sp)
jacnnz = MX.sym("jacnnz",len(nnz))
jac = sparsity_cast(jacnnz,sp)
f = Function('f',[vcat(x),vcat(w),vcat(p),jacnnz],[jacobian(vcat(y_lifted),vcat(w)) @ solve(DM.eye(jac.shape[0])- jac,jacobian(vcat(wdef),vcat(x))) +jacobian(vcat(y_lifted),vcat(x))])
f = f.expand('f',{"cse":True,"always_inline":True})
[w_expr,_] = substitute_inplace(w,wdef,y_lifted)
return f(vcat(x),vcat(w_expr),vcat(p),J(vcat(x),vcat(w_expr),vcat(p)))
ref = Function('ref',[vcat(x),vcat(p)],[jacobian(vcat(y),vcat(x))])
f = Function('f',[vcat(x),vcat(p)],[my_jacobian(y,x,p)])
DM.rng(1)
x_ = DM.rand(3)
p_ = DM.rand(2)
print(ref(x_,p_))
print(f(x_,p_))
from casadi.
Related Issues (20)
- undefined reference to `casadi::difference` when building in windows/mingw HOT 1
- Graceful failure when trying to load a co-simulation only FMU
- Using rootfinder object inside optimization fails HOT 2
- (Installation help) Python casadi, module not found _casadi on Ubuntu
- timer reset missing?
- missing .so file HOT 5
- Fix numpy compat
- interface with HiGHS
- unable to specify generation directory with Function.generate HOT 1
- Code generation bug for triusolve function calls HOT 1
- Bug in triusolve HOT 1
- Solving a QP (conic) with qrqp: iter_count after successful optimization set to -1
- Wiki-based user "ExtraDoc" are deleted by update script?
- Hard to read Wiki docs text copied from python API
- Indexing using MX variables/ expressions
- Issue with Casadi callback in Matlab HOT 1
- terminate called after throwing an instance of 'casadi::CasadiException'
- Possibly Unnecessary << Overloads for ostream
- BSplineParametric is extremely slow
- free_mem in codegen HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from casadi.