Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: NDSolve problem with switching equations

  • To: mathgroup at smc.vnet.net
  • Subject: [mg106181] Re: [mg106163] NDSolve problem with switching equations
  • From: DrMajorBob <btreat1 at austin.rr.com>
  • Date: Mon, 4 Jan 2010 05:59:40 -0500 (EST)
  • References: <201001030842.DAA10093@smc.vnet.net>
  • Reply-to: drmajorbob at yahoo.com

First, we need a square wave of amplitude one, zero up to 0.5, 0 from .05  
to 1.0, with period 1.

The following will do well enough:

Plot[UnitStep@Sin[2 Pi t], {t, 0, 2}]

So here's a solution with NDSolve:

Clear[y1, y2]
eqns = {y1'[t] == y2[t],
    y2'[t] == 1000 (1 - y1[t]^2) (y2[t] - y1[t] UnitStep@Sin[2 Pi t]),
    y1[0] == 0, y2[0] == 1};
errors = Take[eqns, 2] /. Equal -> Subtract;
{y1, y2} = {y1, y2} /. First@
     NDSolve[eqns, {y1, y2}, {t, 0, 2}];
Plot[{y1@t, y2@t}, {t, 0, 1}, AxesOrigin -> {0, 2},
  PlotStyle -> {Red, Blue}]

Accuracy is good for most of the graph:

Plot[Norm@errors, {t, .015, 2}, PlotRange -> All]

But not all:

Plot[Norm@errors, {t, 0, .015}, PlotRange -> All]

(Very interesting plots!)

Increasing WorkingPrecision works well:

Clear[y1, y2]
eqns = {y1'[t] == y2[t],
    y2'[t] == 1000 (1 - y1[t]^2) (y2[t] - y1[t] UnitStep@Sin[2 Pi t]),
    y1[0] == 0, y2[0] == 1};
errors = Take[eqns, 2] /. Equal -> Subtract;
{y1, y2} = {y1, y2} /. First@
     NDSolve[eqns, {y1, y2}, {t, 0, 1}, WorkingPrecision -> 40];
Plot[{y1@t, y2@t}, {t, 0, 1}, AxesOrigin -> {0, 1},
  PlotStyle -> {Red, Blue}]

Do the error plots again, and you'll find they're very slow.

ecause the interpolations involve a lot of points? Because Plot is working  
hard to identify features?

I'm not sure.

Bobby

On Sun, 03 Jan 2010 02:42:43 -0600, Haibo Min <haibo.min at gmail.com> wrote:

> Hello, everyone.
>
> I am trying to solve a switching ND problem using NDSolve. Specifically,
> suppose the system equation is
>
> y1'[t]==y2;
> y2'[t]==1000(1-y1^2)y2-y1;
>
> y1(0)==0;y2(0)==1;
>
> Then every half a second (0.5s), the system equation transforms to
>
>  y1'[t]==y2;
> y2'[t]==1000(1+y1^2)y2;
>
> and then, after 0.5s, it transforms back again.
>
> How to address this problem?
>
> Thank you!
>
> haibo
>


-- 
DrMajorBob at yahoo.com


  • Prev by Date: Re: More /.{I->-1} craziness
  • Next by Date: Re: NDSolve problem with switching equations
  • Previous by thread: NDSolve problem with switching equations
  • Next by thread: Re: NDSolve problem with switching equations