# How can I solve a difference-differential equation?

How do I ask Mathematica to try to solve a recursive relation that defines a sequence of functions? For example, suppose I know that $g_n(x) = g_{n-1}'(x)$ for $n > 0$ and that $g_0(x) = e^{2x}$. How can I ask Mathematica to find a closed form for $g_n(x)$? (This is just a placeholder equation to highlight my question; I know the answer of $g_n(x) = 2^n e^{2x}$, $n\geq 0$.)

A less trivial instance of the problem would be the Hermite polynomial recursion, $$H_{n+1}(x) = 2xH_n(x) - H_n'(x)$$

I don't see how to convince either `DSolve` or `RSolve` to solve it for me. `DSolve` is unhappy because $n-1$ is used on the RHS:

````DSolve[{g[n, x] == 2*D[g[n - 1, x], x]}, g, {n, x}]
````

`RSolve` just echoes my input:

````RSolve[{g[n, x] == 2*D[g[n - 1, x], x], g[0, x] == Exp[2*x]}, g, {n, x}]
````

I know finding a closed-form solution is going to be hopeless in most instances, but it seems like some cases like the above $g_n(x)$ should be doable. I have been unable to find any examples in the Mathematica documentation addressing this type of problem.

-
Are you looking for a closed form solution in terms of $n$, or you just want to compute the result for each $n$ successively? – Szabolcs Apr 24 '12 at 15:38

1
– Artes Apr 24 '12 at 15:42
I tried ```Solve[{Series[g[n, x], {x, 0, 5}, {n, 0, 5}] == 
   Series[2*D[g[n - 1, x], x], {x, 0, 5}, {n, 0, 5}]}, g, {n, x}]``` but didn't found the solution. I think you will try to search a closed form asymptotically. – GarouDan Apr 24 '12 at 16:33
@Szabolcs I'm looking for closed forms. I know that g=Table[0,{t,0,10}]; g[[1]]=Exp[2*x]; Table[g[[i+1]]=D[g[[i]],x],{i,1,9}] will compute the result (I'm sure there are more elegant ways). Artes Thanks. I'm more interested in how to deal with this paradigm rather than Hermite polynomials in particular. – UVW Apr 24 '12 at 17:01

## 2 Answers

For the simple example in the question, `FindSequenceFunction` can be used to infer the general form:

````g[0]=Exp[2x];
g[n_]:=g[n]=Expand[D[g[n-1],x]]

FindSequenceFunction[g/@Range[5],n]
Out[3]= 2^n E^(2 x)
````
-

+1 Really nice. The sentence For the simple example in the question should not be taken lightly, as FindInstance is not able to find many "easy" sequences. – belisarius Apr 24 '12 at 21:53
Thanks, @Simon.  It was probably unreasonable of me to hope for more.  This looks like a reasonable approach. – UVW Apr 25 '12 at 16:35

This is recursion, not solution-finding. That makes it fast and straightforward. For instance, the Hermite polynomial example, with memoization of the function (not just of its values at previous arguments of $x$), might look like this (although I'm sure the real experts can find a more elegant way to accomplish the same thing):

````ClearAll[g];
g[n_Integer, x_] := g[n][x];
g[0] = Function[{x}, 0];
g[1] = Function[{x}, 1];
g[n_Integer][x_] := With[{},
  g[n] = Function[{y}, Evaluate@ Expand[2 y g[n - 1, y] - D[g[n - 1, y], y]]];
  g[n][x]
  ]
````

After executing, say,

````In[2]:= g[5,x]
Out[2]= 12 - 48 x^2 + 16 x^4
````

the definition of `g` will be

````? g

g[n_Integer][x_]:=With[{},g[n]=Function[{y},Evaluate[Expand[2 y g[n-1,y]-\!\(
\*SubscriptBox[\(\[PartialD]\), \(y\)]\(g[n - 1, y]\)\)]]];g[n][x]]

g[0]=Function[{x},0]   
g[1]=Function[{x},1]
g[2]=Function[{y$},2 y$]
g[3]=Function[{y$},-2+4 y$^2]
g[4]=Function[{y$},-12 y$+8 y$^3]
g[5]=Function[{y$},12-48 y$^2+16 y$^4]
g[n_Integer,x_]:=g[n][x]
````

Those are just closed-forms for particular values of $n$. I thought the O.P. wanted a closed-form expression as a function of $n$ (and $x$, of course). – murray Apr 24 '12 at 19:34
OK, thanks for the clarification @UVW.  Nevertheless, often a list of solutions can be a good start: you can then pick out the coefficients of the components of the solutions and search for closed forms using `FindSequenceFunction` and their ilk.  Sometimes it works! – whuber Apr 24 '12 at 20:14
{"extraction_info": {"found_math": true, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 0, "mathjax_tag": 0, "mathjax_inline_tex": 14, "mathjax_display_tex": 1, "mathjax_asciimath": 0, "img_math": 0, "codecogs_latex": 0, "wp_latex": 0, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0}, "config": {"markdown_headings": true, "markdown_code": true, "boilerplate_config": {"ratio_threshold": 0.18, "absolute_threshold": 10, "end_threshold": 15, "enable": true}, "remove_buttons": true, "remove_image_figures": true, "remove_link_clusters": true, "table_config": {"min_rows": 2, "min_cols": 3, "format": "github"}, "remove_chinese": true, "remove_edit_buttons": true, "extract_latex": true}, "english_confidence": 0.8686196208000183, "perplexity_flag": "middle"}