Using matrix elements as arguments

i like this post (click again to cancel)
1
i dont like this post (click again to cancel)

I have a rather easy question, or so it would seem. I have looked for an answer but was unable to find one anywhere so I'm asking it here.

I am making a very simple iterative algorithm for which the input as well as the output at the end of every iteration is a vector (or matrix for that matter). What I want to do is use these elements as arguments for several functions during each of the iteration. So for example

x=var('x')
y=var('y')
z=matrix(2,1,[ [1],[1] ]
f=x^2+y^3
H=f.hessian()

Then what I would like to do is say

H(z[0],z[1])

or

H(z)

But no matter what I try I can't seem to get it to work. Ideas?

asked Nov 26 '10

DisneySage gravatar image DisneySage
11 2

updated Nov 28 '10

niles gravatar image niles
3354 5 38 92
http://nilesjohnson.net/

2 Answers:

i like this answer (click again to cancel)
3
i dont like this answer (click again to cancel)

There is a subtle difference between "symbolic expressions" and "callable symbolic expressions", which are also termed "functions". Writing

sage: f=x^2+y^3

makes f a symbolic expression, which displays as

sage: f
x^2 + y^3

On the other hand, writing

sage: g(x,y)=x^2+y^3

makes g a callable symbolic expression, which displays as

sage: g
(x, y) |--> x^2 + y^3

With f, you need to use f.substitute to substitute values, but with g, since you have already informed sage of the variable order, you can use it like a function

sage: g(1,3)
28

The way you define your finction determines what kind of expression the corresponding Hessian is; note the difference in syntax below:

First method:

sage: x=var('x')
sage: y=var('y')
sage: z=matrix(2,1,[ [1],[1] ])
sage: f=x^2+y^3
sage: H=f.hessian()
sage: H.substitute(x=z[0,0],y=z[1,0])
[2 0]
[0 6]

sage: f
x^2 + y^3
sage: H
[  2   0]
[  0 6*y]

Second method, making g a callable symbolic expression:

sage: x=var('x')
sage: y=var('y')
sage: z=matrix(2,1,[ [1],[1] ])
sage: g(x,y)=x^2+y^3
sage: H=g.hessian()
sage: H(z[0,0],z[1,0])
[2 0]
[0 6]

sage: g
(x, y) |--> x^2 + y^3
sage: H
[  (x, y) |--> 2   (x, y) |--> 0]
[  (x, y) |--> 0 (x, y) |--> 6*y]
link

posted Nov 28 '10

niles gravatar image niles
3354 5 38 92
http://nilesjohnson.net/
i like this answer (click again to cancel)
1
i dont like this answer (click again to cancel)

This works for me:

sage: H.substitute(x=z[0,0],y=z[1,0])

(z is a matrix, so it requires two indices to specify an element.)

link

posted Nov 26 '10

John Palmieri gravatar image John Palmieri flag of United States
2605 8 23 57
http://www.math.washingto...

updated Nov 26 '10

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[hide preview]

Question tools

Tags:

Stats:

Asked: Nov 26 '10

Seen: 242 times

Last updated: Nov 28 '10

powered by ASKBOT version 0.7.22
Copyright Sage, 2010. Some rights reserved under creative commons license.