• 0
Sign in to follow this  
Leonardo Sochacki

VBA não retorna o resultado correto para operação matemática extensa

Question

Bom dia a todos!

Estou tentado utilizar o VBA para realizar um cálculo relativamente extenso, que não se repete (não pode ser feito por loop) e que foi extraído do software matemático Maple(apenas a operação matemática em si, o resto do código eu que fiz). Como o Maple calcula nativamente isso, o resultado que ele devolve é correto, porém, quando eu tento realizar a conta pelo VBA ele me devolve um valor diferente. Tentei algumas alternativas para solucionar o problema porém não tive sorte. Dentre os testes eu: 
- tentei declarar todas as variáveis "t" das equações como Double.
- tentei modificar a expressão no Maple e simplificá-la(mudar as expressões para "t").
- adicionei uma parte do código para conferir se as variáveis que ele utiliza para calcular estão corretas.

Eu acredito que algo possa estar fazendo o VBA se perder no meio dessa conta, porém não sei o que.

Se alguém puder olhar/ajudar/sugerir algo, ficarei eternamente grato!

PS:Entendo um pouco de programação mas não sou programador, então já aviso, meu código pode parecer meio feioso.

 

Tentei anexar o arquivo do VBA aqui mas não consegui. Segue o código abaixo:

 

Private Sub C1()
        
    'Calcula C1 e atribui a B1 da primeira planilha
        
            
    'Declaração de Variáveis
    
    Dim OD As Double, thick As Double, ID As Double
    Dim E As Double
    Dim Ine As Double
    Dim Ei As Double
    Dim Lm As Double
    Dim ml As Double, mr As Double
    Dim rho As Double
    Dim jr As Double, jl As Double
    Dim sr As Double, sl As Double
    Dim Ar As Double
    Dim Mee As Double
    Dim re As Double
    Dim Le As Double
    Dim Fe As Double
    Dim beta As Double
    Dim omega As Double
    Dim Pi As Double
    Dim omega_omegan As Double
    Dim C1 As Double

        'Atribuição dos valores
        'Na realidade estes valores são extraidos de células do excel,
        'para fins demosntrativos eu atribui os valores diretamente
        
        OD = 0.22
        thick = 0.02
        Lm = 6
        E = 2 * 10 ^ (11)
        omega_omegan = 0.8
        Pi = 4 * Atn(1)
        ID = OD - 2 * thick
        Ine = Pi * (OD ^ (4) - ID ^ (4)) / 64
        Ei = E * Ine
        Ar = Pi * (OD ^ (2) - ID ^ (2)) / 4
        rho = 7850
        Le = 0.5
        beta = 0.617843785182212
        Mee = 5
        re = 0.2
        omega = (beta ^ 2) * (Ei / (rho * Ar)) ^ (1 / 2)
        Fe = Mee * re * ((omega_omegan * omega) / (2 * Pi)) ^ (2)
        mr = 200
        ml = mr
        jr = 0
        jl = 0
        sr = 0
        sl = 0
    
            'Exibe os valores que estão sendo usados no cálculo
            
            Range("b13").Value = omega
            Range("b14").Value = beta
            Range("b15").Value = Ei
            Range("b16").Value = rho
            Range("b17").Value = Ar
            Range("b18").Value = Fe
            Range("b19").Value = Mee
            Range("b20").Value = ml
            Range("b21").Value = mr
            Range("b22").Value = jl
            Range("b23").Value = jr
            Range("b24").Value = sl
            Range("b25").Value = sr
            Range("b26").Value = re
            Range("b27").Value = Le
            Range("b28").Value = OD
            Range("b29").Value = ID
            Range("b30").Value = thick
        
                'Realiza o cálculo de C1 efetivamente
                
                t3 = beta * Lm / 2#
                t4 = WorksheetFunction.Sinh(t3)
                t5 = sr - Le
                t7 = sr * t5 * mr
                t8 = t7 + jr
                t11 = Sin(t3)
                t12 = ml * t11
                t13 = WorksheetFunction.Cosh(t3)
                t17 = Cos(t3)
                t19 = t4 * t4
                t23 = beta * beta
                t24 = t23 * beta
                t25 = t23 * t23
                t26 = t25 * t24
                t30 = mr * t5
                t31 = t13 * t13
                t35 = sl * sl
                t36 = ml * t35
                t38 = (t36 + jl) * rho
                t48 = t25 * t23
                t50 = sl * t5
                t51 = sl + sr
                t54 = sl * jr
                t55 = jl * Le
                t58 = jl * mr
                t59 = t58 * t5
                t62 = rho * t17
                t63 = t62 * t31
                t77 = t5 * t51 * mr
                t78 = t77 + jr
                t83 = t62 * t19
                t86 = t25 * beta
                t92 = Ar * Le
                t95 = jl / 2#
                t107 = Ar * rho
                t112 = sl + Le
                t114 = sl * t112 * ml
                t116 = Ar * Ar
                t118 = rho * rho
                t119 = t118 * t17
                t125 = jr / 2#
                t129 = ml * mr
                t146 = ml * t112
                t149 = sl * ml
                t159 = t116 * t118
                t172 = t116 * Ar
                t173 = t118 * rho
                t174 = t172 * t173
                t192 = jl * jr
                t193 = t17 * t17
                t204 = t25 * t25
                t206 = sr * sr
                t209 = -jl * t206 - jr * t35
                t213 = t192 * mr
                t214 = (t209 * mr - t192) * ml - t213
                t216 = t214 * t11 * Ar
                t226 = t107 * t13
                t232 = t4 * t11
                t233 = mr * t206
                t255 = ((sr * t51 * mr + jr) * sl * ml + t58 * sr) * Ar * rho
                t257 = jl + jr
                t258 = t129 * t257
                t259 = -2# * t255 - t258
                t261 = t259 * t11 * Ar
                t272 = t51 * t51
                t273 = t272 * mr
                t282 = 2# * ((t273 + t95 + jr) * ml + (jl + t125) * mr) * t116 * t118 * t193
                t305 = Ar * (t36 + t233 + jl + jr) * rho + 2# * t129 * t51
                t307 = t305 * t116 * t118
                t308 = t11 * t17
                t309 = t308 * t31
                t311 = t305 * Ar
                t320 = t308 * t19
                t335 = ml + mr
                t336 = t174 * t335
                t349 = t116 * t116
                t350 = t118 * t118
                t351 = t349 * t350
                C1 = -Fe * Ar * ((t8 * jl * ml * t17 * t19 - t4 * t8 * jl * t12 * t13) * t26 + (-t11 * jl * ml * t30 * t31 - t4 * (-2# * t8 * Ar * t38 - jl * ml * t30) * t17 * t13) * t48 + (-((-t50 * t51 * mr - t54 + t55) * ml - t59) * Ar * t63 + 2# * t4 * ml * Ar * (sl * sr * t30 + t55 / 2# + t54) * rho * t11 * t13 + (sl * t78 * ml + t59) * Ar * t83) * t86 + (t12 * Ar * t78 * rho * t31 - 2# * t4 * (t92 * t38 - ml * (t50 * mr - t95)) * Ar * t62 * t13 + t11 * (t77 + jl + jr) * ml * t107 * t19) * t25 + (-(t114 + t7 + jl + jr) * t116 * t119 * t31 - 2# * t4 * ((Le * ml * sl - t7 / 2# - t125) * Ar * rho - t129 * t5) * Ar * rho * t11 * t13 - (t114 + jl) * t116 * t119 * t19) * t24 + (-t11 * t116 * t118 * t146 * t31 - 2# * t4 * (t149 + t30 / 2#) * t116 * t119 * t13 - t11 * (t146 - t30) * t159 * t19) * t23 + (-t4 * t116 * t118 * (t92 * rho + 2# * ml) * t11 * _
                t13 + t174 * Le * t17 * t19) * beta + t172 * t17 * t13 * t4 * t173 - t172 * t11 * t31 * t173) * rho / t24 / Ei / (((t192 * t129 * t193 - t192 * t129) * t31 + t192 * ml * mr * t193 * t19) * t204 + (-t216 * t63 - 2# * t4 * (t214 * t193 + (-t209 * mr / 2# + t192 / 2#) * ml + t213 / 2#) * t226 - t216 * t83) * t26 - 4# * t232 * (-Ar * (t233 + jr) * t38 - t129 * (jl * sr + t54)) * t17 * t107 * t13 * t48 + (-t261 * t63 - 2# * t4 * (-t259 * t193 - t255 - t258 / 2#) * t226 - t261 * t83) * t86 + ((-t282 + ((t273 + jr) * ml + t58) * t116 * t118) * t31 + (-t282 + ((t273 + jl + jr) * ml + mr * t257) * t116 * t118) * t19) * t25 + (-t307 * t309 - 2# * t4 * (t311 * rho * t193 - t311 * rho / 2#) * t226 - t307 * t320) * t24 - 4# * t232 * (Ar * (mr * sr + t149) * rho + t129) * t116 * t119 * t13 * t23 + (-t336 * t309 - 2# * t4 * (-t159 * t335 * t193 + t159 * t335 / 2#) * t226 - t336 * t320) * beta + (t351 * t193 - t351) * t31 + t349 * t193 * t19 * t350) / 2#
     
            'Atribui C1 a célula B1 da primeira planilha
                
            Worksheets(1).Range("b1") = C1
        
End Sub

Share this post


Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this