Viernes 15 de Noviembre de 2024, 14:30
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
implementacion metodo de simpson
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: implementacion metodo de simpson (Leído 1560 veces)
Yesu
Nuevo Miembro
Mensajes: 1
implementacion metodo de simpson
«
en:
Domingo 12 de Diciembre de 2010, 07:39 »
0
Hola gente, para pedir un poco de ayuda en la optimizacion de un programita que hize. Se trata de un codigo que permite resolver integrales por el metodo de Simpson. El programa en si funciona bien, pero cuando se lo mostre a mi profesor, el muy jodido dijo que queria que el programa pida la ecuacion , y no que este embebida en el codigo..
aqui les dejo el codigo para que vean de que hablo:
------------------------------------------------------------------------------------
Código: C
#include <stdio.h> /*para printf(),scanf()*/
#include <conio.h> /*para getch(),clrscr()*/
#include <stdlib.h>/*para exit()*/
#include <math.h>
//#include <dos.h>
//#define NUMEL 20
double
f
(
double
x
)
;
void
_error
(
int
n
)
;
enum
{
INTERVALOS
}
;
enum
{
SIMPSON1_3
=
1
,
SALIR
}
;
int
n
;
float
a
,
b
;
//float X[NUMEL],Fx[NUMEL];
/*Metodo de Simpson 1/3 dada una funcion*/
void
Simpson1_3
(
double
a
,
double
b
,
int
n
,
double
*
Area
)
{
register
int
i
;
double
x
;
double
S0
,
S1
;
double
h
;
h
=
(
b
-
a
)
/
(
2
*
n
)
;
S0
=
S1
=
0
;
for
(
i
=
1
;
i
<=
(
2
*
n
-
1
)
;++
i
)
{
x
=
a
+
(
(
double
)
i
)
*
h
;
if
(
!
(
i
%
2
)
)
S0
+=
f
(
x
)
;
else
S1
+=
f
(
x
)
;
}
*
Area
=
(
h
*
(
f
(
a
)
+
4
*
S1
+
2
*
S0
+
f
(
b
)
)
/
3.0
)
;
printf
(
"n El area es -> %5.6f nnn"
,*
Area
)
;
getch
(
)
;
}
/*Muestra mensaje de error*/
void
_error
(
int
n
)
{
static
char
*
msg
[
]
=
{
"Error en los subintervalos"
,
""
}
;
printf
(
"n %s"
,
msg
[
n
]
)
;
getch
(
)
;
}
/*Funcion a integrar*/
double
f
(
double
x
)
{
float
y
;
y
=
-
x
*
x
+
200
;
return
y
;
}
void
LeeDatos
(
int
opc
)
{
if
(
opc
==
SIMPSON1_3
)
{
// clrscr();
putchar
(
'n'
)
;
printf
(
"n Numero de intervalos (PAR) -> "
)
;
}
scanf
(
"%d"
,&
n
)
;
if
(
(
n
<
1
)
||
(
(
n
%
2
)
!=
0
)
)
{
//numero de iteraciones menor que 0 o impares
_error
(
INTERVALOS
)
;
exit
(
1
)
;
}
else
printf
(
"n Valor de a =>"
)
;
scanf
(
"%f"
,&
a
)
;
printf
(
"n Valor de b =>"
)
;
scanf
(
"%f"
,&
b
)
;
}
/*Muestra el menu en la pantalla*/
void
Menu
(
char
*
titulo
,
char
*
opciones
[
]
)
{
int
i
;
// clrscr();
i
=
0
;
// gotoxy(34,4);
printf
(
"%snn"
,
titulo
)
;
for
(
;*
opciones
[
i
]
;
i
++
)
printf
(
"tttt %d.- %sn"
,
i
+
1
,
opciones
[
i
]
)
;
printf
(
"tttt %d.- Salirn"
,
i
+
1
)
;
putchar
(
'n'
)
;
printf
(
"tttt Opcion: "
)
;
}
int
main
(
void
)
{
double
Area
;
int
op
;
char
*
opciones
[
]
=
{
"Simpson 1/3"
,
""
}
;
do
{
// clrscr();
Menu
(
"Metodos de Integracion"
,
opciones
)
;
scanf
(
"%d"
,&
op
)
;
switch
(
op
)
{
case
SIMPSON1_3
:
LeeDatos
(
SIMPSON1_3
)
;
Simpson1_3
(
a
,
b
,
n
,&
Area
)
;
break
;
case
SALIR
:
// gotoxy(34,20);
printf
(
" Fin de %s"
,
__FILE__
)
;
//
exit
(
0
)
;
break
;
default
:
// gotoxy(34,13);
printf
(
"Opcion no permitida. nnn"
)
;
getch
(
)
;
break
;
}
}
while
(
op
!=
SALIR
)
;
}
--------------------------------------------------------------------------------------------------------------
en este caso, la ecuacion que resuelve el programa es
-x * x + 200
, pero el profesor quiere que resuelva cualquiera, que seria basicamente cambiar esa ecuacion en el codigo.. pero el quiere que el programa la pida y uno la ingrese cuando se ejecute el programa...
Se que no debe ser muy dificil crear una funcion que pida una ecuacion y la resuelva pero estoy un poco perdido asique si me dan una ayudita se los agradecería un monton!!
desde ya muchas gracias!!
Tweet
Munire
Nuevo Miembro
Mensajes: 6
Nacionalidad:
Re: implementacion metodo de simpson
«
Respuesta #1 en:
Domingo 12 de Diciembre de 2010, 13:21 »
0
lo primero que tienes que hacer es decidir el formato del input por ejemplo:
>> x4-2x2+3x-5
aunque tambien podria ser 2x^2, en vez de 2x2.
luego tienes que desarrollar un motor de busqueda que almazene los valores que multiplican a las incognitas. por ejemplo:
almazena x4-2x2+3x-5 en una cadena de texto y busca las "x" la primera x que encontrara es esta: x4 (que es x elevado a 4), el numero de la izquierda lo almazena como "n" y el de la izquierda como "a" , luego encontrara la siguiente "x" coge el valor de la izquierda y el de la dercha y los almazena tambien, y asi con todos. seria algo asi:
la "x" esta en cadena
=> a=cadena[i-1] y n=cadena[i+1] ok?
lo siguente seria escribir la "y":
y = a*x^7+b*x^6 ............... +f*x^2+g*x+h
pero hay dos problemas: el grado esta limitado a lo que pongas en el codigo y hay muchas incognitas. hay que intentar hacerlo de otra forma:
y=0
for(n=0 hasta n)
{
motor de busqueda
y = y + a * x^n;
}
de esta forma la busqueda se realiza dentro del for, de manera que al encontrar la "x" el valor "a" lo mete en la ecuacion y hace la suma.
se repite el for para n=1 con lo cual busca la x de grado 1, es decir la x que tenga a la derecha un 1 y coge su "a" ( a=cadena[i-1] ) y hace la operacion.
se repite el for para n=2 (ahora imaginate que no hay x^2 o que 0*x^2) busca la x que tenga a la derecha un 2 y como no la encuentra a=0, y = y + 0 con lo cual no suma nada y pasa a la siguiente "n"
saludos
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
implementacion metodo de simpson