MathGroup Archive 2003

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

Search the Archive

Re: Re: Re: Condition/constraint problem

  • To: mathgroup at smc.vnet.net
  • Subject: [mg41024] Re: [mg40976] Re: [mg40938] Re: Condition/constraint problem
  • From: Bobby Treat <drmajorbob+MathGroup3528 at mailblocks.com>
  • Date: Tue, 29 Apr 2003 05:24:30 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Compare ND with the simplistic method, for the same stepsize:

<< NumericalMath`NLimit`
f = 3/2000 + (3/2500)*Sin[70*#1] &;
vx1[t_] := 3/2000 + (3/2500)*Sin[70*t] /; t < 5
nd[t_] := ND[vx1[x], x, t, Scale -> 0.001]
myDv[step_] := (vx1[#1 + step] - vx1[#1 - step])/(2*step) &
plot = Plot[{ND[vx1[x], x,
  t, Scale -> 0.001] - f'[t], myDv[
    0.001][t] - f'[t]}, {t, 0, 2}, ImageSize ->
    500, PlotRange -> All, DisplayFunction -> Identity];
Max /@ Abs@(Cases[plot, Line[a_] :> a, Infinity][[All, All, 2]])

{7.651476674475077*^-12, 0.00006858319495960108}

Dt and Derivative do well if given enough precision (and time), but so 
does ND -- and much faster.

Bobby

-----Original Message-----
From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
To: mathgroup at smc.vnet.net
u8514501 at cc.nctu.edu.tw
Subject: [mg41024] Re: [mg40976] Re: [mg40938] Re: Condition/constraint problem

Well, if you are willing to wait a bit then to get pretty small error 
all you need to do is:


In[6]:=
$MinPrecision = $MaxPrecision = 50


Out[6]=
50


In[7]:=
f = 3/2000 + (3/2500)*Sin[70*#1] & ;


In[8]:=
vx1[t_] := 3/2000 + (3/2500)*Sin[70*t] /; t < 5
fin1 = Dt[vx1[t], t];
plot = Plot[fin1 - Derivative[1][f][t], {t, 0, 2}, ImageSize -> 500,
  PlotRange -> All];
Max[Abs[Cases[plot, Line[a_] :> a, Infinity][[1,All,2]]]]


(Graph omitted)


Out[11]=
4.173050793809807*^-13


etc.






On Tuesday, April 29, 2003, at 03:44 am, Bobby Treat wrote:


> Trying to understand the issues better, I tried a simpleton numerical 
> method:
>
> f = 0.0015 + 0.0012 Sin[70 #] &;
> myDv[step_] := If[#1 + step < 5, (
> f[#1 + step] - f[#1 - step])/(2*step), undefined] &
> maxError[delta_] := Block[{$DisplayFunction},
> plot = Plot[{f'[t] - myDv[delta][t]}, {t, 0, 2}, PlotPoints ->
> 100, ImageSize -> 500];
> Max@Abs@Cases[plot, Line[a_] :> a, Infinity][[1, All, 2]]
> ]
> ListPlot[Table[{delta,
> maxError[delta]}, {delta, .1, 1.1, .1}], AxesOrigin -> {0, > 
Automatic}];
>
> Even with relatively huge step-sizes, this error is smaller than the 
> one Derivative is making:
>
> vx1[t_] := 0.0015 + 0.0012 Sin[70 t] /; t < 5
> fin1 = Dt[vx1[t], t];
> plot = Plot[fin1 - f'[t], {t, 0, 2}, PlotPoints -> 100, ImageSize ->
> 500, PlotRange -> All];
> Max@Abs@Cases[plot, Line[a_] :> a, Infinity][[1, All, 2]]
>
> 0.12411
>
> There's also this behavior, as Peltio already pointed out:
>
> Table[fin1, {t, 4.4, 5, 0.1}]
> Table[myDv[0.01][t], {t, 4.4, 5, 0.1}]
> Table[f'[t], {t, 4.4, 5, 0.1}]
>
> {-0.0398025806772852, -0.02675008852536776,
> Derivative[1][vx1][4.6000000000000005],
> Derivative[1][vx1][4.7], Derivative[1][vx1][
> 4.800000000000001], Derivative[1][vx1][
> 4.9], Derivative[1][vx1][5.]}
>
> {0.0767133, 0.0515567, 0.00102404, -0.0500126, -0.0764333,
> -0.0652338, undefined}
>
> {0.0833559, 0.0560209, 0.00111271, -0.0543432, -0.0830516,
> -0.0708824, -0.0238252}
>
> There may not be a bug, but it sure ain't impressive!
>
> Bobby
>
> -----Original Message-----
> From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
To: mathgroup at smc.vnet.net
> To: Bobby Treat <drmajorbob+MathGroup3528 at mailblocks.com>
> Cc: mathgroup at smc.vnet.net; Jens-Peer Kuska > 
<kuska at informatik.uni-leipzig.de>; u8514501 at cc.nctu.edu.tw
> Sent: Sat, 26 Apr 2003 20:01:28 +0900
> Subject: [mg41024] Re: [mg40976] Re: [mg40938] Re: Condition/constraint problem
>
> I forgot to say one (rather obvious) thing so just for the sake of > 
completeness: the reason for the difference is, of course, that the > 
first derivative is computed numerically while the second symbolically 
 > and the value specified for t is substituted into the symbolic > 
expression. As Jens correctly pointed out, Mathematica can't compute > 
the derivative of the first function symbolically and won't return any 
 > value if specify an exact number (like 2) for the value where the you 
> want the derivative to be computed.
>
>
> Anyway, my point was that there is no bug here.
>
>
> Andrzej Kozlowski
> Yokohama, Japan
> http://www.mimuw.edu.pl/~akoz/
> http://platon.c.u-tokyo.ac.jp/andrzej/
>
>
>
>
> On Saturday, April 26, 2003, at 07:47 pm, Andrzej Kozlowski wrote:
>
>
>> This seems to be just an accuracy problem due to the very rapidly >
> oscillating nature of the function. You need much more accurate 
input,
>> and even then the answers won't be exactly the same:
>>
>> In[1]:=
>> vx1[t_] := 3/2000 + (3*Sin[70*t])/2500 /; t < 5
>>
>> In[2]:=
>> vx2[t_] := 3/2000 + (3*Sin[70*t])/2500
>>
>> In[3]:=
>> Derivative[1][vx1][2.`50]
>>
>> Out[3]=
>> -0.016616340216276107118073957504289560620917139256026603482\
>> 40545`46.5497
>>
>> In[4]:=
>> Derivative[1][vx2][2.`50]
>>
>> Out[4]=
>> -0.016616340216358530300150292495099072037728048646002646485\
>> 71143`47.1588
>>
>>
>> Andrzej Kozlowski
>> Yokohama, Japan
>> http://www.mimuw.edu.pl/~akoz/
>> http://platon.c.u-tokyo.ac.jp/andrzej/
>>
>>
>> On Saturday, April 26, 2003, at 04:26 pm, Bobby Treat wrote:
>>
>>> Your explanation implies there IS no value for vx1'[t], but >>
> Mathematica
>>> does compute one, when t is numeric. It's simply wrong.
>>>
>>> vx1[t_] := 0.0015 + 0.0012 Sin[70 t] /; t < 5
>>> vx2[t_] := 0.0015 + 0.0012 Sin[70 t]
>>> vx1'[2.]
>>> vx2'[2.]
>>>
>>> 0.00793433
>>> -0.0166163
>>>
>>> Bobby
>>>
>>> -----Original Message-----
>>> From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
To: mathgroup at smc.vnet.net
>>> To: mathgroup at smc.vnet.net
>>> Subject: [mg41024] [mg40976] [mg40938] Re: Condition/constraint problem
>>>
>>> Hi,
>>>
>>> der derivative is complete right, since
>>> Condition[] has no derivative
>>>
>>> Dt[vx1[t]] evaluates to vx1'[t]
>>>
>>> until you can tell Mathematica how to
>>> find out
>>> a) what the function value of vx1[t] for t>5 may be
>>> b) to compute the derivative for t==5
>>> c) determine when the symbol t in vx1[t] may be >5
>>>
>>>
>>> Regards
>>> Jens
>>> Bamboo wrote:
>>>>
>>>> Dear all,
>>>>
>>>> I find a problem and don't know why. The input is as following.
>>>> If a condiction(constraint) is set to the function, vx1[t],
>>>> the derivative of vx1[t] is worng (fin1 is not equal to fin2).
>>>> Any help welcome.
>>>>
>>>> vx1[t_] : = 0.0015 + 0.0012 Sin[70 t] /; t < 5
>>>> vx2[t_] : = 0.0015 + 0.0012 Sin[70 t]
>>>> fin1 = Dt[vx1[t], t]
>>>> fin2 = Dt[vx2[t], t]
>>>> Plot[fin1, {t, 0, 2}]
>>>> Plot[fin2, {t, 0, 2}]
>>>>
>>>> Thanks,
>>>> Bamboo
>>>
>>>
>>>
>>
>>
>
>
>
Andrzej Kozlowski
Yokohama, Japan
http://www.mimuw.edu.pl/~akoz/
http://platon.c.u-tokyo.ac.jp/andrzej/

  


  • Prev by Date: RE: RE: Where have all the axes gone?
  • Next by Date: Re: Re: Re: Condition/constraint problem
  • Previous by thread: Re: Re: Re: Condition/constraint problem
  • Next by thread: Re: Re: Re: Condition/constraint problem