simpson 1
DESCRIPTION
simpsonTRANSCRIPT
Simpson 1/3 en Matlab
%regla de simpson 1/3clear all; close all; clcfun=input('Ingresa la funcin f(x) entre comillas: ');f=inline(fun);n=1;while mod(n,2)~=0 n=input('Ingrese el nmero de subintervalos: '); if mod(n,2)~=0 disp('El nmero de subintervalos debe ser par, pulse una tecla para continuar') pause endenda=input('Ingrese el lmite inferior de la integral: ');b=input('Ingrese el lmite superior de la integral: ');
h=(b-a)/n;
sumai=0;sumap=0;
for i=1:2:n-1 sumai=sumai+feval(f,h*i+a);endfor i=2:2:n-2 sumap=sumap+feval(f,h*i+a);end
int=(h/3)*(feval(f,a)+4*sumai+2*sumap+feval(f,b));
disp(['El resultado de la integral es ' num2str(int)])
%****************************************************************%** Calculo de la integral por el **%** Metodo de Simpson de 1/3 y 3/8 para **%** multiples segmentos pares o impares UdeG **%** Maestria en Electronica **%** Ing. Jesus Norato Valencia **%** Materia: Metodos Numericos **%** Maestro: M.C. J.Gilberto Mateos 26/Nov/99 **%****************************************************************clear;clc;fprintf('Calculo de la integral por el metodo de Simpson de 1/3 y 3/8\n\n');fprintf('Para cualquier cantidad de segmentos par o impar\n\n');f=input('introduce la funcion:','s');a=input('lime inferior:');b=input('limite superior:');c=input('numero de segmentos a dividir :');h=(b-a)/c;%*****************************************************************%** En la siguiente seccion se aplica la regla de simpson 3/8 **%** para los ultimos 3 segmentos (si es que la cantidad de **%** segmentos es impar de otra manera no entra a la sig. secc.) **%*****************************************************************qqqqq=0;if (-1)^c==-1b=b-(3*h);c=c-3;e=b+h;ff=b+2*h;g=b+3*h;ee=g-b;x=b;q=eval(f);x=e;qq=eval(f);x=ff;qqq=eval(f);x=g;qqqq=eval(f);qqqqq=(ee)*((q+3*qq+3*qqq+qqqq)/8);end%*****************************************************************%** En la siguiente seccion se realiza la sumatoria **%** de cada una de las evaluaciones impares de la funcion **%*****************************************************************z=0;x=a;for i=1:c;if (-1)^i==1k=eval(f);z=z+k;endx=h*i;end%*****************************************************************%** En la siguiente seccion se realiza la sumatoria **%** de cada una de las evaluaciones pares de la funcion **%*****************************************************************zz=0;x=a;for i=2:c;if (-1)^i==-1k=eval(f);zz=zz+k;endx=h*i;end%*****************************************************************%** En la siguiente seccion se realiza la evaluacion de **%** el primero y el ultimo valor a evaluar en la funcion **%*****************************************************************x=a;if x==ad=eval(f);endx=b;if x==beee=eval(f);end%******************************************************************%** una vez que se tienen los datos de areas bajo la curva **%** se realizan las operaciones directamente en la formula de **%** integracion por el metodo de simpson de 1/3 y se suma con **%** el valor de optenido de las areas de los ultimos 3 segmentos **%******************************************************************z=z*4;v=zz*2;z=z+v+d+eee;z=z/(3*c);z=z*(b-a);z=z+qqqqqfprintf('Resultado ');
Mtodo de Runge-Kutta
Programa en MatLab de Runge-Kutta de orden dos.
function ffprintf('\n \tRESOLUCION DE ECUACIONES DIFERENCIALES POR MEDIO RUNGE-KUTTA DE ORDEN 4\n')f=input('\n Ingrese la ecuacion diferencial dy/dx=\n','s');x0=input('\n Ingrese el primer punto x0:\n');x1=input('\n Ingrese el segundo punto x1:\n');y0=input('\n Ingrese la condicion inicial y(x0):\n');n=input('\n Ingrese el numero de pasos n:\n');h=(x1-x0)/n;xs=x0:h:x1;fprintf('\n''it x0 y(x1)');for i=1:nit=i-1;x0=xs(i);x=x0;y=y0;k1=h*eval(f);x=xs(i+1);y=y0+k1;k2=h*eval(f);y0=y0+(k1+k2)/2;fprintf('\n%2.0f%10.6f%10.6f\n',it,x0,y0);endfprintf('\n El punto aproximado y(x1) es = %8.6f\n',y0);
Programa de Runge-Kutta de orden cuatro.
function ffprintf('\n \tRESOLUCION DE ECUACIONES DIFERENCIALES POR MEDIO RUNGE-KUTTA DE ORDEN 4\n')f=input('\n Ingrese la ecuacion diferencial\n','s');x0=input('\n Ingrese el primer punto x0:\n');x1=input('\n Ingrese el segundo punto x1:\n');y0=input('\n Ingrese la condicion inicial y(x0):\n');n=input('\n Ingrese el numero de pasos n:\n');h=(x1-x0)/n;xs=x0:h:x1;fprintf('\n''it x0 y(x1)');for i=1:nit=i-1;x0=xs(i);x=x0;y=y0;k1=h*eval(f);x=x0+h/2;y=y0+k1/2;k2=h*eval(f);x=x0+h/2;y=y0+k2/2;k3=h*eval(f);x=x0+h;y=y0+k3;k4=h*eval(f);y0=y0+(k1+2*k2+2*k3+k4)/6;fprintf('\n%2.0f%10.6f%10.6f\n',it,x0,y0);endfprintf('\n El punto aproximado y(x1) es = %8.6f\n',y0);
Solucion2. Respuesta
>> runge2
RESOLUCION DE ECUACIONES DIFERENCIALES POR MEDIO RUNGE-KUTTA DE ORDEN 4
Ingrese la ecuacion diferencial dy/dx=4*exp(0.8*x)-0.5*y
Ingrese el primer punto x0:0
Ingrese el segundo punto x1:4
Ingrese la condicion inicial y(x0):2
Ingrese el numero de pasos n:4
'it x0 y(x1)0 0.000000 6.701082
1 1.000000 16.319782
2 2.000000 37.199249
3 3.000000 83.337767
El punto aproximado y(x1) es = 83.337767
respuesta>> runge4
RESOLUCION DE ECUACIONES DIFERENCIALES POR MEDIO RUNGE-KUTTA DE ORDEN 4
Ingrese la ecuacion diferencial-2*x^3+12*x^2-20*x+8.5
Ingrese el primer punto x0:0
Ingrese el segundo punto x1:0.5
Ingrese la condicion inicial y(x0):1
Ingrese el nmero de pasos n:5
'it x0 y(x1)0 0.000000 1.753950
1 0.100000 2.331200
2 0.200000 2.753950
3 0.300000 3.043200
4 0.400000 3.218750
function [T,Z] = rks4(Fn,a,b,Za,m)%---------------------------------------------------------------------------%RKS4 Runge-Kutta solution for the system% of D.E.'s Z' = F(t,Z) with Z(a) = Za.% Sample call% [T,Z] = rks4('f',a,b,ya,m)% Inputs% f name of the function% a left endpoint of a