Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.
|
Forum Index : Microcontroller and PC projects : MM2(+): Complex numbers
Author | Message | ||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 8584 |
Please find attached a set of CFunctions that do all the basic arithmetical functions on complex numbers including conversion to polar coordinates Complex numbers are represented as a two element floating point array with the real part in element 0 and the imaginary part in element 1. There is of course nothing that can't be done in Basic but the CFunctions overcome a huge overhead in parsing and are therefore much quicker. Note the "cphase" calculation is actually identical to ATAN2 and uses the algorithm TassyJim posted here Arrays of complex numbers can be represented DIM a!(1,N). Individual numbers can then be used in the calls as follows: cadd( a!(0,N1), a!(0,N2), c!() ) This adds the N1 and N2 numbers in array a! and puts the answer in c! option explicit option default none ' ' Routines to manipulate complex numbers ' Numbers are stored as two element floating point arrays ' The real component is stored in element 0 ' The imaginary component is stored in element 1 ' ' NB cphase is actually a CFunction implementation of ATAN2(y,x) where y is the imaginary component and x is the real component ' ' cadd: parameters ' x,y,z : result z=x+y ' formula: (a+bi) + (c+di) = (a+c) + (b+d)i ' ' cminus: parameters ' x,y,z : result z=x-y ' formula: (a+bi) - (c+di) = (a-c) + (b-d)i ' ' cmul: parameters ' x,y,z : result z=x*y ' formula: (a+bi) (c+di) = (ac-bd) + (bc+ad)i ' ' cdiv: parameters ' x,y,z : result z=x/y ' formula: (a + bi)/(c + di) = ((ac + bd) / (c^2 + d^2) + ((bc - ad) / (c^2 + d^2)i. ' ' cinv: parameters ' x,z : result z=inv(x) ' formula: (a+bi) = a / (a^2 + b^2) + (- b / (a ^ 2 + b ^ 2))i ' ' cneg: parameters ' x,z : result z=neg(x) ' formula: (a+bi) = -a + (-b)i ' ' cmag: parameters ' x,z : result z=magnitude(x) ' formula: a = ((a ^ 2) + (b ^ 2))^0.5 ' ' cconj: parameters ' x,y : result x=conj(y) ' formula: (a+bi) = a + (-b)i ' ' cphase: parameters ' x,z : result z=phase angle(x) ' formula: a = atan2(b/a) ' ' cexp: parameters ' x,z : result z=e^x ' formula: (a+bi)= (e^a * cos(b)) + (e^a * sin(b))i ' dim a!(1,1)=(1,1,2,2) DIM b!(1)=(pi,1.2) Dim c!(1) cadd a!(0,0),a!(0,1),c!() print "Add: Real=",c!(0)," Imaginary=",c!(1) ' cminus a!(0,0),a!(0,1),c!() print "Subtract: Real=",c!(0)," Imaginary=",c!(1) ' cmul a!(0,0),a!(0,1),c!() print "Multiply: Real=",c!(0)," Imaginary=",c!(1) ' cDiv a!(0,0),a!(0,1),c!() print "Divide: Real=",c!(0)," Imaginary=",c!(1) ' cneg a!(),c!() print "Negate: Real=",c!(0)," Imaginary=",c!(1) ' cinv a!(),c!() print "Inverse: Real=",c!(0)," Imaginary=",c!(1) ' cconj a!(),c!() print "Conjugate: Real=",c!(0)," Imaginary=",c!(1) ' cmag a!(),c!() print "Magnitude: Real=",c!(0) ' cphase a!(),c!() print "Phase: Real=",deg(c!(0)) ' cexp a!(),c!() print "Exponentiate: Real=",c!(0)," Imaginary=",c!(1) end CSUB cadd 00000000 27BDFFD8 AFB2001C 3C129D00 AFB10018 AFB00014 00808821 00A08021 8C840000 8CA50000 8E42005C AFBF0024 AFB30020 0040F809 00C09821 AE620000 8E240004 8E42005C 0040F809 8E050004 8FBF0024 AE620004 8FB2001C 8FB30020 8FB10018 8FB00014 03E00008 27BD0028 End CSUB ' CSUB cminus 00000000 27BDFFD8 AFB2001C 3C129D00 AFB10018 AFB00014 00808821 00A08021 8C840000 8CA50000 8E420060 AFBF0024 AFB30020 0040F809 00C09821 AE620000 8E240004 8E420060 0040F809 8E050004 8FBF0024 AE620004 8FB2001C 8FB30020 8FB10018 8FB00014 03E00008 27BD0028 End CSUB ' CSUB cmul 00000000 27BDFFD0 AFB00014 3C109D00 AFB2001C AFB10018 00809021 00A08821 8C840000 8CA50000 8E020058 AFBF002C AFB50028 AFB40024 AFB30020 8E140060 0040F809 00C09821 0040A821 8E440004 8E020058 0040F809 8E250004 00402821 0280F809 02A02021 AE620000 8E440000 8E250004 8E020058 0040F809 8E14005C 0040A821 8E440004 8E020058 0040F809 8E250000 00402821 0280F809 02A02021 8FBF002C AE620004 8FB50028 8FB40024 8FB30020 8FB2001C 8FB10018 8FB00014 03E00008 27BD0030 End CSUB ' CSUB cdiv 00000000 27BDFFC8 AFB00014 3C109D00 AFB2001C AFB10018 00809021 00A08821 8C840000 8CA50000 8E020058 AFBF0034 AFB70030 AFB6002C AFB50028 AFB40024 AFB30020 8E140064 00C09821 0040F809 8E15005C 0040B021 8E440004 8E020058 0040F809 8E250004 00402821 02A0F809 02C02021 8E240000 0040A821 8E020058 00802821 0040F809 8E16005C 8E240004 0040B821 8E020058 0040F809 00802821 00402821 02C0F809 02E02021 00402821 0280F809 02A02021 AE620000 8E440004 8E250000 8E020058 8E140064 0040F809 8E150060 0040B021 8E440000 8E020058 0040F809 8E250004 00402821 02A0F809 02C02021 8E240000 00409021 8E020058 00802821 0040F809 8E15005C 8E240004 0040B021 8E020058 0040F809 00802821 00402821 02A0F809 02C02021 00402821 0280F809 02402021 8FBF0034 AE620004 8FB70030 8FB6002C 8FB50028 8FB40024 8FB30020 8FB2001C 8FB10018 8FB00014 03E00008 27BD0038 End CSUB ' CSUB cinv 00000000 27BDFFD8 AFB10014 AFB00010 00808821 3C109D00 8C840000 8E020058 AFBF0024 AFB40020 AFB3001C AFB20018 00A09021 00802821 0040F809 8E13005C 8E240004 0040A021 8E020058 0040F809 00802821 00402821 0260F809 02802021 00409821 8E240000 8E020064 0040F809 02602821 8E03009C 8E140058 3C04BF80 0060F809 AE420000 00402821 0280F809 02602021 8E030064 8E240004 0060F809 00402821 8FBF0024 AE420004 8FB40020 8FB3001C 8FB20018 8FB10014 8FB00010 03E00008 27BD0028 End CSUB ' CSUB cneg 00000000 27BDFFD8 AFB00010 3C109D00 8E02009C AFBF0024 AFB40020 AFB3001C 8C940000 AFB20018 AFB10014 00809021 3C04BF80 00A08821 0040F809 8E130058 00402821 0260F809 02802021 AE220000 8E02009C 8E520004 3C04BF80 0040F809 8E100058 00402821 0200F809 02402021 8FBF0024 AE220004 8FB40020 8FB3001C 8FB20018 8FB10014 8FB00010 03E00008 27BD0028 End CSUB ' ' CSUB cconj 00000000 8C820000 27BDFFE0 3C039D00 AFBF001C AFB20018 AFB10014 AFB00010 ACA20000 8C62009C 8C920004 3C04BF80 00A08021 0040F809 8C710058 00402821 0220F809 02402021 8FBF001C AE020004 8FB20018 8FB10014 8FB00010 03E00008 27BD0020 End CSUB ' CSUB cmag 00000000 27BDFFD0 AFB10018 AFB00014 00808821 3C109D00 8C840000 8E020058 AFBF002C AFB50028 AFB40024 AFB30020 AFB2001C 00A09021 00802821 8E130074 0040F809 8E14005C 8E240004 0040A821 8E020058 0040F809 00802821 00402821 0280F809 02A02021 00408821 8E02009C 0040F809 3C043F00 00402821 0260F809 02202021 8FBF002C AE420000 8FB50028 8FB40024 8FB30020 8FB2001C 8FB10018 8FB00014 03E00008 27BD0030 End CSUB ' CSUB cphase 00000000 27BDFFD0 AFB10018 AFB00014 3C119D00 8C900000 8E220068 00801821 AFB40024 AFB2001C AFBF002C AFB50028 AFB30020 00A0A021 02002021 00002821 0040F809 8C720004 2403FFFF 50430070 8E22009C 0200A821 3C119D00 8E22009C 3C0433D6 3484BF95 0040F809 8E330068 00402821 0260F809 02A02021 2403FFFF 1043003C 02002821 8E220064 02402021 0040F809 8E310078 0220F809 00402021 3C119D00 0040A821 8E220068 02002021 0040F809 00002821 24030001 10430038 8FBF002C 8E220068 02402021 0040F809 00002821 2413FFFF 10530006 02002021 8E220068 0040F809 00002821 50530050 8E22009C 3C119D00 8E220068 02402021 0040F809 00002821 00409821 2402FFFF 5262002C 8E220068 3C119D00 8E220068 02402021 0040F809 00002821 24030001 5043002C 8E220068 3C029D00 8C42009C 3C04BFC9 0040F809 24840FDA AE820000 8FBF002C 8FB50028 8FB40024 8FB30020 8FB2001C 8FB10018 8FB00014 03E00008 27BD0030 0000A821 3C119D00 02A08021 8E220068 02002021 0040F809 00002821 24030001 5443FFCC 8E220068 8FBF002C AE950000 8FB30020 8FB50028 8FB40024 8FB2001C 8FB10018 8FB00014 03E00008 27BD0030 02002021 0040F809 00002821 5453FFD2 3C119D00 8E22009C 10000015 8E300060 02002021 0040F809 00002821 1440FFD2 3C029D00 8E22009C 3C043FC9 0040F809 24840FDA 1000FFD1 AE820000 3C04BF80 0040F809 8E310058 00402821 0220F809 02002021 1000FF8B 0040A821 8E30005C 3C044049 0040F809 24840FDA 00402821 0200F809 02A02021 1000FFC0 AE820000 End CSUB CSUB cexp 00000000 27BDFFD0 AFB00010 3C109D00 00801821 AFB40020 8E02009C 8C940000 3C04402D AFBF002C AFB60028 AFB50024 AFB3001C AFB20018 AFB10014 3484F854 8C730004 00A08821 0040F809 8E120074 00402021 0240F809 02802821 00409021 3C043FC9 8E02009C 24840FDB 8E160060 8E140058 0040F809 8E15006C 00402021 02C0F809 02602821 02A0F809 00402021 00402821 0280F809 02402021 8E03006C 02602021 8E100058 0060F809 AE220000 00402821 0200F809 02402021 8FBF002C AE220004 8FB60028 8FB50024 8FB40020 8FB3001C 8FB20018 8FB10014 8FB00010 03E00008 27BD0030 End CSUB |
||||
PicFan Senior Member Joined: 18/03/2014 Location: AustriaPosts: 133 |
Thank you, i will try in the next time. |
||||
Print this page |