Re: Array Declaration Problem ??
- From: monir <monir@xxxxxxxxxxxxxxxxxxxxxxxxx>
- Date: Sat, 21 Jun 2008 12:24:01 -0700
Hi Bob;
Thanks again. I've done the correction:
Function MyRoots (a As Variant, m As Integer, polish As String)
Dim Roots As Variant
Dim ad As Variant
Dim j As Integer, its As Integer
Dim x(2) As Double
ReDim a(m + 1, 2)
ReDim Roots(m, 2)
ReDim ad(m + 1, 2)
' ..............................my code............
For j = 1 To m + 1
ad(j, 1) = a(j, 1)
ad(j, 2) = a(j, 2)
Next j
' ..............................my code............
Call Laguer (ad, j, x, its)
' ..............................my code............
Roots(j, 1) = x(1)
Roots(j, 2) = x(2)
MyRoots = Roots
End Function
The array function MyRoots() returns all zeros (same as was posted
originally).
It seems to me that by declaring the incoming array "a" using:
ReDim a(m+1,2)
it sets all elements of matrix "a" to 0.0. The Immediate Window for
MyRoots() confirms that. I even tried: ReDim Preserve a(m+1,2) with no
change.
(If you prefer, I would be glad to post or send you the function MyRoots()
and its sub Laguer() code. Total ~ 40 lines.)
Regards.
"Bob Phillips" wrote:
Sorry, missed the parameter.
Function MyRoots(a As Variant, m As Integer, polish As String)
Dim Roots As Variant
Dim ad As Variant
Dim j As Integer, its As Integer
Dim x(2) As Double
ReDim a(m + 1, 2)
ReDim Roots(m, 2)
ReDim ad(m + 1, 2)
'> ..............................my code............
For j = 1 To m + 1
ad(j, 1) = a(j, 1)
ad(j, 2) = a(j, 2)
Next j
'> ..............................my code............
Call Laguer(ad, j, x, its)
'> ..............................my code............
Roots(j, 1) = x(1)
Roots(j, 2) = x(2)
MyRoots = Roots
End Function
--
__________________________________
HTH
Bob
"monir" <monir@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
news:F36BF0A8-CAFE-4D7F-9FE6-AA2F93D0B099@xxxxxxxxxxxxxxxx
Hi Bob;
Thank you kindly for your prompt reply.
I've tried your suggestion.
Function MyRoots(a, m As Integer, polish As String)
Dim a As Variant, Roots As Variant
Dim ad As Variant
Dim j As Integer, its As Integer
Dim x(2) As Double
ReDim a(m + 1, 2)
ReDim Roots(m, 2)
ReDim ad(m + 1, 2)
..............................my code............For j = 1 To m + 1
ad(j, 1) = a(j, 1)
ad(j, 2) = a(j, 2)
Next j
..............................my code............Call Laguer (ad, j, x, its)
..............................my code............Roots(j, 1) = x(1)
Roots(j, 2) = x(2)
MyRoots = Roots
End Function
It produces the compile error: "Duplicate declaration in current scope"
with
reference to the "a" declaration in:
Dim a As Variant, Roots As Variant
Any suggestion ??
Regards.
"Bob Phillips" wrote:
I am not clear what your code is doing, especially the ,,, my code ...
bits,
but your array declaration is definitely wrong.
Try this
Function MyRoots(a, m As Integer, polish As String)
Dim a As Variant, Roots As Variant
Dim ad As Variant
Dim j As Integer, its As Integer
Dim x(2) As Double
ReDim a(m + 1, 2)
ReDim Roots(m, 2)
ReDim ad(m + 1, 2)
For j = 1 To m + 1
ad(j, 1) = a(j, 1)
ad(j, 2) = a(j, 2)
Next j
Call Laguer(ad, j, x, its)
Roots(j, 1) = x(1)
Roots(j, 2) = x(2)
MyRoots = Roots
End Function
--
HTH
Bob
(there's no email, no snail mail, but somewhere should be gmail in my
addy)
"monir" <monir@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
news:8636FAA1-9C87-4924-AFE6-E4453F25E894@xxxxxxxxxxxxxxxx
(This is a cross-post)
Hello;
I'm trying to correctly pass the range B11:C14 to the Function
MyRoots()
and
return the results by the array function to cells I11:J13.
Notice the use of ReDim. Declaring Dim a(m+1,2) As Double in Function
MyRoots() would produce a compile error: "Constant expresion required",
and
also I couldn't declare "a" as a 2D dynamic array!
I suspect the array variables declaration in the following example is
the
problem.
The array Function MyRoots() incorrectly returns 0.0 results to cells
I11:J13.
cell B8::3
cell B9: myTrue
cells B11:C14 numerical values
cells I11:J13:: array function {=MyRoots(B11:C14, B8, B9)}
Function MyRoots (a, m As Integer, polish As String)
ReDim a(m + 1, 2) As Double
ReDim roots(m, 2) As Double
Dim j As Integer, its As Integer
Dim x(2) As Double
ReDim ad(m + 1, 2) As Double
......................................my code............
For j = 1 To m + 1
ad(j, 1) = a(j, 1)
ad(j, 2) = a(j, 2)
Next j
......................................my code............
Call Laguer (ad, j, x, its)
......................................my code............
roots(j, 1) = x(1)
roots(j, 2) = x(2)
......................................my code............
MyRoots = roots
End Function
Sub Laguer (a, m, x, its)
Dim x1(2) As Double
......................................my code............
x(1) = x1(1)
x(2) = x1(2)
......................................my code............
Exit Sub
End Sub
Your expert help would be greatly appreciated.
Regards.
- Follow-Ups:
- Re: Array Declaration Problem ??
- From: Dana DeLouis
- Re: Array Declaration Problem ??
- From: monir
- Re: Array Declaration Problem ??
- References:
- Re: Array Declaration Problem ??
- From: Bob Phillips
- Re: Array Declaration Problem ??
- From: monir
- Re: Array Declaration Problem ??
- From: Bob Phillips
- Re: Array Declaration Problem ??
- Prev by Date: Re: Clear Contents Macro
- Next by Date: Re: Clear Contents Macro
- Previous by thread: Re: Array Declaration Problem ??
- Next by thread: Re: Array Declaration Problem ??
- Index(es):
Relevant Pages
|