A32 ==== Answering your second question first. There is no special plot type for 3D-Curve but you can use the plot type Pr-Surface (Parametric surface) for this curve. Press shift-blue and F4 at the same time. You see the PLOT SETUP screen. Enter { 'X*cos(2*PI*X)' 'X*sin(2*PI*X)' 'X') for EQ Now press shift-blue and F2 at the same time. You see the PLOT WINDOW - PR-SURFACE screen. Type the values: X-Left: -1 X-Right: 1 Y-Near: -1 Y-Far: 1 XE: .5 YE:-2 ZE: .5 Step Indep: 15 Depnd: 2 Now press the menu button XXYY (F4) go to input field XXLeft and type the values: XXLeft: 0 XXRight: 1 You can leave the rest unchanged. Press the menu button ERASE (F5) and then DRAW (F6) After some seconds the HP49G draws the curve. Actually it should draw a surface, but because the EQ depends only on X it simply draws the same curve 2 times. (Number of steps for Y (Depnd) is 2) Trying now to answer your first question. For such limits it is generally important to know from what direction (x,y) approaches (0,0). If some dependence y(x) is known, then you can substitude this for y. For example, if it is known that y=x-1 then 2x^2-y^2 2x^2-(x-1)^2 x^2+2*x-1 -------- = -------------- = ------------ x^2+2y^2 x^2+2*(x-1)^2 3*x^2-4*x+2 If no dependence of the two variables is known, then you can parametrize x and y so that they are dependend on the same parameter. Parametrization : x=r*cos(t) y=r*sin(t) Substitude this for x and y in 2x^2-y^2 -------- x^2+2y^2 and use EXPAND to obtain: SIN(t)^2-2*COS(t)^2 - -------------------- 2*SIN(t)^2+COS(t)^2 which already shows that the limit doesn't depend on r (magnitude of the compex (x,y)) but it depends on t, that is the angle or argument of (x,y) = ATAN(y/x). You see that the limit depends on the ratio of y and x, which represents the direction on the x,y-plane from which (0,0) is approached. Now, you can play with different values for t. For example for t=0, the limit is 2. Substitude t=2 and use EXPAND to get this result. Remember that t=2 means that ATAN(y/x)=2 which means that y=TAN(2)*x. Approaching (0,0) from angle t=2 already defines a y=sqrt(3)*x. The limit is then -1/7. You can also plot the expression SIN(t)^2-2*COS(t)^2 - -------------------- 2*SIN(t)^2+COS(t)^2 with independend variable t from 0 to 2*PI and investigate how the limit behaves for different approaches to (0,0). Greetings and I hope I could help you a little, ==== plot. I 19-5. Morning Nick... 1st clear all the variables (Y1(X) and any others) then do a RSHold+Y= [add]. enter in an equation. Draw it and then cancel and go back to the stack. Then RSHold+Y= . What shows on my calc is Y1(X). With no equation. ==== FEXTERNAL QAdd :: CK1&Dispatch # FF :: DUPDUP QAdd DUP QAdd QAdd TWO OVER LENHXS SUBHXS ; ; @ ==== X Wow! Is there by any chance a possibility that WH, WR, SS, Pivo, etc. would take over the CAS developement now that Parisse is over-occupied with his other CAS-projects? 1) I vote for units back to EQW !!! ==== I am very glad that you bothered yourself to write this program in ML, thanks a lot :-) I tried it and it's clearly faster then the previous solutions, however, I think that we can go even faster! Consider the following program :: FPTR2 ^Z2BIN (convert to a user hex integer, only 20bits :-( ) bitRS (shift the HXS to the right: division by 2) ; Well, this actually very slow and valid only for small zints, but what I want to say is that all we need is to (somehow) shift the bits of our ZINT to the right and that would do the job for us! (I think we'll have to worry about changing the *length nibble* of our ZINT--do we call so?) I'm not sure about what your program is actually doing, but it seems to me as if you're doing an actual division 'digit by digit'. If I'm wrong then please correct me (by the way, I am at the very first steps in learning ML.. so my understanding is probably wrong..) I hope this lead us into writing a better and faster program. Good luck for us __ Kamel P.S. I need this program because I'm writing an 'integer square root' function. i.e. Gives the integer part of a number Here is my program :: DUP (N N) FPTR2 ^ZSQRT (A first estimate, if DROP (N X) BEGIN 2DUP FPTR2 ^ZQUOText (N X N/X) OVER FPTR2 ^QAdd (N X N/X+X) ZINT 2 FPTR2 ^ZQUOText (N X Y, division by 2: could be made cheaper!) DUPROT (N Y Y X) FPTR2 ^ZNLT? NOT_UNTIL ==== If you use UNBIND in the program then it works: << { '<-A=1' } LOCAL work with <-A UNBIND But indeed, if UNBIND isn't used in the program, then the local vars are there until a warmstart. Hey, let's take advantage of this! We can use it as a generator for hidden variables that are always present, but in no menu. (Store ==== ==== ==== ==== Well, you could do a DO loop with DOERR inside (using hex addresses as an argument) and an IFERR around it to continue, ofcourse to see all the error-messages with DISP That's how I test my FinLib49 ==== ==== In stack level one put 'X=0' for unsigned, 'X=0+0' for right, and 'X=0-0' for left limits. If you needed the limit at 4 from the right, you'd do 'X=4+0'. Provided you've got flag 120 cleared (Silent mode OFF) so that the calc will ask if you want to search for the sign. Vincent -- ==== In a recent thread initiated by Matt Bryant the question was discussed, how the expression xroot(5,5*a^5*b^9*c^13) can be simplified to a*b*c^2*xroot(5,5*b^4*c^3). I suggested to use the command sequence TSIMP EXP2POW EXPAND which returns c^2*b*a*XROOT(5,5)*XROOT(5,c)^3*XROOT(5,b)^4. This is close to the result that Matt wanted to get, but not exactly. So I thought that the command ^|MATCH ( ^| for arrow up ) could be used one or more times to get 5*c^3*b^4 under a single XROOT. But using: 'c^2*b*a*XROOT(5,5)*XROOT(5,c)^3*XROOT(5,b)^4' { 'XROOT(&N,&A)^&n*XROOT(&N,&B)^&m' 'XROOT(&N,&A^&n*&B^&m)' } as arguments for ^|MATCH returns the expression unchanged in stack level 2 and a 0 in stack level 1, to indicate that no match was done. And this though the pattern 'XROOT(&N,&A)^&n*XROOT(&N,&B)^&m' is in the expression! A little bit frustrated I tried manually to rearrange the expression to 'XROOT(5,c)^3*XROOT(5,b)^4*c^2*b*a*XROOT(5,5)' , that is bringing 'XROOT(5,c)^3*XROOT(5,b)^4' to the start of the expression. To my surprice this time using ^|MATCH to 'XROOT(5,c)^3*XROOT(5,b)^4*c^2*b*a*XROOT(5,5)' { 'XROOT(&N,&A)^&n*XROOT(&N,&B)^&m' 'XROOT(&N,&A^&n*&B^&m)' } worked! It returned: 'XROOT(5,c^3*b^4)^3*c^2*b*a*XROOT(5,5)' in level 2 and 1 in level 1. Is this a limitation of the command ^|MATCH ? Does it only find and replace patterns that are at the start of an expression? This would mean that using ^|MATCH repeatedly on c^2*b*a*XROOT(5,5)*XROOT(5,c)^3*XROOT(5,b)^4 to yield the final result 'a*b*c^2*xroot(5,5*b^4*c^3)' would be impossible, because the roots are at the end. Fortunately enough, in this case, the command sequence TSIMP EXP2POW EXPAND FACTOR used on Matt's expression, gives the result XROOT(5,b)^4*XROOT(5,c)^3*XROOT(5,5)*a*b*c^2 which can be matched. :) The following program will give the result that Matt wanted from any (?) expression like xroot(5,5*a^5*b^9*c^13) . << TSIMP EXP2POW EXPAND FACTOR DO { 'XROOT(&N,&A)^&n*XROOT(&N,&B)^&m' 'XROOT(&N,&A^&n*&B^&m)' } ^|MATCH SWAP { 'XROOT(&N,&A)^&n*XROOT(&N,&B)' 'XROOT(&N,&A^&n*&B)' } ^|MATCH ROT OR SWAP { 'XROOT(&N,&A)*XROOT(&N,&B)^&m' 'XROOT(&N,&A*&B^&m)' } ^|MATCH ROT OR SWAP { 'XROOT(&N,&A)*XROOT(&N,&B)' 'XROOT(&N,&A*&B)' } ^|MATCH ROT OR NOT UNTIL END With 'xroot(5,5*a^5*b^9*c^13)' as argument, it returns: 'xroot(5,b^4*c^3*5)*a*b*c^2'. ==== ==== ==== ==== ==== That must be a very large liberal arts college. . . ;-) TW ~The enemy's gate is down. ==== ==== Believe me, we have very good reasons for using MathML. Using algebraic syntax would of course be much easier in terms of authoring, but it is not a universal representation. For example, try to paste an expression from Mathematica into Maple and maple won't understand it. Algebraic syntax might work for trivial things like a x^2 + b x + c, but throw in any non-trivial thing like Hypergeometrics, tensors, or even simple integrals, and you no longer have a universal representation. ==== --------------------------------------------------------------------- ==== Just a question: Where is the difference between the two infrared printers know the difference........ Matthias ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ==== of X That's the current TiBORG-way of doing EQW by HP In earlier days the HP remained in the state that USER commands Nowadays the calculator is in charge. :-( Oh - why couldn't the CAS just silently change to radians (internally) and then back to whatever Th User decided when the computing is done ??? ==== Does anyone sell the nice leather zipper cases for HP48s as Educalc did once? The one I have uses velcro to attach the calculator and has slots for expansion cards. Also looking for best place to buy a reliable, new 1 mb expansion card. What is the best brand without paying HP's full price. Jim Klein thanks for your answer and your work. Seems that there are still some features missing, even in the new ROM. But generaly im still quite happy with the calc and it's functionality. ==== I am trying to find out where the HOME directory is stored in Memory. I have found heaps of information for the HP48SX regarding pointers to ==== The authoritative reference for all entry points, pointers, memory locations etc. on the SX/GX would be Mika Heiskanen's entries.srt / ent_srtA.pdf documents which can be found at http://www.hpcalc.org/hp48/programming/entries/ . The PDF version is particularly useful. Also useful is the file entries.all found in http://www.hpcalc.org/hp48/programming/entries/entriesx.zip which lists the SX compatible items found in the others plus many additional ones not listed there. ( The descriptions in this one are terse and sometimes nonexistent though. ) The fact that entries.all is for the SX only really isn't an issue because most of the non ram based entry points in the SX rom haven't changed in the lower 256k of the GX rom. ( And if one has you can usually find its new address by searching the rom for the first few instructions. ) Now to deal with your question about how to find the current position of the HOME directory ( USEROB ) on the GX. Here is a short solution in assembly which uses one unsupported entry point ( Jazz syntax from now on ) : CODE LC(5) #80711 * Address of USEROB pointer. GOVLNG =SysPtr@ * Push pointer to stack. ENDCODE If you only want to use supported entry points then here is a longer sys-rpl version : :: CONTEXT@ ( Push address of current directory to the stack. ) SYSCONTEXT ( Switch to home directory. ) CONTEXT@ ( Push address of HOME directory to stack. ) SWAP CONTEXT! ( Restore previous directory. ) ; If you also want information on the structure of directory objects then there are many sources but probably the most prominent ( and well written ) one would be F.H. Gilbert's Introduction to Saturn Assembly Language. ( Second edition. Edited by Eric Rechlin. ) Hope this helps... ---------------------------------------------------------------------------- ------ ==== On Mon, 08 Oct 2001 23:43:41 -0500, Jonathan Busby Which can be found at http://www.hpcalc.org/hp48/docs/programming/asm-pdf.zip ( PDF version ) . ---------------------------------------------------------------------------- ==== All is in my books, freely available as PDF files: - HP48s/sx french version : http://www.courbis.com/voyage48s.html - HP48s/sx english version : http://www.courbis.com/hp48ml.html - HP48g/gx french version (no english translation sorry) : http://www.courbis.com/voyage48g.html ==== Kiran, ==== ==== Is there a way in Mathematica to generate a list of variables in an expression like Variable[]. For example if I passed the expression Sin[x+y]+ z/p - t the list {x,y,z,p,t} would be generated. Another unrelated question is when I use Mathematica V4.0 to calculate tables of ThreeJSymbols the outputs Generally consist of fractions of roots of the form Sqrt[a/b] , c/Sqrt[d] and Sometimes Sqrt[e/f]/g is there a way to force Mathematica always output them in the form Sqrt[h]/i eg instead of it giving Sqrt[2/3] giving Sqrt[6]/3 Null This fixes the above problems, but another is still there. The output of outputstep is the input for the next nesting, but the output of PutAppend[x, y] is Null, not x. Instead, outputstep should be outputstep[datafilename_String][{variablelist_}] := Module[{new = nextstate[{variablelist}]}, PutAppend[new, datafilename]; new ] -------------------------------------------------------------- Omega Consulting The final answer to your Mathematica needs Spend less time searching and more time finding. http://www.wz.com/internet/Mathematica.html