Métodos Numéricos en MATLAB: Runge-Kutta, Euler, Integración, Interpolación y Búsqueda de Raíces
%--------------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)
%----------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