5
$\begingroup$

i'm new in MATHEMATICA. I want to create an operator $D^{(f)}=\partial_x+f'-\partial^2_x$ and $D^{(g)}=\partial_x+g'-\partial^2_x$ and put it into a matrix element, then multiplied by a vector whose components are functions on $x$, say $u(x), v(x)$. For example $$\begin{pmatrix}D^{(f)} & D^{(g)}\\ D^{(g)} & D^{(f)} \end{pmatrix} \begin{pmatrix} u(x) \\ v(x) \end{pmatrix}$$

I saw the posts: Computing with matrix differential operators, How to do matrix operation if the first matrix is an operator?; but i'm very newbie on this.

My problem lives on the fact that I have problems with the matrices products because I have operators

Thanks!

EDIT: $f=f(x,y,z)$ and $g=g(x,y,z)$, both of them are function of a vector $(x,y,z)$, but we can neglect the components $y,z$ and consider only the $x$ part

$\endgroup$
3
  • $\begingroup$ Here, f and g are some functions on x or not? What are they? $\endgroup$ Commented Jun 1, 2017 at 8:25
  • $\begingroup$ If you write df = (D[#, {x, 1}] + (-D[#, {x, 2}]) &);, dg = (D[#, {x, 1}] + (-D[#, {x, 2}]) &);, mat = {{df, dg}, {dg, df}} , vec = {u[x], v[x]}, then CenterDot[mat, vec] works, with CenterDot given in the former of the linked questions. This is without f and g but adding them should be very straightforward. $\endgroup$ Commented Jun 1, 2017 at 8:57
  • $\begingroup$ For v11.3, Construct can be used, e.g., Inner[Construct, {{a # &, \!\( \*SubscriptBox[\(\[PartialD]\), \(x\)]#\) &}, {\!\( \*SubscriptBox[\(\[PartialD]\), \(y\)]#\) &, d # &}}, {u[x, y], v[x, y]}]. $\endgroup$ Commented Jul 1, 2018 at 8:06

2 Answers 2

3
$\begingroup$

We can start by defining our two differential operators and putting them into a matrix, like this:

ClearAll["Global`*"] df[w_] := D[w, x] + f'[x] w - D[w, x, x] dg[w_] := D[w, x] + g'[x] w - D[w, x, x] m = {{df, dg}, {dg, df}}; 

Now we need a way for the matrix operator to act on the vector. This is not plain multiplication. One way to get the matrix operator to act on a vector is to define a function to do it, like this:

operate[matrix_, column_] := Table[Inner[#1[#2] &, μ, column, Plus], {μ, matrix}] 

The above function is basically what those other posts were saying. Now we can use the function to apply the matrix operator to our vector.

result = operate[m, {u[x], v[x]}]; result // MatrixForm (* {u[x] f'[x] + v[x] g'[x] + u'[x] + v'[x] - u''[x] - v''[x], v[x] f'[x] + u[x] g'[x] + u'[x] + v'[x] - u''[x] - v''[x]} *) 

We could have defined our functions f[x] and g[x] at any point. For example, we can do it now, as

f[x] := Sin[x] result (* {Cos[x] u[x] + v[x] g'[x] + u'[x] + v'[x] - u''[x] - v''[x], Cos[x] v[x] + u[x] g'[x] + u'[x] + v'[x] - u''[x] - v''[x]} *) 
$\endgroup$
1
  • 2
    $\begingroup$ Simpler is operate[matrix_, column_] := Inner[Compose, matrix, column] although Compose is no longer documented. $\endgroup$ Commented Jun 1, 2017 at 15:08
3
$\begingroup$

You can make use of my DifferentialOperator paclet to do this. Install with:

PacletInstall["https://github.com/carlwoll/DifferentialOperator/releases/download/0.1/DifferentialOperator-0.0.2.paclet"] 

and load with:

<<DifferentialOperator` 

Here is an animation:

enter image description here

Also, notice how I used two different variations of the second order differential operator.

Here is the final answer so that it can be compared with other answers:

{ u[x] f'[x] + v[x] g'[x] + u'[x] + v'[x] - u''[x] - v''[x], v[x] f'[x] + u[x] g'[x] + u'[x] + v'[x] - u''[x] - v''[x] } 
$\endgroup$

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.