Ask Your Question

Asker's profile - activity

2023-05-06 16:20:09 +0200 received badge  Notable Question (source)
2023-05-06 16:20:09 +0200 received badge  Popular Question (source)
2021-05-19 13:15:43 +0200 received badge  Famous Question (source)
2021-04-03 08:26:44 +0200 received badge  Student (source)
2021-04-03 08:24:50 +0200 received badge  Notable Question (source)
2019-08-30 17:56:43 +0200 received badge  Popular Question (source)
2017-08-15 09:57:19 +0200 commented question Defining functions acting on matrix elements?

For what I need in this particular case, yes, it is fine.

Since I am new to Sage, however, I still wonder if there are cases when a callable symbolic expression acting on single elements of an input matrix is required, and how to solve the problem.

Many thanks, Dan.

2017-08-14 21:58:15 +0200 asked a question Defining functions acting on matrix elements?

Hi guys, how can I define a function able to act on the elements of a matrix, with the matrix being the input to the function? I would like the function to be a callable symbolic expression, which I hear can be differentiated and so on, whereas other entities cannot.

Here's a sample of what I mean:

f(M) = M[0,0]+M[1,1]

that is, the user will ensure that M is correctly defined as a matrix of size at least 2x2 before being passed to f(M), but at this stage the symbol M is intended just as a dummy variable, similar to z in a definition like g(z) = conjugate(z). Unfortunately, my code does not seem to work...

Thank you for your suggestions!

2017-07-20 10:08:47 +0200 received badge  Scholar (source)
2017-07-19 17:35:23 +0200 commented answer How can I substitute "target" functions inside expressions?

Thank you very much: this is exactly what I needed! I suspected something of this sort due to the way the keyword abs is highlighted in the notebook, but didn't find the straight solution. I will be more cautious in the future, as well as post shorter questions ;)

2017-07-19 16:46:40 +0200 asked a question How can I substitute "target" functions inside expressions?

Hi all, I'm a Sage newbie striving to manipulate complex-valued expressions. In particular, I need to convert expressions like abs(x)^2 into x*conj(x) and back, within expressions including multiple instances of these patterns. In other words, x is here just a placeholder for what may be a list of different variables or expressions, but I do not want to substitute each of these separately or manually.

Here is some experimenting that I have been doing on the matter with generic functions, as well as standard functions (sin):

# Some initialization
reset()
forget()
f = function('foo')(x)
g = function('goo')(x)
h = function('hoo')(x)
h(x) = f(x)^2

# Types and basic substitutions
print(type(foo))
print(type(goo))
print(type(hoo))

print(type(f))
print(type(g))
print(type(h))

print(h(x))
print(h.substitute_function(f,g))
print(h.substitute_function(foo,goo))

# Substitution of a function
h(x) = sin(x)^2
print(type(h))
print(type(sin))
print(h.substitute_function(sin,goo))

If I try, however, to substitute abs with some other function, I do not get what I want:

# Substitution of a built-in function (not working)
h(x) = abs(x)^2
print(type(h))
print(type(abs))
print(h.substitute_function(abs,goo))

Here is a workaround that I came up with, but I hope someone can let me know a more elegant/standard technique:

# Substitute abs(x) with sqrt(x*conj(x)): a workaround
moo = sage.functions.other.Function_abs()
m(x) = abs(x)
c(x) = (x*x.conjugate()).sqrt()
print(type(moo))
print(type(m))
print(type(c))

s(x) = h.substitute_function(moo,c)
print(s(x))

Also, I found a lot of headaches with the opposite conversion, and following is my attempt at solving the problem:

# Substitute sqrt(x*conj(x)) with abs(x): a workaround
doo(x) = goo(x)/x
qoo(x) = abs(x)^2
b_temp(x) = s.substitute_function(conjugate,goo)
print(b_temp(x))
b_temp(x) = b_temp.substitute_function(goo,doo)
print(b_temp(x))
b(x) = b_temp.substitute_function(goo,qoo)
print(b(x))

Honestly, it seems strange to me that one cannot easily recast an expression in order to make certain target functions to appear.

Thank you in advance for your support!