Métodos Numéricos.docx

13
Ximena Parra;Ronald Mendoza Métodos Numéricos

Transcript of Métodos Numéricos.docx

Page 1: Métodos Numéricos.docx

Ximena Parra;Ronald Mendoza

Métodos Numéricos

Page 2: Métodos Numéricos.docx

Métodos Numéricos

Recopilación de 12 métodos Numéricos vistos en clase:

Código principal:function radiobutton1_Callback(hObject, eventdata, handles)interpolfunction radiobutton2_Callback(hObject, eventdata, handles)Quadraticfunction radiobutton3_Callback(hObject, eventdata, handles)n3function radiobutton4_Callback(hObject, eventdata, handles)lagrangefunction radiobutton5_Callback(hObject, eventdata, handles)

Page 3: Métodos Numéricos.docx

gaussfunction radiobutton7_Callback(hObject, eventdata, handles)n1function radiobutton8_Callback(hObject, eventdata, handles)secantefunction radiobutton9_Callback(hObject, eventdata, handles)dfdivfunction radiobutton10_Callback(hObject, eventdata, handles)trccubicfunction radiobutton11_Callback(hObject, eventdata, handles)trapeciofunction radiobutton12_Callback(hObject, eventdata, handles)simpon function pushbutton2_Callback(hObject, eventdata, handles)clc fprintf('\n INTEGRANTES: \n');fprintf('\n ºRonald Mendoza \n ºXimena Parra \n '); function radiobutton13_Callback(hObject, eventdata, handles)n2

Sub código de cada método:clc; disp('metodos numericos'); disp('interpolacion diferencias divididas'); n=input('ingrese el grado del polinomio, n='); fprintf('Se necesitan %.0f puntos\n',n+1); disp('ingrese los puntos');for i=1:n+1 fprintf('x%.0f=',i-1); X(i)=input(' '); fprintf('y%.0f=',i-1); Y(i)=input(' '); endDD=zeros(n+1);DD(:,1)=Y;for k=2:n+1 for J=k:n+1 DD(J,k)=[DD(J,k-1)-DD(J-1,k-1)]/[X(J)-X(J-k+1)]; endenddisp('La matriz de diferencias divididas es:');disp(DD); disp('El polinomio de newton es');syms x;polnew=DD(1,1); P=1; for i=1:n P=P*(x-X(i));

Page 4: Métodos Numéricos.docx

polnew=polnew+P*DD(i+1,i+1);endpolnew=expand(polnew);pretty(polnew);x=input('ingrese el valor de x a interpolar,x='); vi=eval(polnew);fprintf('el valor interpolado es %.2f\n',vi); hold on; ezplot(polnew,[X(1) X(n+1)]); plot(x,vi,'r+');

#####################################clear all; clc; fprintf('\nCalculo de la raiz de una ecuacion por el metodo de la Secante\n\n'); f=input('Dame la funcion f(x) : ','s'); x0=input('Dame el valor del intervalo inferior de x : '); x1=input('Dame el valor del intervalo superior de x : '); e=input('Dame el porciento del error : '); ea=1000;c=1; while ea>e x=x0; g=eval(f); x=x1; gg=eval(f); xi=x1-((gg*(x0-x1))/(g-gg)); ea=abs((xi-x1)/xi)*100; x0=x1; x1=xi; c=c+1;fprintf('\n\n\n\nLa raiz es: %d',xi) endfprintf('\n\n\n\nLa raiz exacta es: %d',xi)fprintf('\n\nNumero de iteraciones: %d\n',c);

#####################################clear all;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 :');

Page 5: Métodos Numéricos.docx

h=(b-a)/c;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);endz=0;x=a;for i=1:c;if (-1)^i==1k=eval(f);z=z+k;endx=h*i;end zz=0;x=a;for i=2:c;if (-1)^i==-1k=eval(f);zz=zz+k;endx=h*i;endx=a;if x==ad=eval(f);endx=b;if x==beee=eval(f);end z=z*4;v=zz*2;z=z+v+d+eee;z=z/(3*c);z=z*(b-a);z=z+qqqqqfprintf('Resultado ');

Page 6: Métodos Numéricos.docx

#####################################clear all ;clc; fprintf('\nCalculo de la raiz de una ecuacion por el metodo de Gauss \n\n'); f=input('Cuantas filas tiene la matriz: ');c=input('Cuantas columnas tiene la matriz: '); for k=1:c for j=1:f fprintf('fila : %x\n',j) fprintf('columna : %x',k) r=input('Numero de esta fila y columna: '); a(j,k)=r; j=j+1; end k=k+1;endapause for k=1:c-1 a(k,:)=a(k,:)/a(k,k); for j=k+1:f a(j,:)=a(j,:)-a(k,:)*a(j,k); j=j+1; a pause end k=k+1; a pause end for k=f:-1:2 for j=k-1:-1:1 a(j,:)=a(j,:)-a(k,:)*a(j,k); j=j-1; a pause end k=k-1; a pauseendfprintf('resultado\n');

#####################################

Page 7: Métodos Numéricos.docx

clc %limpia ventana de comando fprintf('\nCalculo de la raiz por interpolacion lineal\n\n');n=input('grado de polinomio: '); %ingreso de grado del polinomio a evaluara=input('valor de X en []: '); % ingreso de los datos x b=input('valor de Fx() en []: '); %ingresoo de los datos fxc=input('valor a evaluar ');x=input('inserte rango de eje x (1:0.1:d)');%rango de vista de la grafica se ajusta % en base al mayor dato de "x" ubicar en dp = polyfit (a, b, n) % comando que interpola en base a los datos ingresado y el gradof = polyval (p, c); fprintf('\nresultado f(x); %d',f');% grafica los datos y = interp1 (a, b, x, 'polyflit(n)');plot (a, b,'k--+',x, y)%grafica hold onplot (c,f,'c-O')hold onplot (c,f,'r-X')legend('dt: x,F(x)','graf x spline','evaluacion')title('interpolacion para n grado ')grid

#####################################clear all; clc; % limpiador de ventana fprintf('Interpolacion con el Metodo del Polinomio de Lagrange\n\n'); n=input('grado del polinolio: ');for i=1:n+1 a(1,i)=input('ingrese valores de x:');%datos de x almacenados en matrix a(1,i)endfor i=1:n+1 b(1,i)=input('ingrese valores de f(x):');%datos de F(x) almacenados en matrix a(1,end xint=input('Numero a interpolar x: '); fxint=0; i=1;while i<=n+1 L=1; J=0; while J<=n if i~=J+1 L=L*(xint-a(1,J+1))/(a(1,i)-a(1,J+1));% lagrange con uso de matrix X end J=J+1; endfxint=fxint+L*b(1,i) %multiplicacion matrix F(x) con L luego sumatoria

Page 8: Métodos Numéricos.docx

i=i+1;end x=input('inserte rango de eje x (1:0.1:d)'); % rango para la grafica del polinomiop = polyfit (a, b, n) % comando que interpola en base a los datos ingresado y el gradof = polyval (p, xint); y = interp1 (a, b, x, 'polyflit(n)'); %comando que generarar la forma del polinomio para yplot (x, y)%grafica fprintf('\nresultado xi: %d',fxint'); plot (x,y,'k--')hold on plot(a,b)hold on plot(xint,fxint,'r-*')gridlegend('Graf polinomio','Graf x,F(x)','R de evaluacion')title('interpolacion lagrange "N" grado')

#####################################clear;clc; fprintf('\n metodo de Newton Rapson Modificado\n\n'); funcion=input('Dame la funcion f(x) : ','s'); dfuncion=input('Dame la derivada de funcion f(x) : ','s'); d2funcion=input('Dame la segunda derivada de funcion f(x) : ','s'); xi=input('Dame el valor inicial de x : '); e=input('Dame el porciento del error : '); ea=1000; c=1; x=xi;while ea>e g=eval(funcion); h=eval(dfuncion); k=eval(d2funcion); j=x-(g*h)/(h^(2)-(g*k)); ea=abs((j-x)/j*100); x=j; c=c+1;end fprintf('\n\n\n\nLa raiz exacta es: %d',j) fprintf('\n\nNumero de iteraciones: %d',c);

#####################################clear all; clc;syms x fprintf('\n método de Newton Rapson por 1º derivada\n\n');

Page 9: Métodos Numéricos.docx

f=input('Dame la funcion f(x) : ' ); ff=input('Dame la derivada de funcion f(x) : ','s'); xi=input('Dame el valor inicial de x : '); e=input('Daie el porciento del error : '); ea=1000; c=1; x=xi; while ea>e g=eval(f); h=eval(ff); j=x-g/h; ea=abs((j-x)/j*100); x=j; c=c+1; end fprintf('\n\n\n\nLa raíz exacta es: %d',j); fprintf('\n\nNumero de iteraciones: %d',c);

#####################################lc fprintf('\nCalculo de la raiz por Newton\n\n');x0=input('Ingrese el valor inicial: ');tol=input('Ingrese el porcentaje de error: ');f=input('Ingrese la función: ');i=1;fx(i)=x0; syms x;f1=subs(f,x,fx(i));z=diff(f);d=subs(z,x,fx(i)); ea(1)=100; while abs(ea(i))>=tol; fx(i+1)=fx(i)-f1/d; f1=subs(f,x,fx(i+1)); d=subs(z,x,fx(i+1));

Page 10: Métodos Numéricos.docx

ea(i+1)=abs((fx(i+1)-fx(i))/fx(i+1)*100); i=i+1;endfprintf('i fx(i) Error aprox (i) \n');for j=1:i; fprintf('%2d \t %11.7f \t %7.3f \n',j-1,fx(j),ea(j));end

#####################################function area=trapecios(a,b,m)clc %Regla de los trapecios. fprintf('\nCalculo de la raiz por interpolacion cuadratica\n\n'); global fnamefname=input('escribir la función f(x) entre comillas ('')');if nargin < 1 a=input('escribir la extremo izquierdo del intervalo (A) '); b=input('escribir la extremo derecho del intervalo (B) ');endif nargin < 3 m=input('número de subintervalos ');endh=(b-a)/mx=a:h:b;sum=0;for i=2:m sum=sum+f(x(i))endarea=(h/2)*(f(a)+f(b)+2*sum) function y=f(u) global fname ; x=u; y=eval(fname)

#####################################clear all; clc; fprintf('Calculo de la integral por el metodo trapecial\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; z=0; for x=a:h:bk=eval(f);if x==a,d=k;end

Page 11: Métodos Numéricos.docx

if x==b,e=k;endz=z+k;end z=z-d-e; z=z*2; z=z+d+e; z=z/(2*c); z=z*(b-a) fprintf('Resultado ');

#####################################function [a,b,c,d]=trccubic(X) clcfprintf('Interpolación por "segmentaria cubicas". \n ');X=input('introduce los datos:','s');n=length(X(1,:)); for i=1:n; a(i)=X(2,i);end for i=1:n-1; h(i)=X(1,i+1)-X(1,i);end for i=2:n-1; alfa(i)=3/h(i)*(a(i+1)-a(i))-3/h(i-1)*(a(i)-a(i-1));end l(1)=1;mu(1)=0;z(1)=0; for i=2:n-1; l(i)=2*(X(1,i+1)-X(1,i-1))-h(i-1)*mu(i-1); mu(i)=h(i)/l(i); z(i)=(alfa(i)-h(i-1)*z(i-1))/l(i);end l(n)=1;z(n)=0;c(n)=0; for i=n-1:-1:1; c(i)=z(i)-mu(i)*c(i+1); b(i)=(a(i+1)-a(i))/h(i)-h(i)*(c(i+1)+2*c(i))/3; d(i)=(c(i+1)-c(i))/(3*h(i));end for i=1:n-1; x=X(1,i):0.1:X(1,i+1); y=a(i)+b(i)*(x-X(1,i))+c(i)*(x-X(1,i)).^2+d(i)*(x-X(1,i)).^3;

Page 12: Métodos Numéricos.docx

hold on; plot(x,y,'b');end for i=1:n; hold on; plot (X(1,i),X(2,i),'*','MarkerEdgeColor','r','LineWidth',1); title('Interpolación por "segmentaria cubicas".');end

#####################################