métodos númericos (laboratorio problemas guias).docx

49
Laboratorio de Métodos Numéricos FIEE-UNMSM EJERCICIOS RESUELTOS (GUIA 1) 1. función atan3 (varargout) function varargout=atan3(varargin)%se pasa a la función arco tangente hasta 2 valores if nargin==1 % si solo es un valor rad = atan(varargin{1});% entonces se devolverá el arco tangente de este valor elseif nargin==2 % de lo contrario si son 2 valores( seno y coseno) rad = atan2(varargin{1},varargin{2});%se devolverá dos valores de arcotangente expresados en radianes y grados else % y si no se entrega un valor o son más de 3 disp('Error: más de dos argumentos')% se presentara este mensaje return%se vuelve al inicio end% fin del if varargout{1}=rad;% valor del arco tangente en radianes if nargout>1% si son mas de una variable varargout{2}=rad*180/pi;% la segunda respuesta será dada en sexagesimales end %fin de la función

Transcript of métodos númericos (laboratorio problemas guias).docx

Page 1: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

EJERCICIOS RESUELTOS

(GUIA 1)

1. función atan3 (varargout)

function varargout=atan3(varargin)%se pasa a la función arco tangente hasta 2 valores if nargin==1 % si solo es un valorrad = atan(varargin{1});% entonces se devolverá el arco tangente de este valorelseif nargin==2 % de lo contrario si son 2 valores( seno y coseno) rad = atan2(varargin{1},varargin{2});%se devolverá dos valores de arcotangente expresados en radianes y gradoselse % y si no se entrega un valor o son más de 3 disp('Error: más de dos argumentos')% se presentara este mensajereturn%se vuelve al inicioend% fin del ifvarargout{1}=rad;% valor del arco tangente en radianesif nargout>1% si son mas de una variablevarargout{2}=rad*180/pi;% la segunda respuesta será dada en sexagesimalesend %fin de la función

Page 2: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

2. paquete simbólico (toolbox) cálculo de limites

limx→0

sen(x )x

limx→∞

n3+3n2−2n3n3−1

3. sin necesidad de declarar variables para este caso derivadas e integrales (comando “diff” e “int”):

Page 3: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

Page 4: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

4. gráficos bidimensionales comando “plot”

Comando “grid”

Comando “subplot”

Page 5: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

Función “figure”

Función “ezplot”

Page 6: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

Con coordenadas polares

EJERCICIOS RESUELTOS Y PROPUESTOS

(GUIA 2)

Ejemplo 1: Calcular la suma de los n primeros términos de la sucesión 1 ,2 x ,3 x2 ,4 x3 ,…

Solución:

function sucesionn=input('¿Cuántos términos quieres sumar? ');% se asigna el número de términos en "n" x=input('Dame el valor del numero x ');% se asigna el valor de la vaiable en "x" suma=1; % valor inicial for i=2:n % el contador inicia desde 2 hasta "n" suma=suma+i*x^(i-1);% forma numérica de la sucesión

Page 7: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

end % fin del bucle disp('El valor pedido es') %texto final disp(suma) % respuesta final

Ejemplo 2: decidir sin un número natural es primo.

Solución:

function numero_primon=input('Número natural que deseas saber si es primo ');% se asigna el número natural ingresado en "n" i=2;% valor inicial del contador primo=1; % valor de primo es 1 while i<=sqrt(n) % mientras i es menor o igual que la raiz cuadrada de "n" if rem(n,i)==0 % si el resto de dividir n entre i es igual a "0" (divisibilidad) primo=0; %entonces e valor de primo sera "0" break % corta el if end i=i+1; % el contador aumenta de un en uno (busca el primer divisor) end % finaliza el while if primo % si primo no entra al bucle while osea primo=1 disp('El número dado es primo.') % mensaje else % de lo contrario primo=0 disp('El número dado no es primo.') % mensaje disp('De hecho, es divisible por:') disp(i) % primer divisor encontrado despues del 1 end% final del programa

Page 8: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

Ejemplo 3: escribir un número natural en una base dada (menor que diez).

Solución:

function cambio_de_basen=input('Dame el número que quieres cambiar de base ');% se ingresa por teclado el número natural y se le asigna a "n" base=input('¿En qué base quieres expresarlo? '); %se ingresa la base por teclado y se asigna en "base" i=1;% contador inicial en 1 while n>0 % mientras n es mayor que 0 c(i)=rem(n,base); % c(i) sera el resto de dividir "n" ente "base" n=fix(n/base); % Parte entera de n/base i=i+1; % aumento de uno en uno end % fin de while disp('La expresión en la base dada es:') % mensaje i=i-1; % decremento de uno en uno disp(c(i:-1:1))% muestra los residuos desde el ultimo contador al primero

Page 9: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

Ejemplo 4: implementar una función que calcule, mediante el algoritmo de Euclides, el máximo común divisor de dos números naturales.

Solución:

function m=euclides(a,b) a=input('ingrese el primer número: ');% ingreso del primer valor b=input('ingrese el segundo número: ');% ingreso del segundo valor if a<b % si a<b c=b; b=a; a=c;% entonces se compara end % fin del if while b>0 %mientras b>0 c=rem(a,b); % el resto de dividir a/b a=b; b=c; %comparación end %fin del while m=a; % maximo comun divisor disp('el máximo común divisor de estos números es: '); %texto final disp(m)% se mujestra el valor del MCM

Propuestos:

Page 10: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

1. Crear function x = complejo(z) que obtiene el módulo y argumento de un complejo.

Entrada: valor complejo z=a+i b

Salida: vector x de dos componentes con el módulo y argumento de z

Paso 1: definir el vector x con 2 componentes nulas

Paso 2: calcular x1 = |z|

Paso 3: calcular x2 = argumento(z)

Solución:

function numero_complejo% nombre de la funciónz=input('ingrese el número complejo: ');%se ingresa por teclado el número complejo asignado en 'z'a=real(z);% se extrae la parte realb=imag(z);% se extrae la parte imaginaria r=sqrt(a^2+b^2);% modulo del numero coomplejoq=atan(b/a);% argumento del número complejodisp('su módulo y argumento son respectivamente: ');%mensaje

de salidadisp(r);%salidadisp(q)%salida

2. Programar la función:

Page 11: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

f (x){−2x−1 x≤−1x2−1<x<12 x−1 x≥1

Comprobar su funcionamiento para diferentes valores y representarla.

Solución:

function funcion_partidax=linspace(-3,3,3000);% dominio de la funcion se crea 3000 valores en el intervalo de -3 a 3y=[];% sea la funcionlong=length(x);% número de valores del vector x for i=1:long% contador de cada valor de i=1 a i= long if (x(i)<-1);z=-2*x(i)-1;% función y restricción elseif x(i)<1;z=x(i)^2; else;z=2*x(i)-1;end y=[z];% se alamcena los puntos obtenidos en "y"endy=(x.^2).*((-1<x)&(x<1))+(2*x-1).*(1<=x)+(-2*x-1).*(x<=-1);%programacion vectorizadaplot(y,'.'),grid on,title('Función definida a trozos')% gráfica de la función

3. Programar la función que calcula las raíces de una ecuación de segundo grado según el algoritmo siguiente:

Page 12: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

Entrada: coeficientes a, b, c de a x2+bx+c=0

Solución:

function[x1,x2]= raices_polinomio2grado(p)%función que devuelve las raíces de un polinomio cuadrático disp('ingrese los coeficientes');p(1)=input(' ');% ingresa el valor del primer coeficientep(2)=input(' ');% ingresa el valor del segundo coeficientep(3)=input(' ');% ingresa el valor del tercer coeficientedis=sqrt(p(2)*p(2)-4*p(1)*p(3));% arreglo de la determinantex1=(-p(2)+dis)/(2*p(1));% primera raízx2=(-p(2)-dis)/(2*p(1));% segunda raízend% fin de la función

4. Crear una función que obtenga el valor de e mediante el desarrollo: ℮≈∑

k=1

N 1k !

Como criterio de parada se tomará 1k !<tol

donde tol es el parámetro de entrada. Como resultados se debe obtener s (aproximación de e) y n (número de términos utilizados).

Solución:

function y=valor_e(s);tol=input('ingresar el parametro de entrada');e=1;n=0;s=0;

Page 13: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

k=1;s1=1;while (s1>=tol) for k=1:n n=n+1; s=s+(1/factorial(k)); k=k+1; s1=(1/factorial(k)); end enddisp(s) end

5. Utilizando inline dibujar la función:

f ( x )= x−2x2+1

en [-5,5], poniendo etiquetas a los ejes.

Solución:

function grafica_inlinex=linspace(-5,5,3000);% dominio de la funcion se crea 3000 valores en el intervalo de -1 a 1y=[];% sea la funcionlong=length(x);% número de valores del vector x for i=1:long% contador de cada valor de i=1 a i= long f=inline('(x+2)/(x^2+1)','x');% descripcion de la funcion y(i)=f(x(i));% se evalua cada punto del dominio en la función endplot(x,y,'.'),grid on,title('Función definida a trozos')% gráfica de la función

Page 14: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

title('gráfica con matlab ');xlabel('eje x'); ylabel('eje y'); grid on %etiqueta en los ejes

EJERCICIOS RESUELTOS Y PROPUESTOS

(GUIA 3)

Ejemplo 1

% prueba01.mn=input('Ingrese número de periodos= ')% ingreso de datos por tecladox=0:pi/100:2*pi*n;% dominio de la funcióny=exp(-x/10).*sin(2*x);% descripcion de la función de Amortiguamientoplot(x,y)% gráficatitle('Amortiguamiento')% título de la gráficaxlabel('Tiempo(seg)')% subtítulo de abscisasylabel('Posicion (m)')%subtítulo de ordenadasgrid% gráfica en cuadrícula

Page 15: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

Ejemplo 2

%cifras.m%Funcion que calcula para un numero entero n:%suncif:Suma de cifras del número "n"%nuncif: numero de cifras del número "n"function[sumcif,numcif]=cifras(n)sumcif=0;%inicio del sumadornumcif=0;%inicio del contadorwhile n~=0%mientras el número ingresado sea diferenter de "0" digito=rem(n,10);%guardar en digito el resto de dividir "n" entr 10 sumcif=sumcif+digito;%sumar digito a la suma anterior numcif=numcif+1;%contar número de cifras n=fix(n/10);%redondeoend%fin del whileend% fin de la función

Page 16: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

Ejemplo 3

% expo1.mfunction s=expo1(x,n)s=1;% primer valor de Sfor i=1:n% contador de 1 a n s=s+x^i/factorial(i);% expresión end % fin de la función

Ejemplo 3.1

function [s,err]=expo2(x,n)% expo2.ms=1;for i=1:n s=s+x^i/factorial(i);enderr=abs(exp(x)-s);

Ejemplo 4

Page 17: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

% fact.mfunction f=fact(n)if n==0% si "n" es cero entonces f=1;elseif n==1% y si n=1 entonces f=1;else % de lo contrario f=n*fact(n-1);end %fin

Ejemplo 5

% prueba02.mt =rand(1);% t toma cualquier valor aleatorio entre 0 y 1if t > 0.75 % si t>0.75 entonces:s = 0elseif t < 0.25% de lo contrario si t<0.25 entonces: s = 1else% de lo contrario: s = 1-2*(t-0.25)endplot(t,s)% gráficagrid %cuadrícula

Ejemplo 6: (SWITCH)

Page 18: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

% prueba03.mopc=4% valores de opcswitch opccase 3% en el caso de que opc=3 se muestra: disp('Electrónica')case 4% en el caso de que opc=4 se muestra: disp('¡¡Eléctrica <3!!')case 5% en el caso de que opc=5 se muestra: disp('Telecomunicaciones')case 6% en el caso de que opc=6 se muestra: disp('biomédica')otherwise % en el caso de que opc no sea ninguna opción se muestra: disp('Fuera de Rango...')end

Ejemplo 7: (FOR)

%prueba04.mfor k=1:100 % contador x=sqrt(k); % obtiene la raíz de k if x>5,% si raíz es mayor a 5 fprintf('x= %5.2f , k= %3d \n',x,k) % muestra en pantalla x y k break % sale del lazo end % fin del if end% fin del for

Ejemplo 8: (WHILE)

Page 19: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

% prueba05.mm = 10;k = 0;% valor inicial de Kwhile k<=m% mientras K<=m x = k/10;% guardar el valor de x disp([x, x^2, x^3]); % imprimirá una tabla de valores k = k+1;end

Ejemplo 9

function [x,y]=circunferencia1(radio, p) if p>2*pi disp('error!.Angulo muy grande');endt=linspace(0,p,10000)x=radio*cos(t);y=radio*sin(t);plot(x,y);axis 'square'

EJERCICIOS PROPUESTOS

Page 20: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

Ejercicio 05 (números de base 10 a base 2)

n=input('Dame el número que quieres cambiar de base ');i=1;while n>0c(i)=rem(n,2);n=fix(n/2); % Parte entera de n/2i=i+1;enddisp('La expresión en la base dada es:')i=i-1;disp(c(i:-1:1))

Ejercicio 09

El producto realmin*epsen MATLAB representa a: a. Menor valor positivo Normalizado b. Menor valor positivo No Normalizado c. Mayor valor positivo Normalizado d. Mayor valor positivo No Normalizado

Rpta: menor valor positivo no normalizado (d)

Ejercicio 10

El realminen MATLAB representa a: a. Menor valor positivo Normalizado b. Menor valor positivo No Normalizado c. Mayor valor positivo Normalizado d. Mayor valor positivo No Normalizado

Rpta: menor valor positivo normalizado (a)

Ejercicios resueltos y propuestos

Page 21: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

(Guía 4 I)

Ejemplo 1 (método gráfico)

x=0:0.01:pi; %Creamos un vector con valores entre 0 y pi.y=sin(3.*x)+cos(x);subplot(1,2,1) % Dividimos la pantalla en dos secciones y graficamos en la primera secciónplot(x,y)title('f(x) = seno(3x) + cos(x)')gridx=-3:0.01:3; % Definimos el rango de valores para graficar la segunda funcióny=exp(x) - x - 2;subplot(1,2,2)plot(x,y)title ('f(x) = exp(x) - x - 2')grid %Trazamos la cuadrícula

Page 22: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

Ejemplo 2

c=0.1:.01:15;% dominio f=9.81.*60./c .*(1 - exp(-c.*10/60))-40;% expesión de la funciónplot(c,f)%gráficagrid%coodenadastitle ('f=9.81.*60./c .*(1 - exp(-c.*10/60))-40')%titulo

Ejemplo 3

x=0:0.01:20;y = cos(x).*cosh(x)+1;plot(x,y)gridsubplot(1,2,1)plot(x,y)gridsubplot(1,2,2)plot(x,y)axis([0,30,-40,40])gridsubplot(1,2,1)title('Y = cos(x)*cosh(x)+1')

Page 23: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

subplot(1,2,2)title('Y = cos(x)*cosh(x)+1, usando el comando AXIS([0,20,-20,20])')

Ejemplo 4

function bisección clc;clear;a=input('Valor de la cota inferior: ');b=input('Valor de la cota superior: ');TOL=input('Tolerancia de error : ');max_iter=input('Numero de iteracciones: ');iter = 0;fprintf('\nMETODO DE BISECCION...\nRESULTADOS\n')fprintf('Iter a Xr b f(a) f(xr) Error\n');while 1 %Inicio un cliclo infinito del cual salgo al hallar la raíz o exceder max_iterxr=(b+a)/2; %Aproximo el valor de la posible raíz como el punto medio del intervalo.fa = funcion(a); %Evaluamos la función en la cota inferiorfb = funcion(b); %evaluamos la función en la cota superior

Page 24: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

fxr= funcion(xr); %Evaluamos la función en la posible raízerror = abs((b - a)/a);% Impresion de resultados en cada iteraciónfprintf('%4.0f,%10.6f,%10.6f,%10.6f,%10.6f,%10.6f,%12.6f\n',iter,a,xr,b,fa,fxr,error)if error <= TOL %Si supero el error aceptado detengo el procesofprintf('Proceso concluido exitosamente con el nivel de error <= %10.6f\n\n',TOL)break;endif abs(fxr)<=TOL %Se hallo la aproximación a la raíz y salgo del ciclo infinitofprintf('\nProceso concluido exitosamente con el nivel de error <= %12.6e\n\n',TOL)break;endif fa*fxr < 0b=xr; %La raiz esta en el primer intervaloelsea=xr; %La raiz esta en el segundo intervaloendif (iter > max_iter) %Verifico si se excede el numero de iteraccionesfprintf('\nNumero de iteracciones excedido...\n\n')break;enditer=iter+1; %Incremento el numero de iteraccionesendfprintf('Raiz aproximada: %12.6f',xr);fprintf(' Iteraciones : %5.0f\n',iter);% Modelo gráficox=a:0.01:b;f=funcion(x);plot(x,f)gridfunction y=funcion(x) %A continuación debo colocar la función a evaluary=9.81.*60./x .*(1 - exp(-x.*10/60))-40;% fin del programa

Page 25: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

function bisecciónclc;clear;a=input('Valor de la cota inferior: ');b=input('Valor de la cota superior: ');TOL=input('Tolerancia de error : ');max_iter=input('Numero de iteracciones: ');iter = 0;fprintf('\nMETODO DE BISECCION...\nRESULTADOS\n')fprintf('Iter a Xr b f(a) f(xr) Error\n');while 1 %Inicio un cliclo infinito del cual salgo al hallar la raíz o exceder max_iterxr=(b+a)/2; %Aproximo el valor de la posible raíz como el punto medio del intervalo.fa = funcion(a); %Evaluamos la función en la cota inferiorfb = funcion(b); %evaluamos la función en la cota superiorfxr= funcion(xr); %Evaluamos la función en la posible raízerror = abs((b - a)/a);% Impresion de resultados en cada iteraciónfprintf('%4.0f,%10.6f,%10.6f,%10.6f,%10.6f,%10.6f,%12.6f\n',iter,a,xr,b,fa,fxr,error)if error <= TOL %Si supero el error aceptado detengo el procesofprintf('Proceso concluido exitosamente con el nivel de error <= %10.6f\n\n',TOL)break;endif abs(fxr)<=TOL %Se hallo la aproximación a la raíz y salgo del ciclo infinitofprintf('\nProceso concluido exitosamente con el nivel de error <= %12.6e\n\n',TOL)break;endif fa*fxr < 0b=xr; %La raiz esta en el primer intervaloelsea=xr; %La raiz esta en el segundo intervaloendif (iter > max_iter) %Verifico si se excede el numero de iteraccionesfprintf('\nNumero de iteracciones excedido...\n\n')break;enditer=iter+1; %Incremento el numero de iteraccionesendfprintf('Raiz aproximada: %12.6f',xr);fprintf(' Iteraciones : %5.0f\n',iter);% Modelo gráfico

Page 26: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

x=a:0.01:b;f=funcion(x);plot(x,f)gridfunction f=funcion(x) %A continuación debo colocar la función a evaluarf=9.81.*60./x .*(1 - exp(-x.*10/60))-40;% fin del programa

Ejemplo 4

%Programa para calcular raíces de ecuaciones, basado en el algoritmo de Falsa%Posiciónfunction FalsaPosicionclc;clear all;a=input('Valor de la cota inferior: ');b=input('Valor de la cota superior: ');TOL=input('Tolerancia de error : ');max_iter=input('Numero de iteracciones: ');%Modelo gráficox=a:0.01:b;f=funcion(x);plot(x,x,x,f);grid;title ('Grafica de la función en el intervalo dado');%Termina la creación del modelo gráfico

Page 27: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

iter = 0; %Inicio el contador de iteracciones% Se imprimen los titulos generalesfprintf('\nMETODO DE FALSA POSICION...\n\n')fprintf('Iter a Xr b f(a) f(b) f(xr) Error\n');% El criterio de convergencia se cumple cuando la función evaluada en la% raiz sea menor que el error máximo aceptado.while 1 % Iniciamos el procesofa = funcion(a); %Evaluamos la funcion en la cota inferiorfb = funcion(b); %evaluamos la funcion en la coa superiorxr = b - (fb*(a-b)) / (fa - fb); %Calculo el valor de la aproximacionfxr= funcion(xr); %Evaluamos la funcion en la posible raizerror = abs(fxr);% Impresion de resultados en cada iteraccionfprintf('%4.0f,%10.6f,%10.6f,%10.6f,%16.6f,%16.6f,%16.6f,%12.4e\n',iter,a,xr,b,fa,fb,fxr,error)if error <= TOL %Si supero el error aceptado detengo el procesofprintf('Proceso concluido exitosamente con el nivel de error <= %12.2e\n\n',TOL)break;endif fa*fxr < 0b=xr; %La raiz esta en el primer intervaloelsea=xr; %La raiz esta en el segundo intervaloendif (iter>max_iter) %Verifico si se excede el numero de iteraccionesfprintf('\nNumero de iteracciones excedido...\n\n')break;enditer=iter+1; %Incremento el numero de iteraccionesendfprintf('\nRaiz aproximada: %12.6f',xr);fprintf(' Iteraciones: %5.0f\n',iter);function y=funcion(x) %Aca es donde dobo colocar la funcion a evaluary=x.^3+2.*x.^2+10.*x-20;%Fin del programa

Page 28: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

Ejercicios resueltos y propuestos

(Guía 4 II)

Método del punto fijo

%Método del punto fijo o aproximaciones sucesivas syms x % Definición de la variable simbólica xfx=’x^4+2*x^2-x-3’; % Def. Función simbólica fxsubplot(1,2,1)ezplot(fx,-2,2);grid on; % Representación de fx en [-2,2]solve(strcat(fx,’=0’))gx=’ (3+x-2*x^2)^0.25’; % Def. función simbólica gxsubplot(1,2,2)ezplot(gx,-2,2);grid on; % Representación de gx en [-2,2]

Gráficas 2D con Matlab:

Page 29: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

Curvas de la forma: y=f (x )

Page 30: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

Curvas paramétricas

Page 31: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

Gráficas 3D con Matlab

Curvas en el espacio:

Page 32: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

Curvas de la forma y=f (x , y):

Curvas de nivel:

Page 33: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

Ejercicio 1 Bisección

% bolzano2.m function[raiz,z,it]=bolzano2(f,a,b,TOL)f=inline('exp(-x)-x');z=[];for it=1:1000 x=(a+b)/2; err=(b-a)/2; z=[z; a x b err]; if feval(f,a)*feval(f,x)<0 b=x; else a=x; end if err<TOL break endendraiz=x;

Page 34: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

Ejercicio 2: localización

a) Raíces de la función f ( x )= ex /3

2−sen(x ) en el intervalo de [-10 10]

% fun1.mfunction [f]=fun1(x)f=1/2*exp(x/3)-sin(x);

% Localiza.mclc, clear all, format shortx=-10:10;y=fun1(x);plot(x,y),griddisp('x vs y') disp([x' y'])% Intervalos que contienen raicesacu=[];for i=1:length(x)-1

if y(i)*y(i+1)<0, acu=[acu; x(i) x(i+1)]; end

enddisp('Intervalos que contienen raices...'); disp(acu)

b) Usando el método de newton rapson con una tolerancia de 1e-8% dfun1.m

Page 35: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

function [df]=dfun1(x) df=1/6*exp(x/3)-cos(x);

% raphson.m function[acu,raiz,it]=raphson(f,df,x,TOL)acu=[];for it=1:100

xn=x-feval(f,x)/feval(df,x); err=abs(xn-x); acu=[acu; xn err]; x=xn; if err<TOL break end

endraiz=xn;

Ejercicio 3: Solución de sistema no lineal

Método del punto fijo

function[H]=pto_fs(G,x0,tol,maxit)syms x1 x2 H=[0 x0' 1];for i=1:maxit x=subs(G,{x1 x2},{x0(1) x0(2)}); e=norm(x-x0,inf); H=[H; i,x' e]; if e<tol

Page 36: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

break end x0=x;end

clear allsyms x1 x2 G=[0.5*sin(x2); 0.25*exp(-x1)] x0=[0 0]'; maxit=50; tol=0.5e-3H=pto_fs(G,x0,tol,maxit); disp(' i x1 x2 error') fprintf('%4.0f %12.8f %16.8f %20.8e \n',H')

Ejemplo 4: Newton Raphson para sistemas

function [x,iter]=newton(f,fp,x0,tol,itermax) %NEWTON Método de Newton para sistemas no lineales % Los datos de entrada son% f: Nombre de la función que representa el sistema. % fp: Nombre de la función que calcula el Jacobiano. % x0: El punto inicial (vector columna).

Page 37: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

% tol: Tolerancia para el error relativo en la solución calculada% itermax: Número máximo de iteraciones que se repiten las iteracionesif nargin<4 tol=1.0e-4; endif nargin<5 itermax=20; end x=x0; normx=0;normz=inf; iter=0; while (normz>tol*normx)&(iter<=itermax) f0=feval(f,x); fp0=feval(fp,x); z=-fp0\f0; normz=norm(z,2); normx=norm(x,2); x=x+z; iter=iter+1;end

Ejemplo 5: para el siguiente sistema no lineal

2 x1−sen (x2 )=0

4 x2−exp (−x1 )=0

Definir F(x) y el jacobiano de F(x)

F ( x )=[ 2x1−sen (x2 )=04 x2−exp (− x1 )=0] für x=(x1 , x2)

F ' ( x )=[ 2−cos (x2 )exp (−x1 )4]

En matlab

function [y,J]=F(x)y=[2*x(1)-sin(x(2)); 4*x(2)-exp(-x(1))];J=[2, -cos(x(2)); exp(-x(1)), 4];

Para hacer un paso de newton usar la función:

Page 38: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

function y = newtonstep(x) [y,J] = F(x);dx = - J \ y;y = dx + x;

Para aplicar Newton al problema

clear all x0=[0 0]';maxit=50;tol=0.5e-3;H=[0 x0' 1];x=x0;for i=1:maxit y = newtonstep(x); e=norm(y-x,inf); H=[H; i y' e]; if e<tol break end x=y;enddisp(' i x1 x2 error')fprintf('%4.0f %12.8f %16.8f %20.8e \n',H')

Ejercicios resueltos (GUIA 5)

EJEMPLO 1

function [x ]= susdir(L ,b)ifany(any(tril(L)-L)), error(‘no es mat. triangular inferior’)else[n,m]=size(L); x=zeros(n,1);for k=1:n

Page 39: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

j= 1:k-1x(k)=(b(k)-L)

GAUSS SIN INTERCAMBIO DE FILAS

function [x]= gauss (A,b)n = length(b); for k = 1:(n-1) i = k+1:nm= A(i,k)/A(k,k)A(i,:) = A(i,:) - m*A(k,:); b(i)= b(i) - m*b(k); endx=zeros(n,1); for k = n:-1:1 x(k) = (b(k) - A(k,k+1:n)*x(k+1:n))/A(k,k);end

Ejercicios resueltos (Guía 6)

JACOBI

function [z,x,numite]=jacobi(A,b,TOL,MAXITE) D = diag(diag(A)); L = D - tril(A); U = D - triu(A); Tj = inv(D)*(L+U); x = zeros(size(b)); % Vector Inicial Cj = inv(D)*b; z = []; for i = 1:MAXITE xn = Tj*x+Cj; err = norm(xn-x,2); z = [z;xn‟ err]; x = xn; iferr<TOL breakendendnumite = i;

METODO DE LA POTENCIA

function [z,l,x]=potencia(A,x0,MAXITE,TOL) x=x0; z=[]; for i=1:MAXITE y=A*x;

Page 40: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

[m,p]=max(abs(y)); l=y(p); err=norm(y/l-x,2); x=y/l; z=[z;x' l]; iferr<TOL breakendend

Ejercicios resueltos

(Guía 7)

FUNCIONES DIVIDIDAS

function z=difdivididas(x,y)n=length(x);for j=1:nv(j,1)=y(j);endfprintf('Diferencia Divididas:\n\n');for i=2:nfor j=1:n+1-iv(j,i)=(v(j+1,i-1)-v(j,i-1))/(x(j+i-1)-x(j));fprintf(' %10.4f',v(j,i));endfprintf('\n\n');endfor i=1:nc(i)=v(1,i);endp=[y(1)];for j=2:n;q=poly(x([1:j-1]));p=[0,p]+c(j)*q ;end

Page 41: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

fprintf('El polinomio de Newton es:\n');z=p;

METODO DE INTERPOLACION DE LAGRANGE

function p = lagrange(x,y) n = length(x); p = zeros(1,n); for j=1:n q = poly(x([1:(j-1), (j+1):n])); L=q/polyval(q,x(j)); p = p + L*y(j); end

INTERPOLACION POR SPLINES

% ejmspl.mx=[0.9 1.3 1.9 2.1 2.6 3 3.9 4.4 4.7 5 6]; y=[1.3 1.5 1.85 2.1 2.6 2.7 2.4 2.15 2.05 2.1 2.25]; xx=0.9:0.01:6; yy=spline(x,y,xx); plot(x,y,'o',xx,yy) legend('data','spline')

Page 42: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM

FIGURA UNIENDO MEDIANTE SPLINES

% pruespl.mx=[0 1 2 3 3 2 2 2 3 3 3 2 1 0 0 1 2 2 1 0 0 0] y=[0 0 0 0 1 1 1.5 2 3 4 5 6 6 6 5 5 4.5 3.5 3 2.5 1 0] p=1:length(x); pp=1:0.01:length(x); xx=spline(p,x,pp); yy=spline(p,y,pp); plot(x,y,'o',xx,yy)

Page 43: métodos númericos (laboratorio problemas  guias).docx

Laboratorio de Métodos Numéricos FIEE-UNMSM