mathieuH a écrit:Oui, ca marche pas trop mal, il y a juste un truc qui me gêne:
on peut faire f(x) mais pas jf(x). On est obligé de lui donner un vecteur...
mathieuH a écrit:> fun_der([3,2]);
mathieuH a écrit:Oui, ca marche pas trop mal, il y a juste un truc qui me gêne:
on peut faire f(x) mais pas jf(x). On est obligé de lui donner un vecteur...
with(linalg) :
jacobian2 := proc(f,n) local p,L,fp,s;
fp := f(p) ;
L := [seq([seq( diff(fp[i,1], p[j]), j=1..n)], i=1..rowdim(fp))];
s := seq(p[i], i=1..n) ;
RETURN( matrix@unapply(L, s)@op@unapply([s], p) );
end :> f := p -> matrix(2,1,[p[1]*p[2]+p[3]^4,p[2]^2*p[3]]);
4 2
f := p -> matrix(2, 1, [p[1] p[2] + p[3] , p[2] p[3]])
> jf := jacobian2(f,6) :
> jf(r) ;
[ 3 ]
[r[2] r[1] 4 r[3] 0 0 0]
[ ]
[ 2 ]
[ 0 2 r[2] r[3] r[2] 0 0 0]
> jf([a,b,c,d,2,2]);
[ 3 ]
[b a 4 c 0 0 0]
[ ]
[ 2 ]
[0 2 b c b 0 0 0]
jacobian2 := proc(f,n) local p,L,fp,fpi,s;
fp := f(p) ;
s := seq(p[i], i=1..n) ;
L := entries(map(i -> seq( diff(i, j), j=[s]), fp));
RETURN( matrix@unapply([L], s)@op@unapply([s], p) );
end :jacobian2 := proc(f,n) local p,L,fp,s;
fp := convert( col(f(p),1), list) ;
s := seq(p[i], i=1..n) ;
L := [seq([seq( diff(i, j), j=[s])], i=fp)];
RETURN( matrix@unapply(L, s)@op@unapply([s], p) );
end :
jacobian2 := proc(f,n) local p,L,fp,s;
fp := convert(f(p), listlist) ;
s := seq(p[i], i=1..n) ;
L := [seq([seq(diff(i[1],j), j=[s])], i=fp)];
RETURN( matrix@unapply(L, s)@op@unapply([s], p) );
end :
f := p -> matrix(3,1,[p[1]*p[2]+p[3]^4,p[2]^2*p[3], p[6]^2]);
4 2 2
f := p -> matrix(3, 1, [p[1] p[2] + p[3] , p[2] p[3], p[6] ])
jf := jacobian2(f,2) :
jf(x) ;
[x[2] x[1] ]
[ ]
[ 0 2 x[2] p[3]]
[ ]
[ 0 0 ]
with(linalg) :
jacobian3 := proc(f,xp,p,n) local L,fp,s;
fp := convert(f(op(xp)), listlist) ;
s := seq(p[i], i=1..n) ;
L := [seq([seq(diff(i[1],j), j=[s])], i=fp)];
RETURN( matrix@unapply(L, s)@op@unapply([s], p) );
end :fun := (x,p) -> matrix(2,1,[p[1]*x[3]*p[2],x[1]^2]) : fun(x,p);
[p[1] x[3] p[2]]
[ ]
[ 2 ]
[ x[1] ]
jf := jacobian3(fun,[x,p],p,2) : jf(p) ;
[x[3] p[2] p[1] x[3]]
[ ]
[ 0 0 ]
jf := jacobian3(fun,[x,p],x,3) : jf(x) ;
[ 0 0 p[1] p[2]]
[ ]
[2 x[1] 0 0 ]
with(linalg) :
jacobian3 := proc(f,xp,n,q) local x,p,nx,np,L,fp,sp,sx,s;
x,p,nx,np := op(xp),op(n) ;
sp := seq(p[i], i=1..np) ;
sx := seq(x[i], i=1..nx) ;
s := `if`(q=x, sx, sp) ;
fp := convert(f(x,p), listlist) ;
L := [seq([seq(diff(i[1],j), j=[s])], i=fp)] ;
RETURN( matrix@unapply(L, sx, sp)@op@unapply([sx,sp], x, p) );
end :fun := (x,p) -> matrix(2,1,[p[1]*x[3]*p[2],x[1]^2]) : fun(x,p);
[p[1] x[3] p[2]]
[ ]
[ 2 ]
[ x[1] ]
jf := jacobian3(fun,[x,p],[3,2],p) : jf(x,p) ;
[x[3] p[2] p[1] x[3]]
[ ]
[ 0 0 ]
jf := jacobian3(fun,[x,p],[3,2],x) : jf(x,p) ;
[ 0 0 p[1] p[2]]
[ ]
[2 x[1] 0 0 ]
with(linalg) :
jacobian3 := proc(f,nx,np,q) local x,p,L,fp,sp,sx,s;
sp := seq(p[i], i=1..np) ;
sx := seq(x[i], i=1..nx) ;
s := `if`(q=d1, sx, sp) ;
fp := convert(f(x,p), listlist) ;
L := [seq([seq(diff(i[1],j), j=[s])], i=fp)] ;
RETURN( matrix@unapply(L, sx, sp)@op@unapply([sx,sp], x, p) );
end :fun := (x,p) -> matrix(2,1,[p[1]*x[3]*p[2],x[1]^2]) : fun(a,b);
[b[1] a[3] b[2]]
[ ]
[ 2 ]
[ a[1] ]
jf := jacobian3(fun,3,2,d1) : jf(a,b) ;
[ 0 0 b[1] b[2]]
[ ]
[2 a[1] 0 0 ]
jf := jacobian3(fun,3,2,d2) : jf(a,b) ;
[a[3] b[2] b[1] a[3]]
[ ]
[ 0 0 ]
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 24 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :