;

Full width home advertisement

Tutoriales

Programación

Post Page Advertisement [Top]


         El método Gauss - Lengendre, es una regla  o cuadratura perteneciente a las formulas de Newton- Cotes para la integración numérica con limites cerrados. 
          El código implementado a continuación se divide en dos funciones:
  • La función “gaussleg”, esta función es la que recibe los parámetros con los cuales se van hacer los cálculos para generar la integración numérica.
  • La función “gauss”, es la función que genera las abscisas y pesos.
Función “Gaussleg”:  
function [anss,abs1,wgt1] = gaussleg(f,a,b,gp,varargin)
format long
graf=(f);
f = fcnchk(f,’vectorized’);                
if nargin < 4, gp = 106; end              % Default numbero de puntos Gauss.
[abs1, wgt1] = Gauss(gp);  
Alphas = ((b-a)./2).*(abs1+1)+a;                     % Mapeo f a [-1,1].
anss = sum(wgt1.*f(Alphas))*(b-a)/2;
if isnan(anss) | isinf(anss) 
   fprintf([‘\n\t Incrementando el numbero de puntos Gauss ‘…
            por 1 porque esta a NaN.\n’])
   [anss,abs1,wgt1] = gaussleg(f,a,b,gp+1);
end
h= (b-a) /gp;
x= a+ (0:gp)*h;
y=eval(graf);
plot(x,y,’b-‘);
 grid;
  title(‘Gauss Legendre’),
  xlabel(‘x’);
  ylabel(‘f(x)’);
Funcion Gauss: 
function [x, w] = Gauss(n)
% Genera las abscisas y pesos para la  Cuadratura Gauss-Legendre.
x = zeros(n,1);                                            
w = x;
m = (n+1)/2;
for ii=1:m
    z = cos(pi*(ii-.25)/(n+.5));                        % estimado Inicial.
    z1 = z+1;
while abs(z-z1)>eps
    p1 = 1;
    p2 = 0;
    for jj = 1:n
        p3 = p2;
        p2 = p1;
        p1 = ((2*jj-1)*z*p2-(jj-1)*p3)/jj;       % El polinomial. Legendre 
    end
    pp = n*(z*p1-p2)/(z^2-1);                        % La L.P. Derivada.
    z1 = z;
    z = z1-p1/pp;
end
    x(ii) = -z;                                   % Construye las abscissas.
    x(n+1-ii) = z;
    w(ii) = 2/((1-z^2)*(pp^2));                     % Construye  los pesos.
    w(n+1-ii) = w(ii);
end

9 comentarios:

  1. ¿Me podría decir que es ,gp y varargin Por favor?

    ResponderEliminar
  2. No entiendo muy bien como puedo usar este programa, cuando pongo en Gauss(n), n=2, me sale solo ans=0.574, Y luego para usar el otro programa, una vez usado Gauss y conectarlo con Función “Gaussleg”; no sé ni por donde empezar porque no conozco que es gp y varargin . Y no se como se usa varargin aquí.... Con mucha humildad, si me puedes ayudar porfvor ...

    ResponderEliminar
  3. he encontrado un algortimo de cuadratura gaussiana que es en dos variables independientes y que funciona aunque con margen de error para 5 puntos, el de function Gauss de esta página es más óptimo:

    Scipt1:
    function cuadraturadoble(f,a,b,c,d,n,m)
    %Paso 1
    h1=(b-a)/2;
    h2=(b+a)/2;
    J=0;
    A=coefraiz(m);
    B=coefraiz(n);

    %Paso 2
    for i=1:m
    %Paso 3
    JX=0;
    x=h1*A(i,2)+h2;
    d1=d(x);
    c1=c(x);
    k1=(d1-c1)/2;
    k2=(d1+c1)/2;

    %Paso 4
    for j=1:n
    y=k1*B(j,2)+k2;
    Q=f(x,y)
    JX=JX+B(j,1)*Q;
    end
    %Paso 5
    J=J+A(i,1)*k1*JX
    end
    %Paso 6 (SALIDA)
    J=h1*J
    end


    %Función para calcular coeficientes y raíces
    function[M]=coefraiz (q)
    syms x;
    raiz=double(vpasolve(legendreP(q,x)==0));
    for i=1:q
    f=1;
    for j=1:q
    if i~=j
    f=f*((x-raiz(j))/(raiz(i)-raiz(j)));
    end
    end
    coef(i)=double(int(f,-1,1));
    end
    M=[coef',raiz]
    end


    Comand Windows:
    >> f=@(x,y) exp(y-x)


    f =

    function_handle with value:

    @(x,y)exp(y-x)

    >> c=@(x) 0

    c =

    function_handle with value:

    @(x)0

    >> d=@(x) 0.5

    d =

    function_handle with value:

    @(x)0.5
    >> cuadraturadoble(f,0,0.5,c,d,4,4)
    M =
    0.3479 -0.8611
    0.6521 -0.3400
    0.6521 0.3400
    0.3479 0.8611


    M =
    0.3479 -0.8611
    0.6521 -0.3400
    0.6521 0.3400
    0.3479 0.8611


    Q = 1


    Q = 1.1392


    Q = 1.3502


    Q = 1.5381


    J = 0.2180


    Q = 0.8778


    Q = 1


    Q = 1.1853


    Q = 1.3502


    J =0.5767


    Q = 0.7406


    Q = 0.8437


    Q =1


    Q = 1.1392


    J = 0.8793
    Q = 0.6501


    Q = 0.7406


    Q = 0.8778


    Q = 1


    J = 1.0210


    J = 0.2553


    ResponderEliminar

Bottom Ad [Post Page]

| Designed by Colorlib