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: [mg41025] Re: [mg40976] Re: [mg40938] Re: Condition/constraint problem
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Tue, 29 Apr 2003 05:24:39 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Of course, but that is not surprising since you are comparing something 
that is a part of general functionality with something that is 
specifically designed for the given purpose. As David Withoff pointed  
out, it may be seen as an argument for removing this particular feature 
from Mathematica altogether, although since it works quite well in 
simple cases I personally think it should stay, perhaps with some sort 
of "health warning" in the documentation.

Andrzej Kozlowski
Yokohama, Japan
http://www.mimuw.edu.pl/~akoz/
http://platon.c.u-tokyo.ac.jp/andrzej/



On Tuesday, April 29, 2003, at 10:43  am, Bobby Treat wrote:

> 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
> To: Bobby Treat <drmajorbob+MathGroup3528 at mailblocks.com>
> Cc: mathgroup at smc.vnet.net; kuska at informatik.uni-leipzig.de; 
> u8514501 at cc.nctu.edu.tw
> Sent: Tue, 29 Apr 2003 08:48:19 +0900
> Subject: [mg41025] 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: [mg41025] 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: [mg41025] [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: Re: Condition/constraint problem
  • 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