A Microsoft Office (Excel, Word) forum. OfficeFrustration

If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

Go Back   Home » OfficeFrustration forum » Microsoft Access » Using Forms
Site Map Home Register Authors List Search Today's Posts Mark Forums Read  

complex number



 
 
Thread Tools Display Modes
  #1  
Old November 3rd, 2004, 04:27 PM
alyot
external usenet poster
 
Posts: n/a
Default complex number

Hi,
How can I add complex number in forms.

Thanks.

Alain


  #2  
Old November 4th, 2004, 09:25 PM
John Vinson
external usenet poster
 
Posts: n/a
Default

On Wed, 3 Nov 2004 17:27:48 +0100, "alyot"
wrote:

Hi,
How can I add complex number in forms.


Access doesn't support complex numbers (e.g. x + iy) natively; you'll
need to store the value in two number fields, and write your own VBA
code to add, subtract, multiply and divide them.

If you have some other meaning for the term "complex number" please
explain.

John W. Vinson[MVP]
Join the online Access Chats
Tuesday 11am EDT - Thursday 3:30pm EDT
http://community.compuserve.com/msdevapps
  #3  
Old November 6th, 2004, 07:33 PM
StCyrM
external usenet poster
 
Posts: n/a
Default

Hi Alain

Here's a group of functions that should be useful to you.

Best regards

Maurice St-Cyr




------------------- Code Start -----
Option Compare Database 'Use database order for string comparisons
Option Explicit

Type Complex
i As Double
r As Double
End Type

Type Polar
z As Double ' Magnitude
Th As Double ' Theta - angle
End Type

Sub Complex2Polar(a As Complex, Result As Polar)
'
' Converts a Complex number into Polar form
'
Result.z = IMMag(a)
Result.Th = ATan2(a.r, a.i) ' From Trig module
End Sub

Sub IMAdd(a As Complex, b As Complex, Result As Complex)
'
' Adds 2 complex numbers
'
Result.i = a.i + b.i
Result.r = a.r + b.r
End Sub

Sub IMConjugate(a As Complex, Result As Complex)
'
' Returns the Conjugate of A
'
Result.r = a.r
Result.i = -a.i
End Sub

Sub IMDiv(a As Complex, b As Complex, Result As Complex)
'
' Divides A by B
'
Dim B1 As Complex
IMInverse b, B1
IMProduct a, B1, Result
End Sub

Sub IMExp(a As Complex, Result As Complex)
'
' Does e^A where A is a complex number
'
Dim A1 As Complex, z As Double
A1 = a
z = Exp(A1.r)
Result.r = z * Cos(A1.i)
Result.i = z * Sin(A1.i)
End Sub

Function IMFormat(a As Complex) As String
'
' Formats a Complex number into a string
'
If a.i = 0 Then
IMFormat = a.r & " + " & a.i & "i"
Else
IMFormat = a.r & " - " & Abs(a.i) & "i"
End If
End Function

Sub IMInverse(a As Complex, Result As Complex)
'
' Finds the inverse value of A, such that A * Result = 1
'
Dim Temp As Double
Temp = a.r * a.r + a.i * a.i
Result.r = a.r / Temp
Result.i = -a.i / Temp
End Sub

Sub IMln(a As Complex, Result As Complex)
'
' Returns natural Logarithm of A
'
Dim A1 As Complex
A1 = a
Result.r = Log(IMMag(A1))
Result.i = ATan2(A1.r, A1.i)
End Sub

Sub IMLog10(a As Complex, Result As Complex)
'
' Takes Log A base 10
'
IMln a, Result
IMRProduct Result, Log10(Exp(1)), Result
End Sub

Sub IMLog2(a As Complex, Result As Complex)
'
' Takes Log A base 2
'
IMln a, Result
IMRProduct Result, Log2(Exp(1)), Result
End Sub

Function IMMag(a As Complex) As Double
'
' Returns Magnitude of Complex number
'
IMMag = Sqr(a.r * a.r + a.i * a.i)
End Function

Function IMPFormat(a As Polar) As String
'
' Formats a Polar number into a string
'
If a.Th = 0 Then
IMPFormat = a.z & " + " & a.Th & "Th"
Else
IMPFormat = a.z & " - " & Abs(a.Th) & "Th"
End If
End Function

Sub IMPower(a As Complex, b As Complex, Result As Complex)
'
' A^B where both are complex numbers
'
Dim Temp1 As Complex, Temp2 As Complex
IMln a, Temp1
IMProduct Temp1, b, Temp2
IMExp Temp2, Result
End Sub

Sub IMProduct(a As Complex, b As Complex, Result As Complex)
'
' Multiples 2 complex numbers
'
Dim A1 As Complex, B1 As Complex ' Prevents problems if do IMult A, A,
A
A1 = a
B1 = b
Result.i = A1.i * B1.r + A1.r * B1.i
Result.r = A1.r * B1.r - A1.i * B1.i
End Sub

Sub IMRDiv(a As Complex, b As Double, Result As Complex)
'
' Divides A by the scalar value B
'
Result.r = a.r / b
Result.i = a.i / b
End Sub

Sub IMRPower(a As Complex, b As Double, Result As Complex)
'
' Does A^B where A in a Complex number and B is Real number
'
Dim APolar As Polar
Complex2Polar a, APolar
APolar.z = APolar.z ^ b
APolar.Th = APolar.Th * b
Polar2Complex APolar, Result
End Sub

Sub IMRProduct(a As Complex, b As Double, Result As Complex)
'
' Multiplies A by the scalar value B
'
Result.r = a.r * b
Result.i = a.i * b
End Sub

Sub IMSqr(a As Complex, Result As Complex)
'
' Takes the square root of a complex number
'
Dim A1 As Polar
Complex2Polar a, A1
A1.z = Sqr(A1.z)
A1.Th = A1.Th / 2
Polar2Complex A1, Result
End Sub

Sub IMSub(a As Complex, b As Complex, Result As Complex)
'
' Subtracts 2 complex numbers
'
Result.i = a.i - b.i
Result.r = a.r - b.r
End Sub

Sub IMTest()
'
' This procedure tests all the Complex Math functions and outputs results to
the Debug Window.
'
Dim a As Complex, b As Complex, C As Complex, D As Complex, E As Complex, P As
Polar
a.r = 3: a.i = 4
b.r = 5: b.i = -3
Debug.Print "A", IMFormat(a)
Debug.Print "B", IMFormat(b)
Complex2Polar a, P
Polar2Complex P, D
Debug.Print "A - P - A", IMPFormat(P), IMFormat(D)
IMInverse a, C
IMProduct a, C, D
Debug.Print "Inverse A", IMFormat(C), IMFormat(D)
IMConjugate a, C
Debug.Print "Conjugate", IMFormat(C)
Debug.Print "Magnitude", IMMag(a)
IMAdd a, b, C
IMSub C, b, D
Debug.Print "A+B,-B", IMFormat(C), IMFormat(D)
IMProduct a, b, C
IMDiv C, b, D
Debug.Print "A*B,/B", IMFormat(C), IMFormat(D)
IMRProduct a, 5, C
IMRDiv C, 5, D
Debug.Print "A*5,/5", IMFormat(C), IMFormat(D)
IMSqr a, C
IMRPower C, 2, D
Debug.Print "Sqr(A),^2", IMFormat(C), IMFormat(D)
IMln a, C
IMExp C, D
Debug.Print "Ln A,e^", IMFormat(C), IMFormat(D)
IMLog10 a, C
D.r = 10: D.i = 0
IMPower D, C, E
Debug.Print "Log10 A,10^", IMFormat(C), IMFormat(E)
IMLog2 a, C
D.r = 2: D.i = 0
IMPower D, C, E
Debug.Print "Log2 A,2^", IMFormat(C), IMFormat(E)
IMPower a, b, C
IMInverse b, D
IMPower C, D, E
Debug.Print "A^B,^(1/B)", IMFormat(C), IMFormat(E)
End Sub

Sub Polar2Complex(a As Polar, Result As Complex)
'
' Converts a Polar form into Complex number
'
Result.r = a.z * Cos(a.Th)
Result.i = a.z * Sin(a.Th)
End Sub

----------------- Code end ------




Hi,
How can I add complex number in forms.

Thanks.

Alain



  #4  
Old November 6th, 2004, 09:28 PM
John Vinson
external usenet poster
 
Posts: n/a
Default

On 06 Nov 2004 19:33:27 GMT, (StCyrM) wrote:

Here's a group of functions that should be useful to you.


Wow. Impressive! If you haven't done so already, would you consider
posting these to (say)
www.mvps.org/access as a sample?


John W. Vinson[MVP]
Join the online Access Chats
Tuesday 11am EDT - Thursday 3:30pm EDT
http://community.compuserve.com/msdevapps
 




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
query a number stored as text Lee Running & Setting Up Queries 19 October 13th, 2004 04:10 AM
Number of Mondays in month Michael Noblet Setting Up & Running Reports 3 July 28th, 2004 10:41 PM
Restart Autonumber Traci New Users 22 July 21st, 2004 01:10 AM
Job Number Match function??????? Russ Worksheet Functions 3 April 19th, 2004 06:51 PM
Excel- Inserting a varying number of rows Ken Wright Worksheet Functions 1 March 20th, 2004 10:20 PM


All times are GMT +1. The time now is 06:21 PM.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 OfficeFrustration.
The comments are property of their posters.