Autor Tema: Como implementar una derivada o una integlal en C??  (Leído 17830 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Trev_11

  • PIC10
  • *
  • Mensajes: 44
Como implementar una derivada o una integlal en C??
« en: 21 de Octubre de 2007, 11:08:34 »
Tengo algo para realizar el cálculo de una integral es elemental que opinan?;la integral de una funcion f(x) en el intervalo [a,b] es h*[f(x1)+f(x2)+...+f(xn)] donde h=b-a/n se puede aplicar algo similar con la derivada,alguien se ha planteado esto antes estaria bueno que intentaramos hacer algo,luego quizas una ecuación diferencial lineal de primer orden,etc,quien sabe?,saludos :-/ :-/

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Como implementar una derivada o una integlal en C??
« Respuesta #1 en: 21 de Octubre de 2007, 12:45:25 »
Puedes echar mano de la fórmula descentrada de dos puntos:

f´(x0) =  [ f(x0+h) - f(x0) ] / h            (h --> 0)

La centrada de dos puntos:

f´(x0) = [ f(x0+h) - f(x0-h) ] / 2h        (h  --> 0)

También te pueden valer polinomios de Taylor,etc...

Estos métodos no dejan de ser aproximaciones numéricas,por lo que si quieres determinada precisión deberás usar las correspondientes fórmulas de cotas de error.

Por ejemplo,la del método descentrado de dos puntos es:

E(f) = - f"(chi) * h / 2!

Desconectado Trev_11

  • PIC10
  • *
  • Mensajes: 44
Re: Como implementar una derivada o una integlal en C??
« Respuesta #2 en: 21 de Octubre de 2007, 19:06:39 »
Hola bueno aca aporto mi primer intento,es bastante particular pero es el primero,lo hice en dev c++ para poder apreciar mejor los resultados,aqui va:calculo la integral de x^2 entre 5 y 1

Código: [Seleccionar]
#include <stdio.h>
#include <conio.h>

float f,y,z,F;
int a=1,b=5,c=12,n;
float h;

main()
{
h=(b-a);
h/=c;     
n=0;
    while(n<c+1)
    {
               if(n==0)
               f=a+(h/2);
    y=f*f;
    f+=h;
    z+=y;
    if(n==c-1)
    F=z*h;
    n+=1;
    printf("f=%f\ty=%f\t\n",f,y);
    }           
printf("F=%f\n",F);                        //Este es el resultado final.
getch();
return(0);
:-/ :-/ :-/
A ver si podemos generalizar esto para una funcion mas general..

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Como implementar una derivada o una integlal en C??
« Respuesta #3 en: 21 de Octubre de 2007, 19:11:15 »
En un sistema discreto la integral se calcula como la suma de los productos de la función por el incremento de la variable independiente. Para la derivada en un sistema discreto es la diferencia en la función dividido por el incremento de la variable independiente.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Como implementar una derivada o una integlal en C??
« Respuesta #4 en: 22 de Octubre de 2007, 08:18:40 »
Para integración numérica las opciones son más numerosas que para el caso de la derivación: regla del trapecio,fórmula de Simpson,fórmula cerrada de 5 puntos,fórmulas de Newton-Côtes,etc...además del cálculo directo del área bajo la curva,que es el más sencillo.
Por regla general,todos estos métodos son válidos para cualquier tipo de función,salvo quizá,algún caso excepcional...pero no debes olvidar que todo esto es cálculo numérico, y no simbólico (cálculo de primitivas y operaciones algebraicas varias), y en ningún momento se tiene "conocimiento" de qué tipo de función se está manejando,lo único que se conoce,o que se debe conocer, es el valor de dicha función para un conjunto determinado de valores de la variable independiente.

Desconectado Trev_11

  • PIC10
  • *
  • Mensajes: 44
Re: Como implementar una derivada o una integlal en C??
« Respuesta #5 en: 22 de Octubre de 2007, 08:33:52 »
Imagino algo con el conversor A/D del pic,el intervalo h estaria predefinido por su muestreo y lei por ai que existia un tacómetro que te entregaba una salida(no se si era corriente o tensión)proporcional a la velocidad del motor,= nunca vi un tacómetro,corregime,pero en ese caso ya se tendría algo  :shock:,sugieres que debe hacerse una interpolación para averiguar la naturaleza de la función en todos los casos,hay que ver primero en que se puede aplicar,salu2  :-/

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Como implementar una derivada o una integlal en C??
« Respuesta #6 en: 22 de Octubre de 2007, 08:45:29 »
Lo que digo es que hay que tener claro qué es lo que se quiere hacer,de qué datos se va a disponer para ello y en qué formato se van a tener.
Si quieres hacer cálculos de integrales definidas necesitas como dato de entrada,o bien los valores de la función necesarios para la aplicación de la fórmula de integración numérica que vayas a usar, o bien la función en sí para poder cálcular dichos valores tú mismo dentro de tu programa.Aunque esta última opción se tornaría bastante complicada,dependiendo de qué tipo de función pudiera llegarnos como dato de entrada.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Como implementar una derivada o una integlal en C??
« Respuesta #7 en: 22 de Octubre de 2007, 09:25:43 »
Creo entender y si no es así corregirme, que se va a trabajar con variables discretas, con lo cual el método de integración y dervación, varian sustancialmente con respectos a variables continuas. El uso de variables discretas simplifica mucho estas operaciones, ya que se reduce a hacer sumas y restas (integrales y derivadas), en caso contrario, si utilizamos funciones y variables continuas te tendrias que ir a sistemas mas potentes como dsPic.

Un saludo.
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Como implementar una derivada o una integlal en C??
« Respuesta #8 en: 22 de Octubre de 2007, 09:44:47 »
No es estrictamente cuestión de variable discreta o continua,Jesús.El tema está en si se va a realizar solamente un cálculo numérico de aproximación a la integral a partir de un conjunto de valores de la función (lo que podríamos entender por cálculo mediante variable discreta,aunque no lo es),o si por el contrario se va a trabajar directamente con la función,cosa peliaguda no por la carga de proceso que pueda acarrear (si lo que se busca es simplemente calcular el valor de una función en un punto),si no por la implementación en sí,ya que tipos de funciones hay muchos....polinomios,senos,tangentes,raíces,exponenciales,etc...y operadores y símbolos hay otros pocos...suma,resta,producto,paréntesis,exponente,etc...
Se podría tener,a tal efecto, la función como parámetro de entrada,digamos,en formato ascii...ahora zapateátelas para implementar un algoritmo que calcule su valor en un punto,y que sea válido simplemente para los tipos elementales de funciones: polinomios,exponenciales,senos,raíces y tal...
Sería una tarea ardua desde luego.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Como implementar una derivada o una integlal en C??
« Respuesta #9 en: 22 de Octubre de 2007, 11:52:52 »
Eso es cálculo simbólico y está fuera del procesado de un pic. No olvidemos que los pic hacen muchas cosas pero no todas. En los micros lo que se implementa y vuelvo a repetir es el análisis discreto de las señales (no se si un dsPic podria realizar cálculo continuo), pretender otra cosa es una utopía a no ser que sea muy, muy sencillo.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Renatox_

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 541
    • máquinas cnc
Re: Como implementar una derivada o una integlal en C??
« Respuesta #10 en: 22 de Octubre de 2007, 12:59:36 »
La integral o el área debajo de una curva de una señal, la puedes calcular asi:

A(n)=(ess(n)+ess(n-1))/2*T+A(n-1)

donde T=periodo de muestreo
          f=función a analizar (señal de error de un sistema)
          A=Area del error o integral 
          "regla del trapecio"

En un controlador crearías estas variables, por ejm:

float ess, e_past, T, I
I=0         //Area del error inicial = 0
while(1)
{
   //primero calculas ess
   I=(ess+e_past)/2*T+I;
   e_past=ess;
}

un saludo;
control de movimiento


 

anything