Codigos de Biseccion,PtoFijo y RegulaFalsi
Publicado por Negra (1 intervención) el 06/11/2011 21:49:30
Hola. Necesito ayuda con los códigos de los métodos de Biseccion, Punto Fijo y RegulaFalsi en Matlab. No me andan los códigos que hice de estos métodos. Si alguien los tiene y me los puede pasar me sería de gran utilidad. Sino, decirme si encuentran los errores en mis códigos (abajo los mando).
Muchas gracias!
Punto Fijo:
function p=pfijo(f,p0,tol,maxiter)
n=1;
err=100000;
p(1)=p0;
for n=1:maxiter;
p(n-1)=f(p(n));
err=abs(p(n)-p(n-1));
if err<tol
break;
end
if n==maxiter
p=('se ha excedido el número de iteraciones')
end
n
err
p
end
Bisección:
function r=biseccion(a,b,f,tol)
if f(a)*f(b)>0;
err=0;
r=('El intervalo no sirve, no hay cambio de signo entre a y b');
end
err=10000;
while err<tol;
xm=(a+b)/2;
if f(a)*f(xm)<0;
b=xm;
err=abs(b-a);
end
if f(b)*f(xm)<0;
a=xm;
err=abs(b-a);
end
if f(xm)==0;
err=0;
a=xm;
b=xm;
end
r=(a+b)/2;
end
Regula Falsi:
function x = regulafalsi(a,b,fun,maxiter)
fprintf(1, 'Método de la regula falsi\n');
fprintf(1,'\n');
n=1;
u=feval(fun,a);
v=feval(fun,b);
if sign(u)==sign(v)
disp('ERROR:la funcion debe cambiar signo en a,b');
break;
end;
for n=1:1:maxiter
c=a-(u*(b-a)/(v-u));
w=feval(fun,c);
fprintf(1, 'n= %i, c= %f, f(c)= %e \n',n, c,w);
if sign(u)==sign(w)
a = c; u=w;
else
b=c; v=w;
end
n=n+1
end;
x=c
Muchas gracias!
Punto Fijo:
function p=pfijo(f,p0,tol,maxiter)
n=1;
err=100000;
p(1)=p0;
for n=1:maxiter;
p(n-1)=f(p(n));
err=abs(p(n)-p(n-1));
if err<tol
break;
end
if n==maxiter
p=('se ha excedido el número de iteraciones')
end
n
err
p
end
Bisección:
function r=biseccion(a,b,f,tol)
if f(a)*f(b)>0;
err=0;
r=('El intervalo no sirve, no hay cambio de signo entre a y b');
end
err=10000;
while err<tol;
xm=(a+b)/2;
if f(a)*f(xm)<0;
b=xm;
err=abs(b-a);
end
if f(b)*f(xm)<0;
a=xm;
err=abs(b-a);
end
if f(xm)==0;
err=0;
a=xm;
b=xm;
end
r=(a+b)/2;
end
Regula Falsi:
function x = regulafalsi(a,b,fun,maxiter)
fprintf(1, 'Método de la regula falsi\n');
fprintf(1,'\n');
n=1;
u=feval(fun,a);
v=feval(fun,b);
if sign(u)==sign(v)
disp('ERROR:la funcion debe cambiar signo en a,b');
break;
end;
for n=1:1:maxiter
c=a-(u*(b-a)/(v-u));
w=feval(fun,c);
fprintf(1, 'n= %i, c= %f, f(c)= %e \n',n, c,w);
if sign(u)==sign(w)
a = c; u=w;
else
b=c; v=w;
end
n=n+1
end;
x=c
Valora esta pregunta
0