Ir para conteúdo
Fórum Script Brasil
  • 0

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


Leonardo Sochacki

Pergunta

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

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...