Implementación de Métodos Numéricos en Maxima: Ejercicios Resueltos

Clasificado en Informática

Escrito el en español con un tamaño de 2,77 KB

Interpolación de Lagrange: Grado 5 y 6 Nodos

Implementación de la fórmula de Lagrange para interpolación polinómica:

Lagrange(fu, nodos):=block(kill(L),
  n:length(nodos),
  L[i]:=product(if i=j then 1 else (x-nodos[j])/(nodos[i]-nodos[j]),j,1,n),
  casi:sum(fu(nodos[i])*L[i],i,1,n),
  expand(casi));

f(x):=x^5-3*x^4+x^2+x-7;
nodos:makelist(i,i,0,5,1);
Lagrange(f,nodos);

Interpolación con Nodos de Chebyshev

Comparativa entre nodos equiespaciados y nodos de Chebyshev para minimizar el error de interpolación:

f(x):=x+exp(cos(x));
a:2;b:10;n:5;
nodos_cheb:makelist((a+b)/2+(b-a)/2*cos((2*k-1)*%pi/(2*n)),k,1,n);
nodos_eq:[2, 4, 6, 8, 10];
Pcheb:Lagrange(f, nodos_cheb);
Peq:Lagrange(f, nodos_eq);
err_cheb:float(makelist(abs(f(t)-ev(Pcheb, x=t)), t, 2, 10, 0.1));
max_err_cheb:apply(max, err_cheb);

Cálculo de Raíz Quinta de una Matriz

Uso de autovalores y el polinomio de interpolación para funciones de matrices:

r(x):=x^(1/5);
nodosss:eigenvalues(M)[1];
PO:Lagrange(r, nodosss);
raizquinta:ratsimp(sum(coeff(PO,x,i)*M^^i,i,0,4));

Definición y Visualización de Funciones

Resolución de ecuaciones integrales y representación gráfica:

g(t):=sin(t)/(t^2+1);
h(x):=quad_qags(g(t),t,0,x)[1];
find_root(h(x)=1/4,x,0,3);
wxplot2d([h(x),1/4],[x,0,5]);

Cálculo de Raíz de Matriz (Interpolación)

Aplicación de interpolación para el cálculo de raíces cuadradas de matrices:

A:genmatrix(lambda([i,j], if i=j then 3 else 2),10,10);
po:Inter(sqrt,[21,1],[1,9]);
raizA:sum(coeff(po,x,i)*M^^i,i,0,5),expand;

Aproximación por Trapecio Compuesto

Cálculo de integrales definidas mediante la regla del trapecio con estimación de error:

trapecio(fu, a, b, n) := block(kill(x), h:(b-a)/n, ...);
T : trapecio(f, 0, 1, 10^5);
EA : abs(bfloat(l) - T);

Aproximación por Simpson Compuesto

Implementación de la regla de Simpson para mejorar la precisión en la integración numérica:

simpson (fu,a,b,m):= block (kill (x),h:(b-a)/(2*m),...);
m:50000;
simpson (f,0,1,m),bfloat;

Método de Montecarlo

Estimación de áreas mediante muestreo aleatorio:

dentro(x,y) := if f(x,y) < 0 then 1 else 0;
SU : sum(dentro(ran1(), ran2()), k, 1, 10^6);
A : areaRectangulo * SU / 10^6, numer;

Optimización y Búsqueda de Raíces

Uso de find_root para localizar ceros de la derivada y optimizar funciones:

fpprec : 100;
f(x) := exp(-x^2) * sin(x + sin(x));
df(x) := diff(f(x), x);
f1 : find_root(df(x), x, 0, 1);

Entradas relacionadas: