Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
FUNCIONES_MATLAB_ANALISIS_NUMERICO_BASICO.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
47.82 Кб
Скачать

4.3.10 Instrumentación computacional para calcular el determinante

function d=determinante(a)

%Determinante de una matriz cuadrada

%Mediante reducción a una matriz triangular

%El determinante es el producto de los pivotes

[n,m]=size(a);

if n~=m %La matriz debe ser cuadrada

d=0;

return

end

signo=1; %cambios de fila

d=1;

for e=1:n

[z, p]=max(abs(a(e:n,e))); %Pivoteo por filas

p=p+e-1;

t=a(e,e:n); %Intercambio de filas

a(e,e:n)=a(p,e:n);

a(p,e:n)=t;

if e~=p %Cambio de fila = cambio de signo

signo=signo*(-1);

end

if abs(a(e,e))<1.0e-10 %Divisor cercano a 0: matriz singular

d=0;

return;

end

d=d*a(e,e); %Multiplicación de pivotes

a(e,e:n)=a(e,e:n)/a(e,e); %Normalizar la fila e

for i=e+1:n %Reducir otras filas

a(i,e:n)=a(i,e:n)-a(i,e)*a(e,e:n);

end

end

d=d*signo;

4.5.2 Instrumentación computacional para sistemas singulares

function [x,a]=slin(a,b)

[n,m]=size(a);

z=max(max(a));

v=[n+1:m]; %Vector inicial de variables libres

a(1:n,m+1)=b; %Matriz aumentada

if n>m %Mas ecuaciones que variables

x=[ ];

a=[ ];

return;

end

a=a/z; %Estandarizar la matriz para reducir error

for e=1:n %Ciclo para n etapas

[z,p]=max(abs(a(e:n,e))); %Pivoteo por filas

p=p+e-1;

t=a(e,e:m+1); %Cambiar filas

a(e,e:m+1)=a(p,e:m+1);

a(p,e:m+1)=t;

if abs(a(e,e))<1.0e-10 %Sistema singular

v=[v, e]; %Agregar variable libre y continuar

else

a(e,e:m+1)=a(e,e:m+1)/a(e,e); %Normalizar la fila e

for i=1:n %Reducir otras filas

if i~=e

a(i,e:m+1)=a(i,e:m+1)-a(i,e)*a(e,e:m+1);

end

end

end

end

x=[ ];

if length(v)==0; %Sistema consistente. Solución única

x=a(1:n,m+1); %El vector X es la última columna de A

a(:,m+1)=[ ]; %Eliminar la última columna de A

return;

end

4.6.2 Instrumentación computacional del Método de Thomas

function x = tridiagonal(a, b, c, d)

n = length(d);

w(1) = b(1);

g(1) = d(1)/w(1);

for i = 2:n %Transformación matricial

w(i) = b(i) - a(i)*c(i-1)/w(i-1);

g(i) = (d(i) - a(i)*g(i-1))/w(i);

end

x(n) = g(n);

for i = n-1:-1:1 %Obtención de la solución

x(i) = g(i) - c(i)*x(i+1)/w(i);

end

5.1.2 Manejo computacional de la fórmula de Jacobi

function x = jacobi(a,b,x)

n=length(x);

t=x; % t es asignado con el vector X ingresado

for i=1:n

s=a(i,1:i-1)*t(1:i-1)+a(i,i+1:n)*t(i+1:n);

x(i) = (b(i) - s)/a(i,i);

end

5.1.4 Instrumentación computacional del método de Jacobi

function [x,k] = jacobim(a,b,x,e,m)

n=length(x);

for k=1:m

t=x;

for i=1:n

s=a(i,1:i-1)*t(1:i-1)+a(i,i+1:n)*t(i+1:n);

x(i) = (b(i) - s)/a(i,i);

end

if norm((x-t),inf)<e

return

end

end

x=[ ];

k=m;

5.2.2 Manejo computacional de la fórmula de Gauss-Seidel

function x = gaussseidel(a,b,x)

n=length(x);

for i=1:n

s=a(i,1:i-1)*x(1:i-1)+a(i,i+1:n)*x(i+1:n); %Usa el vector x actualizado

x(i) = (b(i) - s)/a(i,i);

end

5.2.3 Instrumentación computacional del método de Gauss-Seidel

function [x,k] = gaussseidelm(a,b,x,e,m)

n=length(x);

for k=1:m

t=x;

for i=1:n

s=a(i,1:i-1)*x(1:i-1)+a(i,i+1:n)*x(i+1:n);

x(i) = (b(i) - s)/a(i,i);

end

if norm((x-t),inf)<e

return

end

end

x=[ ];

k=m;

5.3.2 Manejo computacional de la fórmula de relajación

function x = relajacion(a,b,x,w)

n=length(x);

for i=1:n

s=a(i,1:n)*x(1:n); %Usa el vector x actualizado

x(i)=x(i)+w*(b(i)-s)/a(i,i);

end

5.7 Instrumentación del método de Jacobi con el radio espectral

function [x,k]=jacobie(a,b,e)

d=diag(diag(a));

l=tril(a)-d;

u=triu(a)-d;

T=-inv(d)*(l+u); %Matriz de transición

v=eig(T);

r=max(abs(v)); %Radio espectral

if r>=1

x=[ ];

k=r;

return;

end

x=[1; 1; 1];

for i=1:1000000000

xn=inv(d)*b-inv(d)*(l+u)*x;

if norm(x-xn,inf)<e

k=i;

return;

end

x=xn;

end

6.2.3 Instrumentación computacional del método de Lagrange

function p = lagrange(x, f, v)

n=length(x);

if nargin==2

syms t; %variable para construir el polinomio

else

t=v; %evaluar el polinomio con el valor dado

end

p=0;

for i=1:n

L=1;

for j=1:n

if i ~= j

L=L*(t-x(j))/(x(i)-x(j));

end

end

p=p+L*f(i); %entrega p(t) simbólico o el valor el valor interpolado

end

if nargin==2

p=expand(p); %simplificación algebraica (expandir factores)

end