Yeahh

Yeuh, UhHuh

Tuesday, May 6, 2025

 

The Wave Matrix Module Function Code

It's late...

I'll be traveling to IA early tomorrow.

Below is the code and a link to a text file of the code.

I will get more in to it later.

For now, you can examine.

If you know what to do, do it.

https://member.lotterypost.com/jadelottery/images/TheWaveMatrixModuleFunctionCode-00.txt

____________________________________________________________

Function TheWaveMatrix(ByVal theRange As Range, _
                       ByVal waves As Long, _
                       ByVal iterations As Integer, _
                       ByVal precision As Integer) As Variant()
   
    On Error GoTo ExitFunction
    Dim Er(0) As Variant: Er(0) = "Error"
    Dim i, j, k, items, mn, mx As Long: items = theRange.Rows.Count
    Dim arry() As Double: ReDim arry(1 To items): For i = 1 To items: arry(i) = theRange.Cells(i, 1): Next i
    Dim matrix() As Variant: ReDim matrix(1 To items, 1 To (waves + 2))
    Dim a, b, degree, sum_y, sum_xy, avg_x, avg_y, avg_xx, avg_xy As Double
    Dim amplitude_degree, amplitude_degree_precision As Double
    Dim frequency_degree, frequency_degree_precision As Double
    Dim degree_precision As Double: degree_precision = 1
    Dim optimal_found, optimal, last_optimal_state, arry_zeroed As Boolean
    Dim arry_up() As Double: ReDim arry_up(1 To items)
    Dim arry_down() As Double: ReDim arry_down(1 To items)
    Dim arry_average() As Double: ReDim arry_average(1 To items)
    Dim arry_sqr_sum, BMA_arry_sqr_sum, RMS_arry, RMS_BMA_arry As Double
    Dim frequency() As Long: ReDim frequency(1 To items)
    Dim diff_frequency() As Long: ReDim diff_frequency(1 To items - 1)
    Dim diff_diff_frequency() As Long: ReDim diff_diff_frequency(1 To items - 2)
    Dim frequency_set(1 To 3) As Long
   
    If (theRange.Columns.Count > 1) Then Er(0) = " Too Many Columns Selected": GoTo ExitFunction
    If (waves < 1) Then Er(0) = " # of Waves < 1": GoTo ExitFunction
    If (iterations < 1) Then Er(0) = " # of Iterations < 1": GoTo ExitFunction
    If (precision < 1) Or (precision > 8) Then Er(0) = " Precision = {1, 2, 3, 4, 5, 6, 7, 8}": GoTo ExitFunction
   
    For i = 1 To precision
        degree_precision = degree_precision / 10
    Next i
   
    sum_y = 0
    sum_xy = 0
   
    For i = 1 To items
        sum_y = sum_y + arry(i)
        sum_xy = sum_xy + i * arry(i)
    Next i
   
    avg_y = sum_y / items
    avg_xy = sum_xy / items
   
    avg_x = (items + 1) / 2
    avg_xx = (items + 1) * (2 * items + 1) / 6
   
    b = (avg_xy - avg_x * avg_y) / (avg_xx - avg_x * avg_x)
    a = avg_y - (b * avg_x)
   
    For i = 1 To items
        matrix(i, 1) = a + (b * i)
        arry(i) = arry(i) - matrix(i, 1)
    Next i
   
    arry_zeroed = False
   
    For k = 1 To waves
   
        sum_y = 0
       
        For i = 1 To items
            sum_y = sum_y + Abs(arry(i))
        Next i
   
        If (sum_y = 0) Then arry_zeroed = True
   
        If arry_zeroed Then
       
            For i = 1 To items
                matrix(i, k + 1) = arry(i)
            Next i
       
        Else
       
            amplitude_degree = 0
            amplitude_degree_precision = 1
            optimal_found = False
   
            For i = 1 To items
                arry_average(i) = arry(i)
            Next i
       
            For j = 1 To iterations
                arry_up(1) = arry_average(1)
           
                For i = 2 To items
                    arry_up(i) = (arry_up(i - 1) + Exp(amplitude_degree) * arry_average(i)) / (1 + Exp(amplitude_degree))
                Next i
           
                arry_down(items) = arry_average(items)
           
                For i = (items - 1) To 1 Step -1
                    arry_down(i) = (arry_down(i + 1) + Exp(amplitude_degree) * arry_average(i)) / (1 + Exp(amplitude_degree))
                Next i
           
                For i = 1 To items
                    arry_average(i) = (arry_up(i) + arry_down(i)) / 2
                Next i
            Next j
   
            arry_sqr_sum = 0
            BMA_arry_sqr_sum = 0
            RMS_arry = 0
            RMS_BMA_arry = 0
       
            For i = 1 To items
                arry_sqr_sum = arry_sqr_sum + arry(i) * arry(i)
                BMA_arry_sqr_sum = BMA_arry_sqr_sum + arry_average(i) * arry_average(i)
            Next i
       
            RMS_arry = Sqr(arry_sqr_sum / items)
            RMS_BMA_arry = Sqr(BMA_arry_sqr_sum / items)
       
            If ((RMS_arry / RMS_BMA_arry) > 2) Then
                optimal = True
            Else
                optimal = False
            End If
   
            last_optimal_state = optimal
       
            Do
                For i = 1 To items
                    arry_average(i) = arry(i)
                Next i
           
                For j = 1 To iterations
                    arry_up(1) = arry_average(1)
               
                    For i = 2 To items
                        arry_up(i) = (arry_up(i - 1) + Exp(amplitude_degree) * arry_average(i)) / (1 + Exp(amplitude_degree))
                    Next i
               
                    arry_down(items) = arry_average(items)
               
                    For i = (items - 1) To 1 Step -1
                        arry_down(i) = (arry_down(i + 1) + Exp(amplitude_degree) * arry_average(i)) / (1 + Exp(amplitude_degree))
                    Next i
               
                    For i = 1 To items
                        arry_average(i) = (arry_up(i) + arry_down(i)) / 2
                    Next i
                Next j
   
                arry_sqr_sum = 0
                BMA_arry_sqr_sum = 0
                RMS_arry = 0
                RMS_BMA_arry = 0
           
                For i = 1 To items
                    arry_sqr_sum = arry_sqr_sum + arry(i) * arry(i)
                    BMA_arry_sqr_sum = BMA_arry_sqr_sum + arry_average(i) * arry_average(i)
                Next i
           
                RMS_arry = Sqr(arry_sqr_sum / items)
                RMS_BMA_arry = Sqr(BMA_arry_sqr_sum / items)
           
                If ((RMS_arry / RMS_BMA_arry) > 2) Then
                    optimal = True
                Else
                    optimal = False
                End If
   
                If (Not optimal) And (Not last_optimal_state) Then
                    amplitude_degree = amplitude_degree - amplitude_degree_precision
                ElseIf (Not optimal) And (last_optimal_state) Then
                    amplitude_degree = amplitude_degree - amplitude_degree_precision
                    amplitude_degree_precision = amplitude_degree_precision / 10
                ElseIf (optimal) And (last_optimal_state) Then
                    amplitude_degree = amplitude_degree + amplitude_degree_precision
                ElseIf (optimal) And (Not last_optimal_state) Then
                    amplitude_degree = amplitude_degree + amplitude_degree_precision
                    amplitude_degree_precision = amplitude_degree_precision / 10
                End If
       
                If (optimal) And (amplitude_degree_precision <= degree_precision) Then optimal_found = True
                If (Abs(amplitude_degree) >= 100) Then optimal_found = True
       
                last_optimal_state = optimal
   
            Loop Until optimal_found
   
            frequency_degree = 0
            frequency_degree_precision = 1
            optimal_found = False
   
            For i = 1 To items
                arry_average(i) = arry(i)
            Next i
       
            For j = 1 To iterations
                arry_up(1) = arry_average(1)
           
                For i = 2 To items
                    arry_up(i) = (arry_up(i - 1) + Exp(frequency_degree) * arry_average(i)) / (1 + Exp(frequency_degree))
                Next i
           
                arry_down(items) = arry_average(items)
           
                For i = (items - 1) To 1 Step -1
                    arry_down(i) = (arry_down(i + 1) + Exp(frequency_degree) * arry_average(i)) / (1 + Exp(frequency_degree))
                Next i
           
                For i = 1 To items
                    arry_average(i) = (arry_up(i) + arry_down(i)) / 2
                Next i
            Next j
   
            frequency_set(1) = 0
            frequency_set(2) = 0
            frequency_set(3) = 0
       
            For i = 1 To items
                If (arry_average(i) > 0) Then
                    frequency(i) = 1
                Else
                    frequency(i) = 0
                End If
            Next i
   
            For i = 1 To items - 1
                If ((arry_average(i + 1) - arry_average(i)) > 0) Then
                    diff_frequency(i) = 1
                Else
                    diff_frequency(i) = 0
                End If
            Next i
   
            For i = 1 To items - 2
                If ((arry_average(i + 2) - 2 * arry_average(i + 1) + arry_average(i)) > 0) Then
                    diff_diff_frequency(i) = 1
                Else
                    diff_diff_frequency(i) = 0
                End If
            Next i
   
            For i = 1 To items - 1
                frequency_set(1) = frequency_set(1) + Abs(frequency(i + 1) - frequency(i))
            Next i
   
            For i = 1 To items - 2
                frequency_set(2) = frequency_set(2) + Abs(diff_frequency(i + 1) - diff_frequency(i))
            Next i
   
            For i = 1 To items - 3
                frequency_set(3) = frequency_set(3) + Abs(diff_diff_frequency(i + 1) - diff_diff_frequency(i))
            Next i
   
            mn = frequency_set(1)
            mx = frequency_set(1)
            If frequency_set(2) < mn Then mn = frequency_set(2)
            If frequency_set(2) > mx Then mx = frequency_set(2)
            If frequency_set(3) < mn Then mn = frequency_set(3)
            If frequency_set(3) > mx Then mx = frequency_set(3)
   
            If ((mx - mn) > 3) Then
                optimal = False
            Else
                optimal = True
            End If
   
            last_optimal_state = optimal
       
            Do
       
                For i = 1 To items
                    arry_average(i) = arry(i)
                Next i
           
                For j = 1 To iterations
                    arry_up(1) = arry_average(1)
               
                    For i = 2 To items
                        arry_up(i) = (arry_up(i - 1) + Exp(frequency_degree) * arry_average(i)) / (1 + Exp(frequency_degree))
                    Next i
               
                    arry_down(items) = arry_average(items)
               
                    For i = (items - 1) To 1 Step -1
                        arry_down(i) = (arry_down(i + 1) + Exp(frequency_degree) * arry_average(i)) / (1 + Exp(frequency_degree))
                    Next i
               
                    For i = 1 To items
                        arry_average(i) = (arry_up(i) + arry_down(i)) / 2
                    Next i
                Next j
   
                frequency_set(1) = 0
                frequency_set(2) = 0
                frequency_set(3) = 0
           
                For i = 1 To items
                    If (arry_average(i) > 0) Then
                        frequency(i) = 1
                    Else
                        frequency(i) = 0
                    End If
                Next i
   
                For i = 1 To items - 1
                    If ((arry_average(i + 1) - arry_average(i)) > 0) Then
                        diff_frequency(i) = 1
                    Else
                        diff_frequency(i) = 0
                    End If
                Next i
   
                For i = 1 To items - 2
                    If ((arry_average(i + 2) - 2 * arry_average(i + 1) + arry_average(i)) > 0) Then
                        diff_diff_frequency(i) = 1
                    Else
                        diff_diff_frequency(i) = 0
                    End If
                Next i
   
                For i = 1 To items - 1
                    frequency_set(1) = frequency_set(1) + Abs(frequency(i + 1) - frequency(i))
                Next i
   
                For i = 1 To items - 2
                    frequency_set(2) = frequency_set(2) + Abs(diff_frequency(i + 1) - diff_frequency(i))
                Next i
   
                For i = 1 To items - 3
                    frequency_set(3) = frequency_set(3) + Abs(diff_diff_frequency(i + 1) - diff_diff_frequency(i))
                Next i
   
                mn = frequency_set(1)
                mx = frequency_set(1)
                If frequency_set(2) < mn Then mn = frequency_set(2)
                If frequency_set(2) > mx Then mx = frequency_set(2)
                If frequency_set(3) < mn Then mn = frequency_set(3)
                If frequency_set(3) > mx Then mx = frequency_set(3)
   
                If ((mx - mn) > 3) Then
                    optimal = False
                Else
                    optimal = True
                End If
           
                If (Not optimal) And (Not last_optimal_state) Then
                    frequency_degree = frequency_degree - frequency_degree_precision
                ElseIf (Not optimal) And (last_optimal_state) Then
                    frequency_degree = frequency_degree - frequency_degree_precision
                    frequency_degree_precision = frequency_degree_precision / 10
                ElseIf (optimal) And (Not last_optimal_state) Then
                    frequency_degree = frequency_degree + frequency_degree_precision
                    frequency_degree_precision = frequency_degree_precision / 10
                ElseIf (optimal) And (last_optimal_state) Then
                    frequency_degree = frequency_degree + frequency_degree_precision
                End If
           
                If (optimal) And (frequency_degree_precision <= degree_precision) Then optimal_found = True
                If (Abs(frequency_degree) >= 100) Then optimal_found = True
       
                last_optimal_state = optimal
       
            Loop Until optimal_found
   
            degree = (amplitude_degree + frequency_degree) / 2
   
            For i = 1 To items
                arry_average(i) = arry(i)
            Next i
       
            For j = 1 To iterations
                arry_up(1) = arry_average(1)
           
                For i = 2 To items
                    arry_up(i) = (arry_up(i - 1) + Exp(degree) * arry_average(i)) / (1 + Exp(degree))
                Next i
           
                arry_down(items) = arry_average(items)
           
                For i = (items - 1) To 1 Step -1
                    arry_down(i) = (arry_down(i + 1) + Exp(degree) * arry_average(i)) / (1 + Exp(degree))
                Next i
           
                For i = 1 To items
                    arry_average(i) = (arry_up(i) + arry_down(i)) / 2
                Next i
            Next j
   
            For i = 1 To items
                matrix(i, k + 1) = arry_average(i)
                arry(i) = arry(i) - matrix(i, k + 1)
            Next i
       
        End If
   
    Next k
   
    For i = 1 To items
        matrix(i, waves + 2) = arry(i)
    Next i
   
    TheWaveMatrix = matrix()
   
    Exit Function
   
ExitFunction:

    If Er(0) = "Error" Then Er(0) = " Error - " & err.Number & ", " & err.Description

    TheWaveMatrix = Er()
   
End Function


Comments:
Busy, Busy, Workin in Davenport today, then heading back to MN.
I'll post a "How To..." either tonight or tomorrow.
Keep in mind, I will not be running an Excel 101 Class.
I'll expect you to know how to use Excel reasonably well and how to navigate the spreadsheet and using functions therein.
Post a Comment

<< Home

Archives

May 2025   April 2025   March 2025   October 2024   May 2024   April 2024   March 2024   February 2024   January 2024   December 2023   November 2023   August 2023   May 2023   April 2023   March 2023   March 2021   February 2021   January 2021   December 2020   November 2020   October 2020   September 2020   August 2020   July 2020   June 2020   May 2020   April 2020   March 2020   January 2020   December 2019   November 2019   October 2019   September 2019   August 2019   July 2019   June 2019   May 2019   April 2019   March 2019   February 2019   January 2019   December 2018   November 2018   October 2018   September 2018   August 2018   July 2018   June 2018   May 2018   April 2018   March 2018   February 2018   January 2018   December 2017   November 2017   October 2017   September 2017   August 2017   July 2017   June 2017   May 2017   April 2017   March 2017   February 2017   January 2017   December 2016   November 2016   October 2016   September 2016   August 2016   July 2016   June 2016   May 2016   April 2016   March 2016   February 2016   January 2016   December 2015   November 2015   October 2015   September 2015   August 2015   July 2015   June 2015   May 2015   April 2015   March 2015   February 2015   January 2015   December 2014   November 2014   October 2014   September 2014   August 2014   July 2014   June 2014   May 2014   April 2014   March 2014   February 2014   January 2014   December 2013   November 2013   October 2013   September 2013   August 2013   July 2013   June 2013   May 2013   April 2013   March 2013   February 2013   January 2013   December 2012   November 2012   October 2012   September 2012   August 2012   July 2012   June 2012   May 2012   April 2012   March 2012   February 2012   January 2012   December 2011   November 2011   October 2011   September 2011   August 2011   July 2011   June 2011   May 2011   April 2011   March 2011   February 2011   January 2011   December 2010   November 2010   October 2010   September 2010   August 2010   July 2010   June 2010   May 2010   April 2010   March 2010   February 2010   January 2010   December 2009   November 2009   October 2009   September 2009   August 2009   July 2009   June 2009   May 2009   April 2009   March 2009   February 2009   January 2009   December 2008   November 2008   October 2008   September 2008   August 2008   July 2008   June 2008   May 2008   April 2008   March 2008   February 2008   January 2008   December 2007   November 2007   October 2007   September 2007   August 2007   July 2007   June 2007   May 2007   April 2007   March 2007   February 2007   January 2007   December 2006   November 2006   January 2006   November 2005   August 2005   July 2005   June 2005   April 2005   March 2005   February 2005   January 2005   December 2004  

Powered by Lottery PostSyndicated RSS FeedSubscribe