elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  AYUDA PROGRAMA FORMULA SIMPSON 1/2
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: AYUDA PROGRAMA FORMULA SIMPSON 1/2  (Leído 2,457 veces)
RUNJAVCOS

Desconectado Desconectado

Mensajes: 1


Ver Perfil
AYUDA PROGRAMA FORMULA SIMPSON 1/2
« en: 28 Septiembre 2013, 07:07 am »

HOLA AMIGOS LA  CUESTION ES QUE ME DEJARON UN PROYECTO PARA CALCULAR UNA INTEGRAL POR EL METODO DE SIMPSON PERO NO PUEDO MOSTRAR EL RESULTADO  SI LE PUEDEN ECHAR UN VISTAZO Y ME PUEDEN DECIR MI ERROR SE LES AGRADECERIA MUCHO!
Código:
 // v Declaración de bibliotecas
#include <string.h>
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#include <math.h>

enum BOOL{FALSE=0,TRUE=1};

//num_seg entero positivo, ya que sirve de límite derecho del intervalo, el límite izquierdo es cero.
// c Definición de clase CDispersion
class CDistribucionT{
private:
      float m_X;
      int m_NumSeg;
      int m_DOF;
      float m_E;
      float m_ValorUno;
      float m_ValorDos;
     
      int gammaInt(int);
      float gammaFloat(float);
      float primerFactor(void);
      float xi(int);
      float baseSegundoFactor(float);
      float segundoFactor(float);
      float f(float);
      float termino(int, int);
public:
      CDistribucionT(float, int, float, int);
      void guardaValores(float, float);
      BOOL aceptableP(void);
      float devuelveP(int);
      float valorPAceptado(void);
      ~CDistribucionT();
};

typedef CDistribucionT* ptrCDistribucionT;

// m constructor de objeto tipo CDistribucionT
CDistribucionT::CDistribucionT(float x, int dof, float e, int num_seg)
{
      m_X=x;
      m_NumSeg=num_seg;
      m_DOF=dof;
      m_E=e;
      m_ValorUno=0;
      m_ValorDos=0;
}

// m método que calcula la función Gamma con valores enteros para Distribución T
int CDistribucionT::gammaInt(int equiz)
{
      if(equiz>2)
         return (equiz-1)*gammaInt(equiz-1);
      else
         return 1;
}

// m método que sobrecarga al anterior para Gamma con  valores de punto flotante
float CDistribucionT::gammaFloat(float equiz)
{
      if(equiz>1/2)
         return (equiz-1)*gammaFloat(equiz-1);
      else
         return sqrt(3.1415926536);
}

// m método que calcula el primer factor de la regla de Simpson extendida para Distribución T
float CDistribucionT::primerFactor(void)
{
      float numerador, denominador;
      if(m_DOF%2==0)
      {
numerador = gammaFloat((m_DOF+1)/2);
denominador = sqrt(m_DOF * 3.1415926536) * gammaInt(m_DOF/2);
      }
      else
      {
numerador = gammaInt((m_DOF+1)/2);
denominador = sqrt(m_DOF * 3.1415926536) * gammaFloat(m_DOF/2);
      }
      return numerador/denominador;
}

// m método que calcula Xi para obtener el valor de cada término
float CDistribucionT::xi(int i)
{
      return i* (m_X / m_NumSeg);
}

// m método que devuelve la base del segundo factor de la regla de Simpson extendida para Distribución T
float CDistribucionT::baseSegundoFactor(float xi)
{
      return (pow(xi,2)/m_DOF)+1;
}

// m método que calcula y devuelve el segundo factor de la regla de Simpson extendida para Distribución T
float CDistribucionT::segundoFactor(float xi)
{
      return 1/pow(baseSegundoFactor(xi),(m_DOF+1)/2);
}

// m método que calcula y devuelve la evaluación de la Distribución T para Xi
float CDistribucionT::f(float xi)
{
      return primerFactor() * segundoFactor(xi);
}

// m método que calcula y devuelve la evaluación para la Distribución T de un término de la regla de Simpson
float CDistribucionT::termino(int i, int multiplicador)
{
      float w;
      w = m_X / m_NumSeg;
     
      return w / 3 * multiplicador * f(xi(i));
}

// m método de CDistribucionT que guarda los valores de P a comparar
void CDistribucionT::guardaValores(float valor1, float valor2)
{
      m_ValorUno = valor1;
      m_ValorDos = valor2;
}

// m método que calcula y devuelve p para la regla de Simpson aplicada a la Distribución T
float CDistribucionT::devuelveP(int num_seg)
{
      int multiplicador;
      float p = 0;
      for (int i = 0 ; i < num_seg ; i++)
      {
         if (i == 0 || i == num_seg)
            multiplicador = 1;
         else
            if(i % 2 == 0)
               multiplicador = 2;
            else
               multiplicador = 4;     
         p =  p + termino(i, multiplicador);
      }
      return p;
}
// m método que valida el valor p para la regla de Simpson aplicada a la Distribución T
BOOL CDistribucionT::aceptableP(void)
{
      float valor1p, valor2p;
      int num_seg1 = m_NumSeg;
      int num_seg2 = num_seg1 * 2;
      do
      {
      valor1p = devuelveP(num_seg1);
      valor2p = devuelveP(num_seg2);
      num_seg1 = num_seg2;
      num_seg2 = num_seg1 * 2;
      }
      while( abs(valor1p - valor2p) > m_E);
      guardaValores(valor1p, valor2p);
      return TRUE;       
}
// m método que devuelve p aceptado para la regla de Simpson aplicada a la Distribución T
float CDistribucionT::valorPAceptado(void)
{
      if (aceptableP())
         return m_ValorDos;
      else
        return 0;
}
// m destructor de objeto tipo CDistribucionT
CDistribucionT::~CDistribucionT()
{
}
//   Hilo principal del programa
int main()
{
      //  caso de prueba uno
     // clrscr();           
      ptrCDistribucionT casoPrueba1 = new CDistribucionT(1.1, 9, 0.00001, 10);
      cout << "\nPrueba 1.\n";
      cout << "Valor calculado de p (para x=1.1 y dof=9):\n";
      cout << casoPrueba1->valorPAceptado();
      cout << "\n";
      getchar();
      getchar();
      //  caso de prueba dos
      //clrscr();           
      ptrCDistribucionT casoPrueba2 = new CDistribucionT(1.1812, 10, 0.00001, 10);
      cout << "\nPrueba 1.\n";
      cout << "Valor calculado de p (para x=1.1812 y dof=10):\n";
      cout << casoPrueba2->valorPAceptado();
      cout << "\n";
      getchar();
      getchar();
     

      //  caso de prueba tres
      //clrscr();                 
      ptrCDistribucionT casoPrueba3 = new CDistribucionT(2.750, 30, 0.00001, 10);
      cout << "\nPrueba 1.\n";
      cout << "Valor calculado de p (para x=2.750 y dof=30):\n";
      cout << casoPrueba3->valorPAceptado();
      cout << "\n";
      getchar();
      getchar();
}


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
los simpson nuevo
Juegos y Consolas
bob-marley 5 3,473 Último mensaje 15 Enero 2004, 07:23 am
por theskull
programa de la formula general
Programación Visual Basic
leahcim 2 17,467 Último mensaje 5 Octubre 2005, 18:02 pm
por _Sergi_
nesecito ayuda con la formula para calcular el volumen de la esfera
Programación C/C++
eduardo17445 8 6,986 Último mensaje 7 Mayo 2013, 21:46 pm
por Caster
Saber en un programa la fórmula matemática.
Ingeniería Inversa
Meta 5 3,143 Último mensaje 1 Febrero 2014, 04:10 am
por Meta
Quien me Ayuda a descifrar esta formula !!!
Desarrollo Web
CarlosCampoy05 2 2,463 Último mensaje 29 Noviembre 2017, 19:56 pm
por peib0l
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines