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'])
Suscribirse a:
Entradas (Atom)