Complex Number Calculator version 1.0 by Robert G. Kaires on 3/24/90 SHAREWARE If you find this program useful, please register. Registration is only $15. Your payment is appreciated and necessary for the continued support and upgrade of this product. If you register you will be put on the mailing list for future upgrades. Please send your registration fee to: (also questions, comments) Robert G. Kaires 609 Glover Dr. Runnemede, NJ 08078 INCLUDE A SELF-ADDRESSED, STAMPED ENVELOPE IF YOU WANT A REPLY AND ARE NOT A REGISTERED USER. Anyone wishing a disk mailed to them with the latest version of this program send $5 to the above address requesting a copy of CNC (you do not have to be a registered user). Other shareware products from R.G.Kaires Function Plotter 4.0, (plots functions and data) registration $20, disk $5 PRELIMINARY The symbol "i" is used to denote the unit imaginary constant and is equal to the square root of -1. The symbol "z" denotes a complex variable and z(t) = x(t) + i * y(t). As you can see x(t) is the real part, and y(t) is the complex part of the complex number, respectively. The symbol "t" is used to denote a real parameter and will be useful in the discussion of numerical integration. INTRODUCTION Complex Number Calculator (CNC) evaluates expressions containing real or complex numbers. Examples of valid expressions are: 1.23e10/.45e-27 ............. numbers can be entered in exponential format 1 + sin(pi/3) ............... same as 1 + sin(180/3) if "degrees" are set exp( 2 - (1/2) * exp(3) ) ... functions can, of course, be nested .5 * ln( (1+z)/(1-z) ) ...... you will be prompted for z (i+1)/(i-1) ................. "i" is the unit imaginary constant (z+1)/(z-1) ................. enter any real or complex no. at the prompt (1+i)^(2+i) ................. exponents can be complex int( 1 / (1+t^2), 4,0,1) .... numerically integrate f(t) = 1 / ( 1+t^2 ) from 0 to 1 using an approx order of 4 int(cos(t)+j*sin(t),4,0,pi).. numerically integrate cos(t) + i * sin(t) M_m(2.0) .................... convert 2 miles to meters kW_hp(4.5) .................. convert 4.5 kilo-Watts to horse power See the end of this document for a full list of functions, constants, and conversions available in CNC. Be aware that CNC is case sensitive. CNC "remembers" previously entered expressions (up to 20), they can be accessed by using the up and down arrow keys. Expressions can be one full line in length. When the line is full, CNC will not allow any addition characters to be inserted until some are deleted. All calculations are performed in double precision with about 15 significant digits of precision. The number of displayed digits (default is 6) can be changed using the "dd" command. When responding to prompts in CNC, the default response is given in square brackets. Simply hit "Enter" (CR) to respond with the default. At the top of the screen is a message line which lists some information on valid editing keys and other commands. At the bottom of the screen is the status line. OPERATORS, FUNCTIONS AND PRECEDENCE The valid operators are + - * / ^. The operator ^ (exponentiation) has the highest precedence, followed by the operators * and / which have equal precedence, followed by + and - which have equal precedence. Operators with equal precedence are evaluated left to right. Functions (and conversions) have higher precedence than operators. Therefore sin(pi/6)^2 is evaluated as (sin(pi/6) )^2 since sin(pi/6) is evaluated before the exponentiation is performed. Consider the following two expressions: sin(5) ^ sqrt(2) and sin(5) ^ 2^.5 The first yields: (-.958924) ^ 1.41421 ( = -0.250921 - i * 0.90839 ) The second gives: ( (-.958924) ^ 2 ) ^ .5 ( = .958924 ) In the first expression sqrt (which IS a function) and sin are evaluated first, in the second expression sin is evaluated, followed by the operators ^ and ^, which are evaluated left to right. Enough said. As when using any calculator, when in doubt, use parenthesis. One final note: do not use operators side by side with no intervening numbers or parenthesis such as 2*-2, you will be surprised at what you get. Instead use 2*(-2) PRECISION, ROUND OFF ERROR, MIN AND MAX NUMBERS All calculations are done in double precision and have about 15 digits of accuracy. Problems that can occur from this finite accuracy are best illustrated by the following example session: >sin(z)^2 + cos(z)^2 ...... (user enters expres at > prompt) z=?>1 ..................... (user enters expres at z=?> prompt) 1 ......................... (result) z=?>10 1 z=?>100 1 z=?>i ..................... (of course you may use complex 1 numbers as well) z=?>10*i 1 z=?>100*i ................. (WHAT HAPPENED HERE!) 6.90175e+71 This last result is not a bug in CNC! It results because of the finite precision of this (and any) calculator. The functions sin(z)^2 and cos(z)^2 with purely imaginary arguments are -sinh(y)^2 and cosh(y)^2, respectively. Now the answer is obvious, for large y we are subtracting two very large numbers. The answer, of course, becomes very inaccurate. Floating point numbers can range from 1e-308 to 1e308. FUNCTIONS sqrt() square root function exp() inverse natural log function real() real part of a complex number imag() imaginary part of a complex number mag() magnitude of a complex number ang() angle of a complex number ln() natural log log() log base 10 sin(), cos(), tan() trigonometric functions asin(), acos(), atan() inverse trigonometric functions sinh(), cosh(), tanh() hyperbolic functions asinh(), acosh(), atanh() inverse hyperbolic functions INTEGRATION FUNCTION int( f(t),N,l,u ) numerical integration of a function of a single real variable (t) using Gaussian Quadrature - f(t) can evaluate to a complex number - N is the order of the approximation ( 2,4,8,10,12,16,32 ) - l,u lower and upper integration limits (can be a function of T) The integration method used is Gaussian Quadrature. The numerical procedure does not put integration points at the integration limits. Therefore the integration limit points can be singular. Of course, one must be concerned about convergence. Some singularities are integrable, some are not. Consider the following two sessions. In both the function is singular at t=0, but the first function is integrable and the second is not. >int(ln(t),8,0,1) ......... The ln function is integrable -0.991239 from 0 to 1 >int(ln(t),16,0,1) -0.997679 >int(ln(t),32,0,1) -0.999402 >int(1/t,8,0,1) ............The 1/t function in not integrable 5.43571 from 0 to 1 >int(1/t,16,0,1) 6.76146 >int(1/t,32,0,1) 8.11699 We notice that the first integral converges but that the second does not. INTEGRATION IN THE COMPLEX PLANE Integrating a function of a complex variable in the complex plane is possible with some work. The function must be parameterized as a function of a real variable as follows: f(z) = f(x+i*y) = f(x(t) + i*y(t)), where t is real. We then note that dz = ( x'(t) + i*y'(t) ) dt, where ' denote differentiation with respect to t. Therefore we have f(z) dz = f( x(t) + i*y(t) ) * ( x'(t) + i*y'(t) ) dt. Example: We want to integrate 1/z along the unit circle centered at the origin. The complex variable z can be described by z = cos(t) + i * sin(t). Therefore we have 1/z dz = ( 1 / (cos(t) + i * sin(t) ) * ( -sin(t) + i*cos(t) ) dt. The following is from an actual session: >int( ( 1 / (cos(t) + i * sin(t) ) ) * ( -sin(t) + i*cos(t) ),4,0,2*pi) 3.73223e-18 + i * 6.28319 With the exception of some small round-off error, we obtain approximately 2*pi*i as expected. BUILT IN CONSTANTS mathematical constants: pi (3.14159...) gamma (.5772...) physical constants: c0 speed of light in vacuum (m/s) N Avagadro's constant (1/mole) h Planck's constant (J-s) R Universal gas constant (J/K-mole) qe electron charge (C) k Boltzmann's constant (J/K) eps permittivity constant (F/m) Me electron mass (kg) mu permeability constant (H/m) Mn neutron mass (kg) G Grav constant (N-m^2/kg^2) Mp proton mass (kg) g standard gravity (m/s^2) CONVERSION FUNCTIONS (must use real arguments) M_m(), m_M() miles to meters, meters to miles M_yd(), yd_M() miles to yards, yards to miles M_ft(), ft_M() miles to feet, .... m_in(), in_ft() meters to inches, .... cm_in(), in_cm() cm to inches, .... F_C(), C_F() degrees Fahrenheit to degrees Celsius, .... K_C(), C_K() degrees Kelvin to degrees Celsius, .... K_F(), F_K() degrees Kelvin to degrees Fahrenheit, .... lb_kg(), kg_lb() pounds to kilograms, .... (under standard gravity) lb_N(), N_lb() pounds to Newtons, .... Btu_J(), J_Btu() Btu's to Joules, .... kWh_J(), J_kWh() kilo-Watt hours to Joules, .... kW_hp(), hp_kW() kilo-Watt hours to horse-power, .... FILES You can write data to a file only from the z=?> (or T=?>) prompt. Enter a function of z, at the z=?> prompt press f , you will be prompted for a file name and whether you want to write the domain and range or just the range. If you request the domain and range to be written, the real part of z will be written to the first column, the imaginary part of z to the second column, the real part of f(z) to the third column and finally the imaginary part of f(z) to the fourth column. If you request the range (only) to be written, the real and imaginary parts of f(z) will be written to the first and second columns, respectively. The file will be close when you press "q" from the z=?> (or T=?>) prompt. You can plot your data with any standard plotting package. A shareware plotting package is available from this author if you are in need (see beginning of this document).