Re: smallest fraction
- To: mathgroup at smc.vnet.net
- Subject: [mg86911] Re: smallest fraction
- From: Artur <grafix at csl.pl>
- Date: Wed, 26 Mar 2008 04:52:00 -0500 (EST)
- References: <200803200757.CAA29500@smc.vnet.net> <200803210653.BAA18315@smc.vnet.net> <200803220554.AAA00496@smc.vnet.net> <200803230600.BAA25688@smc.vnet.net> <47E65E16.4010608@wolfram.com> <200803240645.BAA17083@smc.vnet.net> <200803250613.BAA10410@smc.vnet.net>
- Reply-to: grafix at csl.pl
Who know which is minimalize function is used by Mathematica in
following approximation function by rational fractions:
<< NumberTheory`Recognize` (*In Mathematica 6 RootApproximant[]
inspite Recognize[]*)
k = Recognize[N[Pi, 6], 1, x];Solve[k==0,x]
if we have rational fraction p/q (where p,q are both integers)
is minimalize function: p+q, p*q, p^2+q^2 or other ?
ARTUR JASINSKI
Andrzej Kozlowski pisze:
> Somehow I never saw any of this discussion so could not respond earlier.
>
> The reason why my procedure using Reduce does not work in this
> particular case, is that I forgot that Reduce will not list a finite
> set of solutions when it is larger than a certain bound. So, for
> example:
>
> cond[a_, b_] :=
> Reduce[a < p/q < b && (p - 1)/q < a && p/(q - 1) > b && p >= 1 && q
> >= 1, {p,
> q}, Integers]
>
> cond[23/26, 29/30]
> Out[5]= (p == 8 && q == 9) || (p == 9 && q == 10) ||
> (p == 10 && q == 11) || (p == 11 && q == 12) ||
> (p == 12 && q == 13) || (p == 13 && q == 14) ||
> (p == 14 && q == 15) || (p == 15 && q == 16) ||
> (p == 16 && q == 17)
> (the first element gives the solution), but with a larger number of
> solutions:
>
> cond[113/355, 106/333]
> Out[6]= Element[p | q, Integers] &&
> ((1 <= p <= 11978 && (333*p)/106 < q <
> (355*p)/113) || (11979 <= p <= 37630 &&
> (333*p)/106 < q < (1/106)*(333*p + 106)) ||
> (37631 <= p <= 49607 && (1/113)*(355*p - 355) < q <
> (1/106)*(333*p + 106)))
>
> However, the bound can be user controlled, as follows:
>
> Developer`SetSystemOptions[
> "ReduceOptions" -> ("DiscreteSolutionBound" -> 10^3)]
>
> And then:
>
> First[cond[113/355, 106/333]]
> p == 219 && q == 688
>
>
> Of course I never recommended this method, which is much slower than
> using Minimize. It can however find complete solutions with situations
> when the solution is not unique, for example if we tried to minimize
> the difference of squares between the denominator and the numerator etc.
>
> Andrzej Kozlowski
>
>
> On 24 Mar 2008, at 07:45, Carl Woll wrote:
>
>> Carl Woll wrote:
>>
>>
>>> Artur wrote:
>>>
>>>
>>>> If we want to find rational fraction f =p/q such that
>>>> 113/355<f<106/333 and sum p+q is minimal
>>>> anyone procedure proposed up to now doesn't work
>>>> good result should be
>>>> {137563,{p->13215,q->104348}}
>>>> but isn't
>>>>
>>>>
>>>>
>>> Your good result isn't so good, consider:
>>>
>>> In[36]:= 113/355 < 219/688 < 106/333
>>>
>>> Out[36]= True
>>>
>>> One idea (similar to your Recognize approach) is to use Rationalize
>>> or
>>> RootApproximant with SetPrecision:
>>>
>>> In[71]:= Rationalize[SetPrecision[(106/333 + 113/355)/2, 6], 0]
>>>
>>> Out[71]= 219/688
>>>
>>> In[72]:= RootApproximant[SetPrecision[(106/333 + 113/355)/2, 6], 1]
>>>
>>> Out[72]= 219/688
>>>
>>> I'm not sure of the correct method to determine the precision to use.
>>> It could be something like:
>>>
>>> Choose largest prec such that:
>>>
>>> IntervalMemberQ[Interval[{lo, hi}], SetPrecision[midpoint, prec]]
>>>
>>> is still True.
>>>
>>> Carl Woll
>>> Wolfram Research
>>>
>> I should add that Daniel Lichtblau's minFraction just needs to be
>> tweaked a bit to find this result:
>>
>> minFraction[lo_Rational, hi_Rational] /; 0 < lo < hi :=
>> Minimize[{p + q, {Denominator[lo]*p - Numerator[lo]*q > 0,
>> Denominator[hi]*p - Numerator[hi]*q < 0, p >= 1, q >= 1}}, {p, q},
>> Integers]
>>
>> In[81]:= minFraction[113/355, 106/333]
>>
>> Out[81]= {907,{p->219,q->688}}
>>
>> Carl Woll
>> Wolfram Research
>>
>>
>>>> ARTUR
>>>>
>>>> Artur pisze:
>>>>
>>>>
>>>>
>>>>> If value p/q is known
>>>>> smallest Abs[p]+Abs[q ] should be
>>>>> << NumberTheory`Recognize`
>>>>> Recognize[p/q,1,x]
>>>>>
>>>>> see also
>>>>> http://www.research.att.com/~njas/sequences/A138335
>>>>>
>>>>> Best wishes,
>>>>> Artur
>>>>>
>>>>> Curtis Osterhoudt pisze:
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>> I doubt this is in the spirit of the problem, but if p and q
>>>>>> (assumed integers) aren't restricted to be _positive_, then taking
>>>>>> them both to be very large negative numbers would both fit the p/q
>>>>>> in I requirement, and p+q as "small" as possible.
>>>>>> C.O.
>>>>>>
>>>>>> On Thursday 20 March 2008 01:57:30 masmoudi wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>> hi
>>>>>>>
>>>>>>> suppose that we have an interval I belong to [0,1]
>>>>>>>
>>>>>>> I want to know how to calculate a fraction p/q
>>>>>>> belong to I and p+q is the smallest possible
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>> __________ NOD32 Informacje 2701 (20071204) __________
>>>>>
>>>>> Wiadomosc zostala sprawdzona przez System Antywirusowy NOD32
>>>>> http://www.nod32.com lub http://www.nod32.pl
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>
>>
>
>
>
> __________ NOD32 Informacje 2701 (20071204) __________
>
> Wiadomosc zostala sprawdzona przez System Antywirusowy NOD32
> http://www.nod32.com lub http://www.nod32.pl
>
>
>
>
- Follow-Ups:
- Re: Re: smallest fraction
- From: Andrzej Kozlowski <akoz@mimuw.edu.pl>
- Re: Re: smallest fraction
- References:
- smallest fraction
- From: masmoudi <mas_atef@yahoo.fr>
- Re: smallest fraction
- From: Curtis Osterhoudt <cfo@lanl.gov>
- Re: Re: smallest fraction
- From: Artur <grafix@csl.pl>
- Re: Re: Re: smallest fraction
- From: Artur <grafix@csl.pl>
- Re: Re: Re: Re: smallest
- From: Carl Woll <carlw@wolfram.com>
- Re: Re: Re: Re: Re: smallest
- From: Andrzej Kozlowski <akoz@mimuw.edu.pl>
- smallest fraction