CÁLCULO NUMÉRICO (521230)
LABORATORIO 2 - 2017-2
Programas en MATLAB
Contents
EJERCICIO 1
Escriba una función en MATLAB que para una entrada ejecute las siguientes tareas:
- Construya la matriz y el vector .
- Resuelva el sistema con el comando x = A\b
- Devuelva como salida el valor
function E = lab2_ejercicio1(n) A = diag(1:(n-1),1) + diag(1:(n-1),-1) + diag(n:-1:1); b = (1:n)./(n:-1:1); x = A\b; E = norm(A*x - b,2); end
A continuación se presenta una manera alternativas de definir el cuerpo de la función, utilizando el valor de referencia n = 5 y en formato rutero.
clc clear all n = 5; A = zeros(n); b = zeros(n,1); for i = 1:n-1 A(i,i) = n + 1 - i; %esto funciona como contador "al revés" A(i+1,i) = i; A(i,i+1) = i; b(i) = i/(n + 1 - i); end A(n,n) = 1; %como el ciclo for está diseñado para funcionar hasta (n-1,n-1), agregamos la última componente a mano b(n) = 1/n; %alternativamente, se puede hacer un ciclo for aparte para construir b disp('A = '), disp(A); disp('b = '), disp(b);
A = 5 1 0 0 0 1 4 2 0 0 0 2 3 3 0 0 0 3 2 4 0 0 0 4 1 b = 0.2000 0.5000 1.0000 2.0000 0.2000
EJERCICIO 2
Sea
Escriba una función mifuncion2 para evaluar en las componentes de un vector de entrada . Evalúe a en [0.188e-7, 0.189e-7, 0.19e-7].
function G = mifuncion2(x) for i = 1:length(x) if x(i) ~= 0 G(i) = (2*(sin(x(i)/2))^2)/x(i)^2; else G(i) = 0.5; end end end
x = [0.188e-7, 0.189e-7, 0.19e-7]; val = mifuncion2(x); disp(val)
0.5000 0.5000 0.5000
EJERCICIO 3
Escriba un programa MATLAB, tipo function, que para dados, genere la matriz y vector , cuyas componentes están dadas por primeros componentes de la sucesión convergente al número de Euler .
Luego, en un programa tipo rutero, llame a la función con y , resuelva el sistema y calcule , para , y .
function [M,b] = lab2_ejercicio3(m,n)
vm = m:-1:1; vn = n:-1:1;
Am = diag(vm); Am(1,:) = vm; Am(:,1) = vm; An = diag(vn); An(1,:) = vn; An(:,1) = vn;
Z = zeros(m,n);
M = [Am Z; Z' An];
b = zeros(m+n,1); for i = 1:(m+n) b(i) = (1 + 1/i)^i; end
end
clc clear all [M,b] = lab2_ejercicio3(4,6); x = M\b; Np = zeros(3,1); for p = [1,2,Inf] Np = norm(M*x - b,p); fprintf('||Mx - b||_%i = %e \n',p,Np); end
||Mx - b||_1 = 3.108624e-15 ||Mx - b||_2 = 1.332268e-15 ||Mx - b||_Inf = 8.881784e-16