MatLabMorena

miércoles, 27 de febrero de 2008

Metodo de la Biseccion

fprintf('\t\tmetodo de biseccion\n');
fun=input('ingrese la funcion:','s');
a=input('ingrese el punto inicial:');
b=input('ingrese el punto final:');
tol=input('ingrese la tolerancia:');
it=0;
x=a;
f_a=eval(fun);
x=b;
f_b=eval(fun);
if(f_a*f_b>0)
fprintf('\t\tEn este intervalo no hay raices\n');
fprintf('\t\tBuscar otro intervalo\n');
return
else
n=ceil(log((b-a)/tol)/log(2));
fprintf('\n=%10.6f\n',n);
fprintf(' it a b c f(a) f(b) f(c) abs(b-a)/2\n');
while 1
it=it+1;
c=(a+b)/2;
x=c;
f_c=eval(fun);
fprintf('%5.0f %10.9f %10.9f %10.9f %10.9f %10.9f %10.9f %10.9f\n',it,a,b,c,f_a,f_b,f_c,abs(b-a)/2);
if(abs(b-a)/2<=tol)
fprintf('n se satisface la tolerancia\n');
break end if(it>n)
fprintf('\numero de iteraciones excedido');
break
end
if(f_c*f_b<=0) a=c;
f_a=f_c;
else b=c;f_b=f_c;
end
end
fprintf('La raiz pedida es= %10.6f\n',c)
fprintf('La tolerancia es= %10.6f\n',abs(b-a)/2);
x=-100:0.1:100;
ezplot(fun),
grid on end


Ejemplo:

metodo de biseccion
ingrese la funcion:
3*x-2+exp(x)-x^2
ingrese el punto inicial:
0
ingrese el punto final:
1
ingrese la tolerancia:
10^(-5)

= 17.000000



n se satisface la tolerancia

La raiz pedida es= 0.257530

La tolerancia es= 0.000008

Metodo del Punto Fijo

function puntofijo
global fun
fprintf('Método del punto fijo:\n');
fun=input('Ingrese la función:\n','s');
x0=input('Ingrese el punto inicial:\n');
n=input('Ingrese el numero de iteraciones:\n');
it=0;
fprintf(' it x0 x1 x0-x1');
while(it it=it+1;
x=x0;
x1=eval(fun);
fprintf('\n%3.0f%15.10f%15.10f%15.10f\n',it,x0,x1,abs(x1-x0));
x0=x1;
end
fprintf('\n el punto fijo aproximado es=%10.6f\n',x1);
clf
hold on
ezplot('x');
ezplot fun
legend('y=x','fun')
hold off


Ejemplo:

Método del punto fijo:
Ingrese la función:
x^4+2*x^2-x-3
Ingrese el punto inicial:
1
Ingrese el numero de iteraciones:
10



el punto fijo aproximado es= 1.000000

Metodo de Newton Rapson

function newton
global fun dfun
fprintf('metodo de newton:\n');
fun=input('ingrese la funcion:\n','s');
x0=input('ingrese el punto inicial:\n');
tol=input('ingrese la tol:\n');
dfun=diff(fun);
it=0;
fprintf(' it x0 x1 x0-x1');
while(it<50) it="it+1;" x="x0;" x1="x0-(eval(fun)/eval(dfun));">fprintf('el procedimiento se completo satisfactoriamente:\n');
break
end
x0=x1;
end
fprintf('la raiz buscada es=%15.9f\n',x1);
ezplot(fun),grid on



Ejemplo:

metodo de newton:

ingrese la funcion:

exp(-x)-log(x)

ingrese el punto inicial:

1

ingrese la tol:

0.01

el procedimiento se completo satisfactoriamente:
la raiz buscada es= 1.309799389

Metodo de la Secante

function secante
global fun
fprintf('Metodo de la secante:\n');
fun=input('Ingrese la funcion:\n','s');
x0=input('Ingrese el primer punto inicial:\n');
x1=input('Ingrese el segundo punto inicial:\n');
tol=input('Ingrese la tol:\n');
it=0;
fprintf('it x0 x1 x2 x1-x2');
while(it<50) it="it+1;" x="x0;" f0="eval(fun);" x="x1;" f1="eval(fun);" x2="(x0*f1-x1*f0)/(f1-f0);"> fprintf('el procedimiento se completo satisfactoriamente:\n');
break
end
x0=x1;
x1=x2;
end
fprintf('la raiz buscada es=%15.9f\n',x2);
ezplot(fun),
grid on

Ejemplo:



Metodo de la secante:

Ingrese la funcion:

x^2+10*cos(x)

Ingrese el primer punto inicial:

1.5

Ingrese el segundo punto inicial:

2

Ingrese la tol:

10^(-5)

el procedimiento se completo satisfactoriamente:

la raiz buscada es= 1.968872938

Metodo de Falsa Posicion

function falsaposicion
global fun
fprintf('\n metodo de la falsa posicion\n');
fun=input('\nIngrese la funcion:\n','s');
x0=input('\nIngrese el valor inferior del intervalo\n');
x1=input('\nIngrese el valor superior del intervalo\n');
tol=input('\nIngrese la tolerancia\n')
fprintf('\n it x0 x1 x2 f0 f1 f2 abs(f2)\n');
f2=1;
it=0;
x=x0;
f0=eval(fun);
x=x1;
f1=eval(fun);
if(f0*f1>0)
fprintf('\n En este intervalo no hay raices\n');
fprintf('\n Buscar otro intervalo \n');
return
end
while abs(f2)>tol
it=it+1;
x2=(x0*f1-x1*f0)/(f1-f0);
x=x2;
f2=eval(fun);
fprintf('\n%3.0f%12.7f%12.7f%12.7f%12.7f%12.7f%12.7f%12.7f\n',it,x0,x1,x2,f0,f1,f2,abs(f2));
if(f0*f2<0) x1="x2;f1=" x0="x2;f0=" es =" %10.7f\n',x2);" face="arial" color="#cc0000">


Ejemplo:

metodo de la falsa posicion

Ingrese la funcion:
3*x-2+exp(x)-x^2

Ingrese el valor inferior del intervalo
0
Ingrese el valor superior del intervalo

1
Ingrese la tolerancia

10^(-5)
tol =
1.0000e-005

itx0x1x2f0f1f2abs(f2)
1 0.0000000 1.0000000 0.2689414 -1.0000000 2.7182818 0.0430733 0.0430733
2 0.0000000 0.2689414 0.2578356 -1.0000000 0.0430733 0.0011537 0.0011537
3 0.0000000 0.2578356 0.2575385
-1.0000000 0.0011537 0.0000310 0.0000310
4 0.0000000 0.2575385 0.2575305 -1.0000000 0.0000310 0.0000008 0.0000008


La raiz buscada es = 0.2575305

Metodo de Newton Modificado

function newtonmodificado
global fun dfun ddfun
fprintf('metodo de newtonmodificado:\n');
fun=input('ingrese la funcion:\n','s');
x0=input('ingrese el punto inicial:\n');
tol=input('ingrese la tolerancia:\n');
dfun=diff(fun);
ddfun=diff(diff(fun));
it=0;
fprintf('it x0 x1 x0-x1');
while(it<50) it="it+1;" x="x0;" x1="x0-((eval(fun)*eval(dfun))/((eval((dfun)^2))-(eval(fun)*eval(ddfun))));"> fprintf('el procedimiento se completo satisfactoriamente:\n');
break
end
x0=x1;
end
fprintf('la raiz buscada es =%15.9f\n',x1);
ezplot(fun),grid on


Ejemplo:


metodo de newtonmodificado:
ingrese la funcion:
exp(x)-x-1
ingrese el punto inicial:
0.5
ingrese la tolerancia:
10^(-5)







itx0x1x0-x1
1 0.500000000 -0.049299708 0.549299708
2 -0.049299708 -0.000398480 0.048901228
3 -0.000398480 -0.000000026 0.000398453
4 -0.000000026 -0.000000014 0.000000012



el procedimiento se completo satisfactoriamente:

la raiz buscada es = -0.000000014




domingo, 17 de febrero de 2008

Metodo de los Minimos Cuadrados

function correl
xi=input('ingrese los valores de xi:\n');
yi=input('ingreso los valores de yi:\n');
xm=input('ingreso un valor de x para analisar la pendiente:\n');
n=length(xi);
p=xi.';
q=yi.';
r=p.*q;
s=p.*p;
a1=sum(xi);
a2=sum(yi);
a3=sum(r);
a4=sum(s);
m=a2/n;
j=sum((yi-m).^2);
A=[a4 a1;a1 n];
B=[a3 a2];
X=inv(A)*(B');
l=X(1);r=X(2);
fprintf('\nLos coeficientes de la ecuacion son:\n')
fprintf(' a b\n')
fprintf('%8.8f%10.8f\n',l,r)
fun=input('\nLa funcion lineal es y=','s');
y=l*xi+r;
t=sum((yi-y).^2);
r2=1-(t/j);
z=(r2)^0.5;
m=diff(fun);
x=xm;
n=eval(m);
fprintf('\n El coeficiente de determinacion r^2=');
fprintf('%5.5f\n',r2);
if(n>0)
fprintf('\n El coeficiente de correlacion r=');
fprintf('%5.5f\n',z);
elsefprintf('\n El coeficiente de correlacion r=');
fprintf('%5.5f\n',-z);
end
hold on
ezplot(fun),grid on,
plot(xi,yi,'m.'),
hold off


Ejemplo: Funcion Lineal

ingrese los valores de xi:

[4 5 2 5 6 7 1 8 3 7]

ingreso los valores de yi:

[5 6 4 5 7 10 3 11 4 9]

ingreso un valor de x para analizar la pendiente:

2
Los coeficientes de la ecuacion son:

a b

1.13025210 0.97478992


La funcion lineal es y=1.13025210*x+0.97478992


El coeficiente de determinacion r^2=0.88900


El coeficiente de correlacion r=0.94287




function correlog2
xi=input('ingrese los valores de xi:\n');
yi=input('ingreso los valores de yi:\n');
n=length(xi);
p=log(-xi);
q=yi;
r=p.*q;
s=p.*p;
a1=sum(p);
a2=sum(q);
a3=sum(r);
a4=sum(s);
m=sum(yi)/n;
j=sum((yi-m).^2);
A=[a4 a1;a1 n];
B=[a3 a2];
X=inv(A)*(B');
l=X(1);r=X(2);
fprintf('\nLos coeficientes de la funcion son:\n')
fprintf(' a b\n')
fprintf('%8.12f%10.12f\n',l,r)
y=input('\nLa funcion logaritmica natural es y=','s');
h=l*log(-xi)+r;
z=sum((yi-h).^2);
r2=1-(z/j);
k=(r2)^0.5;
fprintf('\n El coeficiente de determinacion r^2=');
fprintf('%5.5f\n',r2);
fprintf('\n El coeficiente de correlacion r=');
fprintf('%5.5f\n',k);
hold on
ezplot(y),grid on,
plot(xi,yi,'m.'),
hold off