The::Beastieux

Sangre de Bestia + Corazón de Pingüino | Un blog acerca de Linux, *BSD, Open Source, Software Libre, Programación …

Archivos en la Categoría: Scilab

Código Scilab – Método de la Secante



function y=f(x)
y=exp(-x^2)-x;
endfunction

function x = secante(x0,x1,tol)
j=2;
i=1;
x(1)=x0;
x(2)=x1;
ea(i)=100;
while abs(ea(i))>=tol
   x(j+1)=(x(j-1)*f(x(j))-x(j)*f(x(j-1)))/(f(x(j))-f(x(j-1)));
   ea(i+1)=abs((x(j+1)-x(j))/x(j+1))*100;
   j=j+1;
   i=i+1;     
end

printf(' i \t\t x(i) \t Error aprox (i) \n');
printf('%2d \t %11.7f \t \n',0,x(1));

for k=2:j;
    printf('%2d \t %11.7f \t %7.3f \n',k-1,x(k),ea(k-1));
end

endfunction

Código Scilab – Método de Iteración del Punto Fijo



function y=g(x)
y=(x^2-exp(x))/5;
endfunction

function x=puntofijo(x0,tol)
i=1;
ea(1)=100;
x(1)=x0;
while abs(ea(i))>=tol,
    x(i+1) = g(x(i));
    ea(i+1) = abs((x(i+1)-x(i))/x(i+1))*100;
    i=i+1;
end
printf(' i \t      X(i)       Error aprox (i) \n');
for j=1:i;
    printf('%2d \t %11.7f \t %7.3f \n',j-1,x(j),ea(j));
end
endfunction

Código Scilab – Método de la Regla Falsa



function y=f(x)
y=exp(-x)-log(x);
endfunction


function xr=reglafalsa(xai,xbi,tol)
i=1;
ea(1)=100;
if f(xai)*f(xbi) < 0
    xa(1)=xai;
    xb(1)=xbi;
    xr(1)=xa(1)-f(xa(1))*(xb(1)-xa(1))/(f(xb(1))-f(xa(1)));
    printf('It.              Xa           Xr            Xb            Error aprox \%\n');
    printf('%2d \t %11.7f \t %11.7f \t %11.7f \n',i,xa(i),xr(i),xb(i));
    while abs(ea(i))>=tol,
      if f(xa(i))*f(xr(i))< 0
         xa(i+1)=xa(i);
         xb(i+1)=xr(i);
      end
      if f(xa(i))*f(xr(i))> 0
         xa(1)=xr(i);
         xb(1)=xb(i);
	  end      
      xr(i+1)=xa(i+1)-f(xa(i+1))*(xb(i+1)-xa(i+1))/(f(xb(i+1))-f(xa(i+1)));
       ea(i+1)=abs((xr(i+1)-xr(i))/(xr(i+1)))*100;
      printf('%2d \t %11.7f \t %11.7f \t %11.7f \t %7.3f \n', i+1,xa(i+1),xr(i+1),xb(i+1),ea(i+1));
      i=i+1;
   end
else
   printf('No existe una raíz en ese intervalo');
end
endfunction

Código Scilab – Método de Newton-Raphson



function y=f(x)
y=exp(-x)-log(x);
endfunction

function y=df(x)
y=-exp(-x)-1/x;
endfunction

function x=newtonraphson(x0,tol);
i=1;
ea(1)=100;
x(1)=x0;
while abs(ea(i))>=tol;
    x(i+1)=x(i)-f(x(i))/df(x(i));
    ea(i+1)=abs((x(i+1)-x(i))/x(i+1)*100);
    i=i+1;
end
printf(' i  \t      X(i)      Error aprox (i) \n');
for j=1:i;
    printf('%2d \t %11.7f \t %7.3f \n',j-1,x(j),ea(j));
end
endfunction

Código Scilab – Método de la Bisección



function y=f(x)
y=exp(-x^2)-x;
endfunction


function xr=biseccion(xai,xbi,tol)
i=1;
ea(1)=100;
if f(xai)*f(xbi) < 0
    xa(1)=xai;
    xb(1)=xbi;
    xr(1)=(xa(1)+xb(1))/2;
    printf('It.\t\t Xa\t\t Xr\t\t Xb\t  Error  \n');
    printf('%2d \t %11.7f \t %11.7f \t %11.7f \n',i,xa(i),xr(i),xb(i));
    while abs(ea(i)) >= tol
      if f(xa(i))*f(xr(i))< 0
         xa(i+1)=xa(i);
         xb(i+1)=xr(i);
      end
      if f(xa(i))*f(xr(i))> 0
         xa(i+1)=xr(i);
         xb(i+1)=xb(i);
	  end      
      xr(i+1)=(xa(i+1)+xb(i+1))/2;
      ea(i+1)=abs((xr(i+1)-xr(i))/(xr(i+1))*100);
      printf('%2d \t %11.7f \t %11.7f \t %11.7f \t %7.3f \n',i+1,xa(i+1),xr(i+1),xb(i+1),ea(i+1));
      i=i+1;
   end
else
   printf('No existe una raíz en ese intervalo');
end
endfunction

Códigos de ecuaciones no lineales en Scilab


Al igual que en un par de post anteriores, donde publiqué los códigos de métodos de calculo de raices de ecuaciones no lineales en matlab, ahora los publico de nuevo, pero esta vez adaptados a Scilab:

Método de la Bisección: biseccion(inicio,fin,%error);

Método de la Regla Falsa: reglafalsa(inicio,fin,%error);

Método de Newton-Raphson: newtonraphson(inicio,%erro);

Método de la Secante: secante(inicio,fin,%error);

Método de Iteración del Punto Fijo: puntofijo(inicio,%error);

Pueden guiarse viendo el ejemplo de ejecución del código del método de la bisección:

Códigos de ecuaciones no lineales en Scilab

Para ejecutar el programa,  guardar el código editado con SciPad como ‘biseccion’,  ejecutarlo (control + l) y llamar a la función desde el Scilex:

scilab biseccion 2 por ti.

Nota: Los códigos vienen establecido con una ecuación por defecto en la función f, df (derivada de f) y g. Pueden modificar la ecuación por el que deseen analizar.

A %d blogueros les gusta esto: