Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
htm
MTODOS NUMRICOS
Teora, problemas y prcticas con
MATLAB
Juan-Antonio Infante Jos Mara Rey
function v=trsup(A,b)
% Prctica 4.2c: Resuelve el sistema Av=b donde A es una matriz
% triangular superior.
n=size(A,1);
v(n)=b(n)/A(n,n);
for i=n-1:-1:1
v(i)=(b(i)-A(i,i+1:n)*v(i+1:n)')/A(i,i);
end
function area=trapecios(a,b,m)
% Prctica 7.1: Regla de los trapecios.
global fname
fname=input('Dame la funcin f(x) entre comillas ');
if nargin < 1
a=input('Dame el extremo izquierdo del intervalo ');
b=input('Dame el extremo derecho del intervalo ');
end
if nargin < 3
m=input('Dame el nmero de subintervalos ');
end
h=(b-a)/m;
x=a:h:b;
sum=0;
for i=2:m
sum=sum+f(x(i));
end
area=(h/2)*(f(a)+f(b)+2*sum);
function area=simpson(a,b,m)
% Prctica 7.2: Regla de Simpson cerrada.
global fname
fname=input('Dame la funcin f(x) entre comillas ');
if nargin < 1
a=input('Dame el extremo izquierdo del intervalo ');
b=input('Dame el extremo derecho del intervalo ');
end
if nargin < 3
m=input('Dame el nmero de subintervalos ');
end
h=(b-a)/(2*m);
x=a:h:b;
sump=0;
for i=2:m
sump=sump+f(x(2*i-1));
end
sumi=0;
for i=1:m
sumi=sumi+f(x(2*i));
end
area=(h/3)*(f(a)+f(b)+2*sump+4*sumi);
function y=f(u) % Con este "truco" se puede pedir la funcin por
pantalla
global fname % (como "string") y, despus, evaluarla como si
fuera una
x=u; % funcin matemtica.
y=eval(fname);
% Lectura de datos
% Tengo que leer la cota de error 'cota', el nmero de iteraciones
mximo 'n'
% y el valor inicial 'xi'
xanterior = xi;
x = xanterior;
eanterior = inf;
e = eanterior;
i = 1; % contador de iteraciones
x = xanterior - y/yd;
% Para dibujar
yant=mifuncion(xanterior);
plot ([xanterior x],[yant 0],'r')
e = abs (x - xanterior);
xanterior = x;
eanterior = e;
i=i+1;
end
hold off
% Comprobacin de por cual de las dos (tres) condiciones sali
if (e<cota)
disp ('Se encontr la solucin');
disp ('La solucin hallada es: ');
x
disp ('La cota de error es: ');
e
disp ('El nmero de iteraciones utilizado es: ');
i
disp ('Y el valor de la funcin en dicho punto es: ');
mifuncion(x)
else
disp ('Se super el nmero de iteraciones');
end
function y = mifuncion (x)
y = x*x+0.5-exp(-x);
function y = mifuncion_derivada (x)
y = 2*x+exp(-x);
disp ('Solucin')
x = A\b
if det(A)==0
disp ('No es posible obtener la solucin');
else
for i=1:3
for j=1:3
for k=1:3
if j==i
d(k,j)=b(k,1);
else
d(k,j)=A(k,j);
end
end
end
detd=det(d);
xc(i,1)=detd/det(A)
end
end
% Peticin de datos
function y=funcion(t)
y=50*(exp(-t)+0.1*sin(10.*t))/5;
for j=n:-1:0
fprintf(1,'Coeficiente de x^%d : ',j);
coef(n-j+1)=input ('');
end
while 1
x = input ('Punto a evaluar: ');
if x == -999
break;
end
fprintf(1,'p(%f) = %f\n',x,polyval(coef,x));
end