Autor Tema: Algoritmo que calcula integral

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

08 Octubre, 2008, 05:52 pm
Leído 8823 veces

Dogod

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,679
  • Karma: +0/-0
  • Sexo: Masculino
Hola, hay algunas cosas que no entiendo en el siguiente algoritmo del libro yme gustaría agradecería si alguien me puede ayudar, insertandole comentarios que me ayuden a comprenderlo mejor. Dice:

 Diseñar un algoritmo que utilice la función Integral para calcular el área bajo el gráfico de las funciones f1(X) = \( x^3 - 6x^3 + 10x \)e. Integrado por Integrado (x) = \( x^2 + 3x +2 \) para x ehtre cero y cuatro

ESTE ES EL ALGORITMO:


algoritmo Area_bajo_curvas


tipo

real funcion (E real : x) : func

var

real: a, b

entero: n

inicio

escribir (Entre qué límites?)

leer (a, b)

escribir (subintervalos?)

leer (n)

escribir (integral(f1, a, b, n))

escribir (integral (integrado, a, b, n)
fin

real FUNCÍOON f1 (E real: x)
inicio

devolver (x*x*x - 6*x*x + 10*x)
fin_funcion

real FUNCIÓN integrado (E real:x)

inicio

devolver (x*x + 3*x + 2)
fin_funcion

real FUNCION integral (E func: f; E real: a, b; E entero: n)


var
real: baserectangulo, altura, x, s

entero: i

inicio

baserectangulo \( \longrightarrow{} \) (b - a) /n

x\( \longrightarrow{} \) a + baserectangulo/2

s\( \longrightarrow{} \)0

dsde i = 1 hasta n hacer

altura\( \longrightarrow{f(x)} \)

s\( \longrightarrow{} \) s + baserectangulo * altura

x\( \longrightarrow{} \) x + baserectangulo

fin_desde
devolver (s)

fin_funcion

Entiendo que el algoritmo llama a los subalgoritmos para calcular la función, sin embargo, esta ultima parte no la entiendo mucho...


real FUNCION integral (E func: f; E real: a, b; E entero: n)


var
real: baserectangulo, altura, x, s

entero: i

inicio

baserectangulo \( \longrightarrow{} \) (b - a) /n

x\( \longrightarrow{} \) a + baserectangulo/2

s\( \longrightarrow{} \)0

dsde i = 1 hasta n hacer

altura\( \longrightarrow{f(x)} \)

s\( \longrightarrow{} \) s + baserectangulo * altura

x\( \longrightarrow{} \) x + baserectangulo

fin_desde
devolver (s)

fin_funcion


por que asignan de esa forma, por supuesto entiendo el procedmiento matematico, no tanto las asignaciones, como por ejemplo esta : x\( \longrightarrow{} \) x + baserectangulo


Un saludo y gracias de antemano
Las cosas pasan es por algo, y no hay mal que por bien no venga dicen en mi tierra...

08 Octubre, 2008, 06:13 pm
Respuesta #1

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,907
  • País: es
  • Karma: +0/-0
Hola

 No estoy seguro de si tu duda es sobre la notación usada, o sobre lo que hace el algoritmo.

 ¿Sabes algo de programación?.

 Cuando se pone, por ejemplo,

 x -> x +baserectangulo

 Quiere decir que \( x \) debe de tomar el valor de \( x \) (el antiguo) sumado al valor \( baserectangulo \).

 Explico el algoritmo INTEGRAL. Lo que va a hacer es dividir el intervalo de integración \( [a,b] \) en \( n \) partes y aproximar la integral de la función por la suma del área de los rectangulitos de base \( (b-a)/m \) y altura \( f(x) \) con \( x  \) en la mitad de cada intervalo de la partición.


real FUNCION integral (E func: f; E real: a, b; E entero: n)


var
real: baserectangulo, altura, x, s
entero: i

Aquí simplemente declara las variables que va a utilizar indicando si son reales o enteras.

inicio

baserectangulo \( \longrightarrow{} \) (b - a) /n

Halla el valor de la longitud de la base de cada rectangulito.

x\( \longrightarrow{} \) a + baserectangulo/2

Toma el primer x en la mitad del primer intervalo de la partición.

s\( \longrightarrow{} \)0

Inicicializa la suma de las áreas a cero.

dsde i = 1 hasta n hacer

Indica que lo siguiente lo va a hacer n veces, con i tomando los valores entre 1 y n.

altura\( \longrightarrow{f(x)} \)

La altura del rectángulo es el valor de la función en x.

s\( \longrightarrow{} \) s + baserectangulo * altura

Le suma al área que llevamos acumulada el área del rectángulito donde estamos trabajando.

x\( \longrightarrow{} \) x + baserectangulo

Avanza el valor de x la longitud de un rectangulito, para pasar al siguiente.

fin_desde
devolver (s)

fin_funcion

Saludos.

09 Octubre, 2008, 08:32 pm
Respuesta #2

Dogod

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,679
  • Karma: +0/-0
  • Sexo: Masculino
Hola, gracias por la explicación, ahora comprendo mejor, sin embargo, aun quisiera saber, ¿calcula el area debajo de cada funcion o la que hay entre las dos curvas?



Graciassssssssss
Las cosas pasan es por algo, y no hay mal que por bien no venga dicen en mi tierra...

10 Octubre, 2008, 10:02 am
Respuesta #3

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 58,907
  • País: es
  • Karma: +0/-0
Hola

 La función:

real FUNCION integral (E func: f; E real: a, b; E entero: n)

 calcula (más bien aproxima) el área bajo la función \( f \), en el intervalo \( [a,b]. \)

 Luego en el programa en estas sentencias:

escribir (integral(f1, a, b, n))

escribir (integral (integrado, a, b, n)

 se calculan por separado la integral de las dos funciones.

 Si quisieras el área comprendida entre ambas debieras de integrar la función \( |f(x)-g(x)| \).

Saludos.

11 Octubre, 2008, 12:15 am
Respuesta #4

Dogod

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,679
  • Karma: +0/-0
  • Sexo: Masculino
Sí ya entendí, estoy empezando a ver programación que me encanta pero bueno...
gracias

un saludo
Las cosas pasan es por algo, y no hay mal que por bien no venga dicen en mi tierra...

15 Noviembre, 2011, 10:53 pm
Respuesta #5

adhemir

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 278
  • Karma: +0/-0
  • Sexo: Masculino
Hola trate implemetar este psedocodigo en c++, pero
nose como declarar , la funcion como argumento de entrada ???
Alguein que me pueda dar una manito.



#include <cstdlib>
#include <iostream>
float f1( float x);
float integrado(float x);
//aqui abajo nose como declarar una funcion como argumento!!!
float integral(function  f,float a, float b, int n );
using namespace std;

int main()
{
  float a,b;
  int n;
  cout<<"Entre que limites?"<<endl;
  cin>>a;
  cin>>b;
  cout<<"Subinterbalos? "<<endl;
  cin>>n;
  cout<<integral(f1,a,b,n)<<endl;
  cout<<integral(integrado,a,b,n)<<endl;
 
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
float f1( float x)
{return (x*x*x-6*x*x+10*x);
}
float integrado(float x){
  return(x*x+3*x+2);   
      }
float integral(function  f,float a, float b, int n )
{
 float baserectangulo,altura,x,s;
 int i;
 baserectangulo=(b-a)/n;
 x=a+baserectangulo/2;
 s=0;
 for(i=1;i<=n;i++)
 {altura=f(x);
     s=s+baserectangulo*altura;
     x=x+baserectangulo;
                 
                  }     
    return s; 
      }
     

16 Noviembre, 2011, 03:03 am
Respuesta #6

Phicar

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 513
  • Karma: +1/-0
  • Sexo: Masculino
    • redinfocol.org
Como asi una funcion como argumento?

si quieres llamar una funcion independiente, podrias usar un espacio nulo en memoria adecuar la funcion y pasarle el puntero para llamarla....pero estoy seguro de que eso no es lo que quieres. Asi que no entiendo a que te refieres....Si quieres usar funciones independientes, puedes usar regex....pero te tocaria programarlo o buscar alguna libreria que ya lo haga.
redinfocol.org

16 Noviembre, 2011, 01:26 pm
Respuesta #7

adhemir

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 278
  • Karma: +0/-0
  • Sexo: Masculino
Es la misma pregunta que me hice ,pues nose como hacer, esta parte abajo del algoritmo.
real FUNCION integral (E func: f; E real: a, b; E entero: n)
resulta que recien estoy aprendiendo c++,
en esa sentencia arriba
 dice que la funcion tiene 3 entradas fun f, float a,b ,int n
o como tu puedes esto escribirlo en c++, para que compile,
eso es lo que no entiendo ???

16 Noviembre, 2011, 03:34 pm
Respuesta #8

Phicar

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 513
  • Karma: +1/-0
  • Sexo: Masculino
    • redinfocol.org
yo me referia a una funcion en memoria. Lo ultimo que te digo es lo que deberias hacer. Deberas construir una funcion que evalue funciones :)
para eso se utilizan regex. o puedes hacerlo desde 0, tendras que tener cierta destreza en manejar cadenas.

En el ejemplo no tienes porque pasarle la funcion f como argumento a la funcion integral. Solo tienes que llamar a funcion f1 desde la funcion integral.

Si quisieras hacer un ejemplo estandar(sin importar la funcion) si te tocaria hacer lo que digo. Pero como solo lo quieres para esa funcion en particular, no hay ninguna necesidad de pasarla como parametro
redinfocol.org

16 Noviembre, 2011, 03:59 pm
Respuesta #9

adhemir

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 278
  • Karma: +0/-0
  • Sexo: Masculino
 Ok.
Y como se escribe eso en c++, puedes escribirlo
si no es mucha molestia, es que en verdad nose como se codifica lo que escribiste ???
Eso de la funcion regex, primera vez que la escucho, y en el libro que tengo todavia no hablan de eso.