Mostrando entradas con la etiqueta matlab. Mostrar todas las entradas
Mostrando entradas con la etiqueta matlab. Mostrar todas las entradas

miércoles, 18 de enero de 2012

Newton Raphson como función en Matlab


function x=newtonraphson(fun,dfun,x0,tol,maxit)


k=0;
corr=tol+1;


while abs(corr)>tol & k<maxit
    
    k=k+1;
    fx0=feval(fun,x0);
    dfx0=feval(dfun,x0);
    if dfx0==0
        error('la derivada se anula')
    end
    corr=fx0/dfx0;
    x=x0-corr;
    x0=x;
end

Newton Raphson en Matlab


%newton raphson
limpiar
fun=input('Ingresa la f(x) entre comillas: ');
f=inline(fun);
df=input('Ingresa la derivada de la función entre comillas: ');
df=inline(df);
x=input('Ingresa el x0: ');
tol=input('Ingresa la tolerancia: ')
i=1;
x(i)=x;
corr=tol+1;
k=0;
maxit=10;


while k<maxit & abs(corr)>tol
    fx=feval(f,x(i));
    dfx=feval(df,x(i));
    corr=fx/dfx;
    x(i+1)=x(i)-corr;
    i=i+1;
end


fprintf('iter   resultado \n')
for j=1:i
fprintf('%d  \t %10.5f \n',(j-1),x(j))
end


if abs(b-a)>tol
    error('Se alcanzó el número máximo de iteraciones')
end

Simpson 1/3 en Matlab


%regla de simpson 1/3
clear all; close all; clc
fun=input('Ingresa la función f(x) entre comillas: ');
f=inline(fun);
n=1;
while mod(n,2)~=0
    n=input('Ingrese el número de subintervalos: ');
    if mod(n,2)~=0
        disp('El número de subintervalos debe ser par, pulse una tecla para continuar')
        pause
    end
end
a=input('Ingrese el límite inferior de la integral: ');
b=input('Ingrese el límite superior de la integral: ');


h=(b-a)/n;


sumai=0;
sumap=0;


for i=1:2:n-1
    sumai=sumai+feval(f,h*i+a);
end
for i=2:2:n-2
    sumap=sumap+feval(f,h*i+a);
end


int=(h/3)*(feval(f,a)+4*sumai+2*sumap+feval(f,b));


disp(['El resultado de la integral es ' num2str(int)])

Runge Kutta 44 en Matlab


clear all;close all;clc
fun=input('Ingresa la función f(t,y) entre comillas: ');
f=inline(fun,'t','y');
y(1)=input('Ingrese la condición inicial y(0): ');
t0=input('Ingrese t0: ');
max=input('Ingrese el t final: ');
h=input('Ingrese el paso: ');
t=t0:h:max;
n=length(t);


for i=1:n-1
    
    k1=feval(f,t(i),y(i));
    k2=feval(f,t(i)+h/2,y(i)+h*k1/2);
    k3=feval(f,t(i)+h/2,y(i)+h*k2/2);
    k4=feval(f,t(i)+h,y(i)+h*k3);
    
    y(i+1)=y(i)+h/6*(k1+2*k2+2*k3+k4);
    
end


plot(t,y)

Euler explícito en Matlab


clear all;close all;clc
fun=input('Ingresa la función f(t,y) entre comillas: ');
f=inline(fun,'t','y');
y(1)=input('Ingrese la condición inicial y(0): ');
t0=input('Ingrese t0: ');
max=input('Ingrese el t máximo: ');
h=input('Ingrese el paso: ');
t=t0:h:max;
n=length(t);


for i=1:n-1
    y(i+1)=y(i)+h*feval(f,t(i),y(i));
end


plot(t,y)

martes, 17 de enero de 2012

Newton Raphson Multivariable



Si quieren que el usuario ingrese las funciones, jacobiana, tolerancia, etc. deben ocupar el comando input.


%newton raphson multivariable

clear all; close all; clc;

%funciones  x^2+x*y+y^2-1=0
%           x^2-y=0
f=inline('[x(1)^2+x(1)*x(2)+x(2)^2-1; x(2)-x(1)^2]');
df=inline('[2*x(1)+x(2) x(1)+2*x(2); -2*x(1) 1]');

%punto de partida para x e y
x0=[1;1];

%iteraciones máximas
maxi=10;

%tolerancia
tol=1.e-12;

corr=tol+1;
k=0;

while k<=maxi & norm(corr,inf)>tol
    
    fx0=feval(f,x0);
    dfx0=feval(df,x0);
    corr=dfx0\fx0;
    x=x0-corr;
    x0=x;
    k=k+1;
end

disp('la solución es')
disp(x)

if norm(corr,inf)>tol
    error('Se alcanzó el número máximo de iteraciones')
end

disp(['se calculo en ' num2str(k) ' iteraciones'])

Bisección en Matlab


%bisección
clear all; close all; clc;
fun=input('Ingrese la función f(x) entre comillas: ');
f=inline(fun);
a=input('Ingrese el límite inferior del intervalo: ');
b=input('Ingrese el límite superior del intervalo: ');
tol=input('Ingrese la tolerancia: ');
maxit=input('Ingrese el máximo de iteraciones: ');


fa=feval(f,a);
fb=feval(f,b);
k=0;


if fa*fb>0
    error('la función tiene el mismo signo en ambos extremos')
end


while abs(b-a)>tol & k<maxit
    if fa*fb==0
        
        if fa==0
            s=a;
            break
        else
            s=b;
            break
        end
        
    else
        
        k=k+1;
        s=(a+b)/2;
        fs=feval(f,s);
        if fa*fs<0
            b=s;
            fb=feval(f,b);
        else
            a=s;
            fb=feval(f,a);
        end
    end
end


disp('la solución es')
disp(s)


if abs(b-a)>tol
    error('Se alcanzó el número máximo de iteraciones')
end


disp(['se calculo en ' num2str(k) ' iteraciones'])