TEMA 10..EXPOSICIÓN NO METALICOS AZUFRE, ACIDO SULFURICO Y BORATOS.pdf
Taller 10-14-ii
1. METODOS NUMERICOS 3006907
TALLER 10, SEMESTRE 02–2014
Tema: Programaci´on en Matlab
1. Considere la siguiente funci´on para aproximar la funci´on seno usando la serie de potencias:
function [sen, n] = senPot(x, tol)
% Calcula sen(x) usando la serie
% de potencias
sen = 0; t = x;
k = 1; n = 0;
while abs(t) > tol
sen = sen + t;
t = - x^2/((k+1)*(k+2))*t;
k = k+2; n = n+1;
end
end
(a) Modifique esta funci´on para incluir nmax, un n´umero m´aximo de iteraciones, como par´ametro de entrada.
(b) Modifique esta funci´on para obtener una funci´on cosPot que eval´ue el coseno.
(c) Eval´ue senPot para x = (4k +1)π/2 con k = 1,2,3,4,5,6,7,8 y observe los resultados.
(d) Modifique senPot para que desplace la entrada de tal manera que la serie se eval´ue siempre para un argumento entre 0
y π/2.
2. La siguiente funci´on eval´ua un polinomio p(x) = a0 +a1x+a2x2 +···+anxn para un argumento x empleando el m´etodo de
Horner para evaluar un polinomio:
p(x) = a0 +x·(a1 +x·(a2 +x·(a3 +···+(an−1 +x·an)···)))
function r = PoliEval (a,x)
% Entrada: a ... vector de coeficientes del polinomio p
% x ... argumento
% Salida: r ... p(x)
m = length(a);
r = a(1);
for j = 2:m
r = r * x + a(j);
end
end
Modifique esta funci´on para evaluar un polinomio en la forma que resulta directamente del m´etodo de interpolaci´on de
Newton, para nodos x0,x1,...,xn
p(x) = c0 +c1(x−x0)+c2(x−x0)(x−x1)+···+cn(x−x0)(x−x1)···(x−xn−1)
extendiendo el m´etodo de Horner apropiadamente:
p(x) = c0 +(x−x0)·(c1 +(x−x1)·(c2 +(x−x2)·(c3 +···+cn(x−xn−1)···))).
La funci´on tiene como par´ametros el vector c de coeficientes en orden cn,cn−1,...,c1,c0, el vector x de nodos, y el argumento
x:
y = PoliNewtonEval(c, xx, x)
3. Escriba una funci´on DivSintetica (p, c) que implemente la divisi´on del polinomio con vector de coeficientes p por
x−c. La funci´on retorna el vector q de coeficientes del polinomio cociente, y el residuo:
function [q, r] = DivSintetica(p, c)
Ayuda: Es similar a la regla de Horner.
2. 4. (a) Escriba una funci´on
dp = DPoli(p)
la cual dado el vector de coeficientes p de un polinomio, retorna el vector de coeficientes de su derivada.
(b) Generalice lo anterior a una funci´on
dnp = DnPoli(p,n)
que retorna la n-´esima derivada del polinomio.
5. Programe el m´etodo de Halley para estimar la soluci´on de una ecuaci´on f(x) = 0, cuya f´ormula de iteraci´on es
g(x) = x−
f(x)
f (x)
1−
f(x)f (x)
2(f (x))2
−1
.
Para este prop´osito, se recomienda modificar la rutina newton.m. La funci´on debe tener los argumentos de entrada y salida
que se especifican a continuaci´on:
[p,err,k,yp] = halley(f,df,df2,p0,delta,epsilon,max)
donde:
• f, df, df2 son la funci´on objetivo, su primera y segunda derivada respectivamente.
• p, err, k, yp, p0, delta, epsilon, max son como en la rutina newton.m
6. Programe el m´etodo de la secante para estimar la soluci´on de una ecuaci´on f(x) = 0, cuya f´ormula de iteraci´on es:
pn+1 = pn −
f(pn)(pn − pn−1)
f(pn)− f(pn−1)
Para este prop´osito, se recomienda modificar la rutina newton.m. La funci´on debe tener los argumentos de entrada y salida
que se especifican a continuaci´on:
[p,err,k,yp] = secante(f,p0,p1,delta,epsilon,max)
donde:
• p0, p1 son dos aproximaciones iniciales.
• p, err, k, yp, f, delta, epsilon, max son como en la rutina newton.m
7. El siguiente segmento en Matlab encuentra la soluci´on de un sistema de ecuaciones lineales triangular inferior Ax=b donde
L es la matriz triangular inferior de coeficientes y b es un vector columna. Haga las modificaciones necesarias para resolver
un sistema triangular superior con el mismo m´etodo.
n = length(b);
x = zeros(n,1);
for i = 1:n
x(i) = b(i)/L(i,i);
for j = i+1:n
b(j) = b(j) - L(j,i)*x(i);
end
end
8. Sustituya ??1?? y ??2?? apropiadamente para que la siguiente funci´on normaInf sea correcta:
function ninf = normaInf(v)
% Calcula la norma infinito del vector v .
% Entrada: - v:= vector.
% Salida: - ninf:= norma inf de v.
n = length(v);
ninf = 0;
for i=1:n
if ??1??
ninf = ??2??;
end
end
Modif´ıque esta funci´on para calcular la norma · 1.
2
3. 9. (a) Escriba una funci´on Matlab
b = esEDD(A)
la cual determina si la matriz cuadrada A dada es estrictamente diagonal dominante. D´e una primera soluci´on que s´olo
accese la matriz elemento por elemento, usando s´olo funciones b´asicas y necesariamente for ´o while.
(b) D´e una segunda soluci´on que no use lazos de ning´un tipo. Ayuda: Use la funci´on sum y all.
10. Escriba una funci´on Matlab
TJ = MatJacobi(A)
la cual dada para la matriz A regresa la matriz de iteraci´on del m´etodo de Jacobi.
11. El siguiente segmento de Matlab calcula los primeros k polinomios de Chebyshev usando la relaci´on de recurrencia: T0(x) =
1, T1(x) = x y para k = 2,3,4,..., se satisface la recurrencia
Tk(x) = 2xTk−1(x)−Tk−2(x).
T=zeros(k+1,k+1);
T(1,:) = [zeros(1,k) 1];
T(2,:) = [zeros(1,k-1) 1 0];
for i = 3:k+1
T(i,:)= conv([2 0], T(i-1,2:k+1)) - T(i-2,:);
end;
Escriba un segmento similar para calcular los primeros k polinomios de Legendre haciendo uso de la recurrencia correspon-
diente: P0(x) = 1, P1(x) = x,
Pn+1(x) = xPn(x)−
n2
4n2 −1
Pn−1(x).
12. Considere la funci´on:
function v = polyinterp (x, y, u)
% interpola el valor de la funcion en u a partir
% de los datos (xi,yi) en los vectores x, y,
% usando el m´etodo de Lagrange
n = length(x);
v = 0;
for k = 1:n
w = 1;
for j = [1:k-1 k+1:n]
w = (u-x(j))/(x(k)-x(j))*w;
end
v = v + w*y(k);
end
end
−0.5 0 0.5 1 1.5 2 2.5 3 3.5
−10
−5
0
5
10
15
20
25
(a) Modif´ıquela para que funcione vectorialmente, es decir, para un vector u retorna un vector v de valores interpolados
correspondientemente.
(b) Use la versi´on vectorial obtenida con un vector u suficientemente denso de nodos, y ´uselo para producir una gr´afica de
la interpolaci´on, con los datos iniciales resaltados (similar a la gr´afica mostrada).
13. (a) Escriba una funci´on
y = SplineEval (XX, S, x)
la cual eval´ua para el argumento x la spline c´ubica dada por la matriz S y con vector de nodos XX (S es la matriz que
regresan las funciones spline con argumentos XX y YY correspondiente). Para argumentos menores que el primer nodo
use la c´ubica del primer intervalo, y para argumentos mayores que el ´ultimo nodo use la c´ubica del ´ultimo intervalo.
3
4. (b) Haga las modificaciones necesaria para que eval´ue tambi´en la primera, segunda y tercera derivadas y devuela los cuatro
valores.
(c) Haga las modificaciones necesarias para que SplineEval funcione para un argumento x vectorial (componente a
componente).
14. Escriba una funci´on
function [a, b] = lsexp (X, Y)
que implemente el ajuste del modelo
y = beax
a los datos xi,yi en los vectores x,y de entrada, usando una transformaci´on (linealizaci´on) y la funci´on lsline (del curso) ´o
polyfit de Matlab para ajuste lineal de m´ınimos cuadrados.
15. La siguiente funciones Matlab implementan la regla de Simpson compuesta evitando el uso de lazos mediante el uso de
operaciones vectoriales (se asume que M es par):
function s = simprl2 (f, a, b, M)
% Entrada - f ... integrando
% - a y b ... limites de integracion
% - M ... numero de subintervalos
% Salida - s ... cuadratura
h = (b-a)/M;
x = a+h*(0:M);
y = f(x);
s = (h/3)*(y(1)+ 2*sum(y(2:M)) ...
+ 2*sum(y(2:2:M)) + y(M+1));
end
function s = simprl3 (f, a, b, M)
% Entrada - f ... integrando
% - a y b ... limites de integracion
% - M ... numero de subintervalos
% Salida - s ... suma de la regla de simpson
h = (b-a)/M;
x = a+h*(0:M); y = f(x);
fa = y(1:2:M-1);
fb = y(3:2:M+1);
fm = y(2:2:M);
ss = (h/3)*(fa+4*fm+fb);
s = sum (ss);
end
Escriba una funci´on Matlab que implemente la regla de Boole que funcione de manera similar a alguna de estas (evitando
lazos). Como comparaci´on, la regla de Simpson compuesta es
S(f,h) =
h
3
(f0 +4 f1 +2 f2 +4 f3 +2 f4 +···+2 fM−2 +4 fM−1 + fM)
con M par, mientras en la regla de Boole M es m´ultiplo de 4, y
B(f,h) =
2h
45
(7f0 +32 f1 +12f2 +32 f3 +14f4 +32 f5 +12f6 +32f7
+14 f8 +···+14fM−4 +32fM−3 +12fM−2 +32 fM−1 +7 fM).
16. Sistema de ecuaciones lineales tridiagonal. Escriba una funcion Matlab
function x = SolnTridiag (a, b, c)
para resolver un sistema tridiagonal:
b1 c1 0 ··· 0 0 0
a2 b2 c2 ··· 0 0 0
0 a3 b3 ··· 0 0 0
...
...
...
...
...
...
...
0 0 0 ··· bn−2 cn−2 0
0 0 0 ··· an−1 bn−1 cn−1
0 0 0 ··· 0 an bn
·
x1
x2
x3
...
xn−2
xn−1
xn
=
d1
d2
d3
...
dn−2
dn−1
dn
Siguiendo la notaci´on en la ecuaci´on, puede asunmir que los vectores a, b, c tienen la misma longitud, pero que el primer
elemento de a y el ´ultimo de c se ignoran. Use eliminaci´on gaussiana adaptada para este caso particular: un primer “barrido”
elimina los ai hacia abajo, y luego un barrido hacia arriba los ci.
4