Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2000
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2000

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

Search the Archive

RE: Problem with implementing the following functions

  • To: mathgroup at smc.vnet.net
  • Subject: [mg23944] RE: [mg23874] Problem with implementing the following functions
  • From: "David Park" <djmp at earthlink.net>
  • Date: Fri, 16 Jun 2000 00:57:31 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com


> -----Original Message-----
> From: Matt Herman [mailto:Henayni at hotmail.com]
To: mathgroup at smc.vnet.net
>
> Hello,
>
> here are the functions
>
> q[(Sqrt[x_] + (z_))/(y_), 1] := (x - (Floor[(z + Sqrt[x])/y]*y -
> z)^2)/y
>
> q[(Sqrt[x_] + (z_))/(y_), n_] :=
>   q[(z + Sqrt[x])/y, n - 2] +
>     a[(z + Sqrt[x])/y, n - 1]*(
>         m[(z + Sqrt[x])/y, n - 1] - m[(z + Sqrt[x])/y, n])
>
> a[(Sqrt[x_] + (z_))/(y_), 0] := Floor[(z + Sqrt[x])/y]
>
> a[(Sqrt[x_] + (z_))/(y_), n_] :=
>   Floor[(m[(z + Sqrt[x])/y, n] + Sqrt[x])/q[(z + Sqrt[x])/y, n]]
>
> m[(Sqrt[x_] + (z_))/(y_), 1] := Floor[(z + Sqrt[x])/y]*y - z
>
> m[(Sqrt[x_] + (z_))/(y_), n_] :=
>   a[(z + Sqrt[x])/y, n - 1]*q[(z + Sqrt[x])/y, n - 1] -
>     m[(z + Sqrt[x])/y, n - 1]
>
>
>
> For some reason mathematica gives me blank inputs when I do
> a[(9+Sqrt[18])/9,5] (or any n for that matter.
>
> Any ideas?
>
> Thanks,
>
> Matt
>

Matt,

Your basic problem is in pattern matching. Mathematica builds ups its
algebraic expressions from Plus, Times and Power and you have to build up
your patterns the same way.

1/9*(9 + Sqrt[18])
FullForm[%]
1/9*(9 + 3*Sqrt[2])
Times[Rational[1, 9], Plus[9, Times[3, Power[2, Rational[1, 2]]]]]

So Mathematica does not divide by 9; it multiplies by Rational[1,9]. In
general it does not divide by y; it multiplies by Power[y,-1]. But in your
case we can just switch y from division to multiplication and vice versa
everywhere.

Secondly Mathematica has "simplified" Sqrt[18] to 3*Sqrt[2]. This does not
match your pattern. You have to use a pattern w_. Sqrt[x_], where w_. will
have the default value of 1 if it is missing from the expression. With these
changes your routines become:

q[(w_. Sqrt[x_] + (z_))y_, 1] := (x - (Floor[(z + w  Sqrt[x])y]/y -
z)^2)y

q[(w_. Sqrt[x_] + (z_))y_, n_] :=
  q[(z + w  Sqrt[x])y, n - 2] +
    a[(z + w  Sqrt[x])y, n - 1]*(
        m[(z + w  Sqrt[x])y, n - 1] - m[(z + w  Sqrt[x])y, n])

a[y_(w_. Sqrt[x_] + (z_)), 0] := Floor[(z + w  Sqrt[x])y]

a[(w_. Sqrt[x_] + (z_))y_, n_] :=
  Floor[(m[(z + w Sqrt[x])y, n] + w  Sqrt[x])/q[(z + w  Sqrt[x])y, n]]

m[(w Sqrt[x_] + (z_))y_, 1] := Floor[(z + w Sqrt[x])y]/y - z

m[(w Sqrt[x_] + (z_))y_, n_] :=
  a[(z + w Sqrt[x])y, n - 1]*q[(z + w Sqrt[x])y, n - 1] -
    m[(z + w  Sqrt[x])y, n - 1]

However, when I tried to run your case I ran into RecursionLimit problems,
which I will leave to sharper minds to remedy.

David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/



  • Prev by Date: RE:Working Precision
  • Next by Date: Re: rounding off numbers
  • Previous by thread: Re: Problem with implementing the following functions
  • Next by thread: Monte Carlo in Mathematica ?