HP Forums
INPUT() and complex numbers? - Printable Version

+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Calculators (and very old HP Computers) (/forum-3.html)
+--- Forum: HP Prime (/forum-5.html)
+--- Thread: INPUT() and complex numbers? (/thread-2857.html)



INPUT() and complex numbers? - DrD - 01-14-2015 01:47 PM

How can complex numbers be used with INPUT()?

Simple example:

INPUT(zl); // Using zl=50+25i as input value
zo:=50;

RE(zl)=>50, IM(zl)=>25.
(zl-zo)/(zl+zo) => 0.06 +0.24*i

I haven't been able to get complex numbers to work with an INPUT().


RE: INPUT() and complex numbers? - DrD - 01-14-2015 04:44 PM

I think I may have discovered a way to input a complex number:

1. Predefine a variable as a complex number: zl:=0+0i;
2. Execute the INPUT() function on it: INPUT(zl); // <== 50+25i, returns 1.00
3. Now EVAL the variable: EVAL(zl); ==> 50.00+25.00*i

EVAL((zo-50)/(zo+50)) ==> 0.06+0.24*i


Predefining zl:=0+0i worked when entered in the HOME command line, but results in a syntax error when zl:=0+0i; is entered in a ppl program.


-Dale-


RE: INPUT() and complex numbers? - Snorre - 01-14-2015 08:21 PM

(01-14-2015 04:44 PM)DrD Wrote:  [...]
Predefining zl:=0+0i worked when entered in the HOME command line, but results in a syntax error when zl:=0+0i; is entered in a ppl program.
Enter it as zl:=0+0*i or zl:=(0,0).


RE: INPUT() and complex numbers? - DrD - 01-14-2015 09:49 PM

Snorre, your suggested forms, as well as (0,0i) and (0,0*i), are syntax issues as well. Z0-Z9 are reserved for complex variables, but Z0:=50+25i; (and all the complex entry variants tried so far), also error out. Maybe it just isn't possible to assign complex numbers to variables in a program. That it works fine when entered in the HOME command line, would suggest it would also work programmatically in the same way.

Currently, I've isolated a code fragment of my program to just deal with complex number entry, but so far, no luck. My main program deals with impedance and related parameters, where complex numbers are the norm. Maybe the Re(zl) and IM(zl) components can only be handled in stand alone fashion, within programs.

Currently, my settings are HOME: Complex a+b*i, allow complex output from real input checked, CAS: Complex checked (Include complex results in variables), and Symbolic Setup: Complex (system). I have tried to accomplish zl:=50+25i; using each of the entry methods discussed, including your suggestions, and no go.

I have tried many other settings, as well. In fact, I don't think there is any combination left that I haven't tried, so complex number assignment to a variable in a program is, at this point, myth "busted." (EMU ver 6975).

-Dale-


RE: INPUT() and complex numbers? - Snorre - 01-14-2015 10:27 PM

Hello DrD,

in PPL implicit multiplication is not valid syntax, so anything like 0i or 0i won't compile. Something like (a,b*i) is not forbidden, but actually means a+b*i*i = a-b (a real).

I've tried on my device:
Code:
BEGIN
  LOCAL a:=1+2*i,  // lower case letter i ([Alpha]+[Shift]+[TAN])
        b:=3+4*i,  // imaginary unit i ([Shift]+[2])
        c:=(5,6),
        d:=7+8*√-1;
  INPUT({a,b,c,d});
  {EVAL(a),EVAL(b),EVAL(c),EVAL(d)};
END;
and didn't observe any problems, regardless of current complex format setting.
The CAS setting "Complex" is not related to PPL.

Please doublecheck there aren't any typos in your program. If you still cannot assign complex numbers then there's something very strange happening on your device. (Maybe a reset is required?)
What is your software version (mine is 6975), your "Digit Grouping" setting (mine is "123456.789")?

Greetings


RE: INPUT() and complex numbers? - Helge Gabert - 01-14-2015 10:33 PM

Predefining the complex variable in a LOCAL statement works for me.

...
LOCAL xl:=2+2*i;
...
INPUT(xl);
<User enters a complex number>
...

OK

Edit: But complex numbers inside an array, if predefined, don't seem to work with input . I get "error: insufficient memory."


RE: INPUT() and complex numbers? - DrD - 01-14-2015 11:05 PM

Thank you! Predefining the complex variable completely within the local declaration did the trick, and worked for me, as well:

Code:

EXPORT test()
BEGIN
local zl:=50+25*i,            
       zo:=50+0*i;

input(zl,zo);
g:=eval((zl-zo)/(zl+zo));
return g; 

END;

This produces the 0.06+0.24*i result I was after, and I can now continue with the rest of my program. You have been very helpful, and I sure hope I can return the favor soon!

-Dale-