Métodos Numéricos en MATLAB: Runge-Kutta, Euler, Integración, Interpolación y Búsqueda de Raíces

Matemáticas11,43 KB

%-----------RK3-------------------% a=tarte(1); b=tarte(end); h=(b-a)/n; xirt=(a:h:b)'; m=numel(y0); yirt=zeros(n+1,m); yirt(1,:)=y0(:)'; yk=y0(:); for i=1:n xk=xirt(i); k1=f(xk,yk)*h; k2=f(xk+h/2,yk+k1/2)*h; k3=f(xk+h,yk-k1+2*k2)*h; yk = yk + (1/6)*(k1 + 4*k2 + k3); yirt(i+1,:)=yk'; end end


%-----------------RUNGE KUTTA_4----------------------------% function [xirt,yirt]=rk4(f,tarte,y0,n) h=(tarte(end)-tarte(1))/n; xirt=tarte(1):h:tarte(end); yirt=zeros(length(y0),n+1); yirt(:,1)=y0; for k=1:n k1=f(xirt(k),yirt(:,k)).*h; k2=f(xirt(k)+h/2,yirt(:,k)+k1/2)*h; k3=f(xirt(k)+h/2,yirt(:,k)+k2/2)*h; k4=f(xirt(k)+h,yirt(:,k)+k3)*h; yirt(:,k+1)=yirt(:,k)+(1/6)*(k1+2*k2+2*k3+k4); end end


%--------------EULER------------% function [xirtz,yirt]=metodo_euler(fsis,a,b,y0,n) h=(b-a)/n; i=0:n; xirt=a+i*h; xirtz=xirt'; yirt=[]; yirt(1,:)=y0'; for j=1:n yirt(j+1,:)=yirt(j,:)+h*fsis(xirt(j),yirt(j,:)); end end

%------------------EULER HOBETUA-------------% function [xirt,yirt]=eulerhobetua(f,a,b,y0,n) h=(b-a)/n; xirt=(a:h:b)'; m=length(y0); yirt=zeros(n+1,m); yirt(1,:)=y0'; for i=1:n k1=f(xirt(i),yirt(i,:)'); k2=f(xirt(i)+h,yirt(i,:)'+h*k1); yirt(i+1,:)=(yirt(i,:)' + (h/2)*(k1+k2))'; end end


Scripts de referencia

%------------SCRIPT---------------------%

ED -> [t,y] = ode45(f,tarte,y0)

INTEGRAR -> I = quad(f,a,b)

[x,y]=meshgrid(x,y) -> surf(x, y, z)


%----------HORNER(para polinomios)-------------% function b=horner(p,x) b=p(1); n=length(p); for i=1:(n-1) b=b.*x+p(i+1); end

%-----------HORNER_BARIANTEA(para newton pol)--------% function p=hornerbariante(koef,nodo,x) n=length(koef)-1; p=zeros(size(x)); for i=1:length(x) bi=koef(1); for j=1:n bi = bi * (x(i)-nodo(n-j+1)) + koef(j+1); end p(i) = bi; end end


%----------ERDIKO PUNTUA KONPOSATUA--------% function Q=erdikopuntua(f,tartea,n) a=tartea(1); b=tartea(end); h=(b-a)/(2*n); x=a+(2*(1:n)-1)*h; Q=2*h*sum(f(x)); end

%------------------TRAPEZIO KONPOSATUA-------------% function integrala=trapeziokonposatua(f,a,b,N) h=(b-a)/N; xn=a:h:b; integrala=(h/2)*(f(a)+f(b)+2*sum(f(xn(2:(end-1))))); end

%---------------SIMPSON KONPOSATUA--------------% function integral=simpsonkonposatua(f,a,b,N) h=(b-a)/(2*N); xn=a:h:b; f1=f(xn(1)); fazk=f(xn(end)); fbider4=f(xn(2:2:(end-1))); fbider2=f(xn(3:2:(end-2))); integral=(h/3)*(f1+4*sum(fbider4)+2*sum(fbider2)+fazk) end


%--------------LAGRANGE FUNTZIOA------------% function yy=lagrange(X,Y,xx) n=length(X); yy=zeros(size(xx)); for i=1:n Li=ones(size(xx)); for j=[1:(i-1) (1+i):n] Li=Li.*(xx-X(j))/(X(i)-X(j)); end yy=yy+Li*Y(i); end end

%--------------CHEBYSHEV------------% function x=chebyshevberria(tarte,n) k=0:(n-1); tk = cos(((2*k+1)*pi)/(2*n)); a=tarte(1); b=tarte(end); d=(a+b)/2; c=(b-a)/2; x=c*tk+d; end


%--------------------- SEKANTE-------------------------% function [r,k]=sekantea(x0,x1,f,eps) format long imax=100; errorea=1; i=1; while (errorea > eps) && (i <= imax) x2=x1-(f(x1)*(x1-x0))/(f(x1)-f(x0)); errorea=abs(x2-x1)/abs(x2); x0=x1; x1=x2; i=i+1; end r=x1; k=i; end

%---------------------NEWTON RAPSHON-------------------------% function [x,k]=Newton_Raphson(f,fd,x0,e_ref) e=inf; x=x0; k=0; while k<=100 & e>e_ref xn=x-(f(x)/fd(x)); e=abs(xn-x)/abs(xn); k=k+1; x=xn; end end


%--------------NEWTON_POLINOMIOA------------% function yy=newtonpol(xx,xn,yi) s=length(xn); F=yi; for k=1:(s-1) F(s:-1:(k+1))=(F(s:-1:k+1)-F(s-1:-1:k))./(xn(s:-1:(k+1))-xn((s-k):-1:1)); end yy=hornerbariantea(xi,F,xx) end

Descargar

PDF Word HTML