USAGE:
cxa [options] [[z]
z ...] z [OP] [[z]
OP] ...
cat <file>
| cxa -
cat <file> |
cxa options ...
PURPOSE:
Complex arithmetic in reverse polish notation. Stack
height is 100.
In the second and third kind of usage, every line of the file
presents an argument list.
Every new line resets the stack. In the second kind, all
options must be included in the input pipe.
(we haven't tried this yet with the
ellipse occurring amidst values and operators)
The mechanism of importing environment
variables as in tsfedit (see usage in repenvl)
is supported.
OBS! The string must be quoted to prevent the shell from
interpolation.
Operators:
u - push stack
(level 1 keeps its value)
p - convert z to
polar: cxa -Fef 1,1 p : 1.4142E+00,45.000
c - convert z to
plane
i - convert z to Im(z)
+ 0i
r - convert z to Re(z)
+ 0i
a -
add:
cxa 1,2 3,4 a : 4.0000E+00,6.0000E+00
s -
subtract:
cxa 1,2 2,4 s : -1.0000E+00,-2.0000E+00
m - multiply
d - divide
j - conjugate
@ '|' -
absolute to real-part, alternative forms 1)
@2 '|' - absolute-squared to
real-part
1)
^ - power z(1)**z(2)
(consider swap, X) 1)
^v - z(1)**v
(v see Numbers)
1)
+- - error value (1-sigma)
V - show stack
X - swap the two lowest
stack levels
rad deg - a polar number's angle is converted from
radians to degrees
exp - complex exponential function
log - complex logarithm
sqr - complex square root
1) does not work with error
values (yet)
Numbers:
Polar values: phase is always in degrees
'(1,2)' 1,2
1 2 two ways to enter complex numbers.
This is the expected standard.
Real numbers must be decorated as such, see
r below.
On
a command line at least the parentheses must
be quoted: '(' ')'.
The comma-free form works only with numerical values.
r1.23 1.23r
two ways for real values
i1.23 1.23i
two ways for imaginary values
r1/1.23 1/1.23r
two ways for reciprocal real values
i1/1.23 1/1.23i
two ways for reciprocal imag
values
b1.23 1.23b
sets real=imag
h1.23 1.23h
phase, i.e. in polar (1, 1.23 deg))
sqr2
evaluates to dsqrt(2.d0)
pi
evaluates to
pi
rpd
evaluates to pi/180.
Options:
In the sequel, `#´ emphasises that the
slanted word following symbolizes a numerical value (not a
`Number´ in the sense above).
Other symbols in slanted style symbolize strings.
First option only: Cut a string from stdin into a
leader text and an argument part
/string - split at
the string (string ends the leader; matching operation is not
greedy!)
^#n
- split after the n'th character
-c#cut
- value where to cut phase circle (degrees)
-Sstring - add heading string.
+Sstring - add trailing string.
-R -
write out only real-part
-r -
write out only real-part if imag is zero.
-F[+]format
- output format; devise for two numbers and a comma
-F[+]ef
- for polar, a standard format E-form, F-form
-F[+]ff#a.#b
- output format f#a.#b,f#a.#b
for z in plane
-Ffp#a.#b
- output format f#a.#b,f8.3
for z in polar
-F[+]l -F[+]L
- short forms for e13.5 or e22.14, respectively.
-F+
... in each of the above prints positive numbers with +sign
-,
- delete comma in output
(Obs! the comma in the format is a must.)
-_ - delete
commas in heading and trailing strings
+P
- add parentheses
+Q -
add double-quotes
+e
- compute with errors
+DBG -DBG - debug on / off (not much scope yes)
-n -
with reading from STDIN: show line numbers
Examples:
cxa -Fef +e 1,2 3r +- 4,5 3r +- a j
p
Result: 8.6023E+00,54.462 4.2426E+00,29.551 +-
cxa -S'set val =' +P -Fef +e 1,2 3r +- 4,5 3r
+- a -c180 j p
Result: set val = ( 8.6023E+00,-54.462
4.2426E+00,29.551 +- )
eval set val = `cxa +P -Fef +e 1,2 3r +- 4,5
3r +- a p`
echo $val
Result: 8.60233E+00,54.462 4.24264E+00,29.551 +-
cxa 4,0 ^-1r
Result: 2.50000E-01,0.00000E+00
cxa -r 4,0 ^-1r
Result: 2.50000E-01
cxa 4,0 ^1,-1
Result: 7.33828E-01,-3.93211E+00
cxa 4,0 ^1,-1 @
Result: 4.00000E+00,0.00000E+00
setenv AMP 5.0,0.0
cxa '${AMP}' ^1,-1
Result: -1.93160E-01,-4.99627E+00
Example for STDIN:
awk '{s=substr($0,1,46);r=substr($0,48);gsub(/
/,"",r);sub(/\r/,"",r);print s " (" r ") c"}' CARGA_GB.csv |\
cxa /m2 -F+ ...
Result:
BRFT , GOT4.7 , 0, m2 +2.93183E+01,+1.98851E+01
WTZR , GOT4.7 , 0, m2 +1.63250E+00,-4.84528E+00
ALBH , GOT4.7 , 0, m2 +4.25606E+00,+1.44739E+01
ALRT , GOT4.7 , 0, m2 -4.44832E-01,-6.52858E-01
...
from CARGA_GB,csv
BRFT
, GOT4.7 , 0, m2 ,
35.4257, 34.147
WTZR
, GOT4.7 , 0, m2 ,
5.1129, -71.380
ALBH
, GOT4.7 , 0, m2 ,
15.0867, 73.614
ALRT
, GOT4.7 , 0, m2 ,
0.7900, -124.269
Compose tilt at azimuth 5 deg from north and east, $ntilt and
$etilt, respectivly
cxa 5.h c r $ntilt c m 5.h c i $etilt c m a p
Source code is in ~/math/afor/p/m/cxa.f
,bye