Re: Simplifying a second order eq. system
- To: mathgroup at smc.vnet.net
- Subject: [mg45970] Re: [mg45928] Simplifying a second order eq. system
- From: Daniel Lichtblau <danl at wolfram.com>
- Date: Sat, 31 Jan 2004 05:20:33 -0500 (EST)
- References: <200401300915.EAA04894@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Gunnar Lindenblatt wrote:
> Hi,
>
> I just switched from another system to Mathematica
> 5. While all "complicated" operations (like importing Wave-Files, filtering,
> parameter fitting, plotting) just work fine, I still have problems with the
> "basics" like solving or even simplifying equations:
>
> For example, to get the telegraph equation by self-induction and capacitive
> coupling:
>
> (One can solve this problem on the space of a postage stamp...)
>
> In[1] := Remove["Global`*"]
>
> In[2] := myEqn1 = -Dt[u,x] == r i + l Dt[i,t]
>
> In[3] := myEqn2 = -Dt[i,x] == s u + c Dt[u,t]
>
>
>
> Direct approach: Using "Solve"
>
> In[4] := Solve[{myEqn1,myEqn2}, {Dt[u,{x,2}]}]
>
> results an empty set of solutions:
>
> {{}}
>
>
>
> Second try: Using "Reduce"
>
> In[5] := Reduce[{myEqn1,myEqn2}, {Dt[u,{x,2}]}]
>
> results:
>
> Reduce::nsmet: This system cannot be solved with the methods available to
> Reduce.
>
> Third try: Using "Eliminate"
>
> In[6] := Eliminate[{myEqn1,myEqn2}, {Dt[i,x],Dt[i,t]}]
>
> results:
>
> True
>
> That's fine! However, it does not really help me...
>
>
>
> (By the way, the result should be:
>
> Dt[u,{x,2}]== r s u + (r c + l s) Dt[u,t] + l c Dt[u,{t,2}])
>
> Any ideas? -- Perhaps this problem is too simple for Mathematica, so it
> rejects any help ;-)
>
> - Gunnar
This is a bit unclear to me (not to mention out of my computational
areas). I assume {x,t} are independent variables, ans {r,s,l,c} are
constants? If so, you then need to infer sufficiently many "differential
conditions" to reduce your expression. As I have no code to do that
automatically, I figured extending by all first derivatives should suffice.
I define a total derivative that automatically regards {r,s,l,c} as
constants.
myDt[a___] := Dt[a, Constants->{r,l,s,c}]
I then use your two differential polynomials, as well as two more that
enforce that {x,t} are independent.
derivexprs = {-myDt[u[x,t],x] - (r*i[x,t] + l*myDt[i[x,t],t]),
-myDt[i[x,t],x] - (s*u[x,t] + c*myDt[u[x,t],t]),
myDt[x,t], myDt[t,x]}
Now I extend by all first derivatives with respect to x and t.
prolongedderivexprs = Join[derivexprs,myDt[derivexprs,x],myDt[derivexprs,t]]
Next I find the variables, remove and reorder those that are (partial)
derivatives, remove total derivatives, and finally put them all back
together reordered in what I hope will be a useful manner.
derivvars = Select[vars, MatchQ[Head[#],Derivative[__][_]]&];
sortedderivvars = Sort[derivvars,
Apply[Plus,Head[Head[#1]]]>Apply[Plus,Head[Head[#2]]]&];
totalderivvars = Cases[vars, _Dt];
remainingvars = Complement[vars, Join[derivvars,totalderivvars]];
sortedvars = Join[sortedderivvars,totalderivvars,remainingvars];
Next I form a Groebner basis of the set of polynomials and variables.
Strictly speaking this is not a differential Groebner basis, and it
performs no differentiations in the computation. That was why I earlier
extended by first derivatives.
diffgb = GroebnerBasis[prolongedderivexprs,sortedvars];
Finally we reduce the given expression according to this basis.
InputForm[Last[PolynomialReduce[myDt[u[x,t],{x,2}], diffgb, sortedvars]]]
Out[18]//InputForm=
r*s*u[x, t] + c*r*Derivative[0, 1][u][x, t] + l*s*Derivative[0, 1][u][x,
t] +
c*l*Derivative[0, 2][u][x, t]
Not really understanding the issues, I probably made this substantially
more complicated than necessary. But it may give an idea of how you
might proceed, particularly in cases where "by hand" methods do not suffice.
Daniel Lichtblau
Wolfram Research
- References:
- Simplifying a second order eq. system tests=PRIORITY_NO_NAME version=2.55
- From: "Gunnar Lindenblatt" <Gunnar.Lindenblatt@pobox.com>
- Simplifying a second order eq. system tests=PRIORITY_NO_NAME version=2.55