>> SN=simpsonR('fn',0,5,10) %calcula el área bajo la curva entre 0 y 5
SN = 1. 2587e+003
El programa de la función para calcular esta integral es:
function SN=simpsonR(fn,a,b,n)
h=(b-a)/n;
s=(feval(fn,a)+feval(fn,b));
for k=1:2:n-1
s=s+4*feval(fn,a+k*h);
end ;
for k=2:2:n-2
s=s+2*feval(fn,a+k*h);
end ;
function y=fn(x)
y=x^x;
function SN=simpsonR(fn,a,b,n)
h=(b-a)/n;
s=(feval(fn,a)+feval(fn,b));
for k=1:2:n-1
s=s+4*feval(fn,a+k*h);
end;
for k=2:2:n-2
s=s+2*feval(fn,a+k*h);
end;
function y=fn(x)
y=x^x;
Pero, si se necesita la función polinómica integrable de manera fácil se halla el polinomio de interpolación de varios puntos en el primer cuadrante de f(x) = x^x
Saludos Don Héctor
Me parece bien. A propósito yo no manejo el Matlab pero hace tiempo he querido se taaprender. El lenguaje que manejo es el Visual Basic en la versión 6. 0 Así gracias porque me servirá como ejemplo.
Quisiera preguntarle algo. ¿Es posible comunicarse más directamente mediante archivos pdf? Resulta que es muy incómodo escribir notación matemática en archivos de texto como el que estamos usando en este momento. Personalmente utilizo el SWP(scientific work place) y después paso éstos a pdf, ya que no todos cuentan con dicho programa.
En cuanto a la función x^x se puede integrar por supuesto entre dos valores,en un intervalo. Y métodos hay varios,pero encontrar una función cuya derivada sea x^x, no es posible a menos que sea una aproximación, que puede ser bastante buena dentro de un cierto intervalo,por ejemplo usando un desarrollo en serie de Taylor, o interpolación como Ud mostró también un ejemplo bastante ilustrativon en un mensaje anterior.
Bueno por el momento, muchos saludos, y estaré atento a sus aportes que muestran a una persona dedicada a su oficio con mucha pasión.
saludos fraternales desde Chile
Sergio
P.S. Le pregunto si me permite pertenecer a su red de seguidores.
Usando la interpolación de Lagrange se encontró el polinomio P(x) para las abscisas positivas o cero.
P(x) = 17. 3250x^5 -166. 2083x^4 + 566. 9583x^3 -795. 7917x^2 + 377. 7167x + 1. 0000
Pueden evaluar el polinomio con valores de f(x) = x^x y compararlos con los valores dados por el polinomio.
Ahora integrar P(x) es muy fácil, y el problema estaría resuelto parcialmente.
OK
Desde luego Sergio, mi e-mail es: hipa2450@yahoo. Com
De esta manera nos podemos enviar algunos contenidos de una manera más fluida, con notación matemática adecuada.
Gracias, hasta el siguiente mensaje. Bye
Hector
Graficando el polinomio y comparando con x^x las graficas no son nada parecidos
para x=2. 5 x^x=9. 88212
p(x)=29. 6999
Para x=10 x^x=561574.
p(x)=10000000000
Tratando de resolver la integral x^x de cero a una constante p
Trate de resolverlo construyendo n rectángulos de base b y altura x^x
Nos percatamos que debe cumplirse p = b x n
Integral = b b^b +b (2b)^(2b) +.... + b (nb)^(nb)
= sumatoria de 1 hasta n de ( b (nb)^(nb))
=sumatoria de 1 hasta n de p/n (p^p)
=sumatoria de 1 hasta n de (p^(p+1))/n
=(p^(p+1)) sumatoria de 1 hasta n de 1/n
y aquí me topo con otro problema
la sumatoria de 1 hasta n de 1/n no converge
1+1/2+1/3+1/4.......
Aquí calcule algunos valores de:
sumatoria de n=1 hasta 10^2 de 1/n = 5. 18738
sumatoria de n=1 hasta 10^3 de 1/n = 7. 48547
sumatoria de n=1 hasta 10^4 de 1/n = 9. 78761
sumatoria de n=1 hasta 10^5 de 1/n = 12. 0901
sumatoria de n=1 hasta 10^6 de 1/n =14. 3927
Saludos
El polinomio está calculado por ahora con 5 puntos solamente, para que sea más preciso es necesario tomar más puntos. Sólamente tomé algunos puntos discretos en el intervalo [0 5]. La precisión que quieras te la das tú.
En métodos numéricos, se exige una precisión a priori. Si el error no es muy grande, se da como buena aproximación.
Tómalo tú con 100 puntos o más y miras la precisión, calculando el polinomio de Lagrange o el polinomio de Newton.
Diseña el algoritmo y prográmalo!
Los siguientes son los coeficientes de un polinomio de grado 20, multiplicado por 10^8 cada uno de sus términos, con doble precisión: míralo qué tal se ajusta. Está hecho para valores de hasta 10^10, para valores mayores, es posible, pero se necesita trabajar con mayor precisión. OK?
P =1. 0e+008 *[ 0. 000000000000731 -0. 000000000067874 0. 000000002942236 -0. 000000079049174 0. 000001474017472 -0. 000020243619954 0. 000212067817290 -0. 001731615058080 0. 011166259087844 -0. 057265066629700 0. 234057413372262 -0. 760702750009604 1. 952664340336800 -3. 911951120124969 6. 004969257213897 -6. 870303089908905 5. 616814268835144 -3. 065274864117584 0. 985947796079330 -0. 138584051112198 0. 000000010000000]
Creo que el método de SIMPSON es el más adecuado hasta ahora de los que he probado.
Por ejemplo el área bajo la curva desde 0 hasta 10 es:
1. 243056269120906e+003 unid. De sup.
El área bajo la curva desde 0 a 20 es:
2. 705339446700841e+025 unid. De sup.
El área bajo la curva desde 0 a 100 es:
3. 382723372943241e+199 unid. De sup.
Estoy probando el porcentaje de error cometido, pero creo que es muy bajo.
Amigo Hector Llevarlo a un polinomio tomando unos puntos no es adecuado.
el área bajo la curva desde 0 hasta 10 me sale: 3. 05749 x 10^9
el área bajo la curva desde 0 hasta 20 me sale: 2. 63265 x 10^25
el área bajo la curva desde 0 hasta 100 me sale: 1. 78464 x 10^199
Para x >1
x^x me parece creciente (no lo he demostrado, sólo he tomado números enteros)
Un polinomio es... Creciente, decreciente, creciente, decreciente.... Dependiendo del grado del polinomio
el polinomio se ajustara solamente a los puntos tomados, si tomamos valores entre los puntos pueden ser muy diferentes con la función original
en todo caso podría utilizarse la serie de Taylor entorno a 1
=1+(x-1)+(x-1)^2+(1/2)(x-1)^3+(1/3)(x-1)^4+(1/12)(x-1)^5+(3/40)(x-1)^6+.....
Reviso nuevamente por el método de SIMPSON:
De 0 a 1 : 0. 783438389761214
De 0 a 2: 2. 833908766702283
De 0 a 3: 14. 508609879449615
De 0 a 4: 1. 141192487205431e+002
De 0 a 5: 1. 241819009232129e+003
De 0 a 6: 1. 712897239878071e+004
De 0 a 7: 2. 847166635954887e+005
De 0 a 8: 5. 526855914237856e+006
De 0 a 9: 1. 225973476301579e+008
De 0 a 10: 3. 057691683286182e+009
De 0 a 15: 1. 187464972171462e+017
De 0 a 20: 2. 638211539426587e+025
De 0 a 50: 2. 015495001245119e+084
De 0 a 100: 1. 785580314436935e+199
En muchos casos se trata de afinar la precisión, nada más. He calculado el número pi con un millón de cifras decimales. En Monografías. Com tengo algunos escritos sobre esto. Si se escribe pi=3. 1416 es una mera aproximación con precisión de 1 diezmilésima, depende la necesidad. El récord de cifras decimales de pi, creo que la tienen unos japoneses con más de mil millones de dígitos decimales.
El MATLAB tiene una gran ventaja respecto a otros lenguajes de programación o software matemático del mercado:
- Es abierto, es decir yo mismo puedo programar mis propias funciones.
- Creo mis funciones a mi propia medida
- No consumo software (tecnología), puedo crearla y asimilarla.
- Me permite hacer mis propios desarrollos
- Es compatible con otros lenguajes de programación (C, VBasic, JAVA, entre otros)
- Posee TOOLBOX adecuados a cada una de las ramas de la ingeniería
Entre otras muchas más ventajas.
Hector
Un favor calcula la integral de 0 a 10:
Según el método de Simpson
pero variando los valores de n
n=10
n=10^2
n=10^3
...
n=10^6
....
Mi duda es la convergencia
Saludos
Elmer
OK Elmer. Me parece excelente hacer comunidad, muchas veces se resuelven dudas que aparecen, o que se pueden pasar por alto y que son muy importantes, a la hora de decidir ciertos criterios.
Con mis estudiantes, aprendo más tratando de resolver dudas que preparando una clase. Muchas veces encuentran situaciones "sui generis" que uno como docente ha pasado por alto.
Una ventaja del método de Simpson es que es genérico, es decir, se acomoda a cualquier función, y la universalidad es importante. No he examinado aún el método de Series de Taylor que propones. En muchas situaciones es válido, por ejemplo para funciones de la forma a/(1-u)^n también e^u, pero ya tendré el tiempo para dedicarle a las series de Taylor.
Normalmente, el software del mercado utiliza series de Taylor u otra serie, el método de Simpson o el método trapezoidal.
Respecto a lo que me pides, con muchísimo gusto lo hago:
>> SN=simpsonR('fn',0,10,10)
SN = 3. 8622e+009
>> SN=simpsonR('fn',0,10,100)
SN = 3. 0577e+009
>> SN=simpsonR('fn',0,10,1000)
SN = 3. 0575e+009
>> SN=simpsonR('fn',0,10,10000)
SN = 3. 0575e+009
>> SN=simpsonR('fn',0,10,10)
SN = 3. 862212335000000e+009
>> SN=simpsonR('fn',0,10,100)
SN = 3. 057691683286182e+009
>> SN=simpsonR('fn',0,10,1000)
SN = 3. 057488933419296e+009
>> SN=simpsonR('fn',0,10,10000)
SN = 3. 057488912867362e+009
Utilizando el método trapezoidal, se obtiene:
>> TN=trapezoidR('fn',0,10,10)
TN = 5. 405071317500000e+009
>> TN=trapezoidR('fn',0,10,100)
TN = 3. 084959204456839e+009
>> TN=trapezoidR('fn',0,10,1000)
TN = 3. 057764123150696e+009
>> TN=trapezoidR('fn',0,10,10000)
TN = 3. 057491665019023e+009
Parece converger, más rápido por el método de Simpson que por el Trapezoidal
Hola Sergio, o tal vez que intente resolver la integral exp(-x^2), esta integral no tiene solución analítica, (y eso si esta comprobado) pero por supuesto si seleccionas límites de integración apropiados y utilizas algunos artificios matemáticos y transformaciones en coordenadas polares llegas a una solución sorprendente!