Escolar Documentos
Profissional Documentos
Cultura Documentos
uses wincrt;
type coe=array [1..100] of real;
var seleccion,g,grado:integer;
coef:coe;
ind:real;
procedure MENU;
begin
writeln('----------OPCIONES----------');
writeln('');
writeln('
1) BISECCION');
writeln('
2) NEWTON');
writeln('
3) SECANTE');
writeln('
4) FALSA POSICION');
writeln('
5) SALIR...');
writeln('');
write('Escriba la opcin del metodo que desea utilizar o la opcion para
SALIR! ---> ');
end;
function RAIZ(grado:integer;coef:coe;ind,x:real):real;
var fact,term:coe;
i,f:integer;
result:real;
begin
result:=0;
for i:=grado downto 1 do
begin
fact[i]:=1;
for f:= 1 to i do
fact[i]:=fact[i]*x;
term[i]:=coef[i]*fact[i];
result:=result+term[i];
end;
RAIZ:=result+ind
end;
function DERIVADA(grado:integer;coef:coe;ind,x:real):real;
var fact,term:coe;
i,f:integer;
result:real;
begin
result:=0;
for i:=grado downto 1 do
begin
fact[i]:=i;
for f:= 1 to i-1 do
fact[i]:=fact[i]*x;
term[i]:=coef[i]*fact[i];
result:=result+term[i];
end;
DERIVADA:=result
end;
procedure POLINOMIO(grado:integer;coef:coe;ind:real);
begin
writeln('
----------------------------------');
if grado=1 then
writeln('----------- P(x) = ',coef[1]:0:2,'x + ',ind:0:2,' -----------')
else
if grado=2 then
writeln('----------- P(x) = ',coef[2]:0:2,'x^2 + ',coef[1]:0:2,'x + ',ind:0:2,'
-----------')
else
writeln('----------- P(x) = ',coef[3]:0:2,'x^3 + ',coef[2]:0:2,'x^2 +
',coef[1]:0:2,'x + ',ind:0:2,' -----------');
writeln('
----------------------------------');
end;
procedure BISECCION(grado:integer;coef:coe;ind:real);
var FP,FA,FB,tol,a,b,p:real;
i,iter:integer;
salir:boolean;
begin
writeln('
"METODO DE LA BISECCION"');
writeln('
');
writeln('Estimado usuario, en este mtodo usted deber igresar dos
extremos de un');
writeln('intervalo cerrado [a,b] en el cual, el polinomio P(x) est
definido y adems');
writeln('que P(a) y P(b) sean de signos diferentes...!!! ');
writeln('
');
write('Ingrese el extremo a del intervalo cerrado a=');
read(a);
FA:=RAIZ(grado,coef,ind,a);
writeln('
P(',a:0:2,')=',FA:0:2);
P(',b:0:2,')=',FB:0:2);
while FA*FB>=0 do
begin
writeln('Debe ingresar los extremos a y b de manera que P(a) y
P(b) sean de');
writeln('signos diferentes!!!');
write('Ingrese el extremo a del intervalo cerrado a=');
read(a);
FA:=RAIZ(grado,coef,ind,a);
writeln('
P(',a:0:2,')=',FA:0:2);
P(',b:0:2,')=',FB:0:2)
end;
write('Ingrese el nmero mximo de iteraciones ');
readln(iter);
write('Ingrese tolerancia ');
readln(tol);
clrscr;
writeln('-----------------------------------------------------------------------------');
writeln('n','An':12,'Bn':13,'Pn':16,'f(Pn)':18,'ERROR':13);
writeln('-----------------------------------------------------------------------------');
i:=1;
salir:=false;
while salir=false do
begin
p:=a+(b-a)/2;
FP:=RAIZ(grado,coef,ind,p);
if (FP=0) or (abs(b-a)/2<tol) or (i>iter) then
begin
salir:=true;
if i>iter then
begin
writeln('-----------------------------------------------------------------------------');
writeln;
writeln(' EL METODO FRACASO DESPUES DE ',iter,' ITERACIONES!!!!');
end
else
begin
writeln(i,a:15:9,b:15:9,p:15:9,FP:15:5,abs(b-a)/2:15:9);
writeln('-----------------------------------------------------------------------------');
writeln;
writeln(' LA SOLUCION APROXIMADA PARA LA FUNCION
POLINOMICA ES... X = ',p:0:9);
end
end
else
begin
writeln(i,a:15:9,b:15:9,p:15:9,FP:15:5,(b-a)/2:15:9);
i:=i+1;
if FA*FP>0 then
begin
a:=p;
FA:=FP
end
else b:=P;
end
end;
writeln;
end;
procedure NEWTON(grado:integer;coef:coe;ind:real);
var p,Po,tol,FPo,DerPo:real;
iter,i:integer;
salir:boolean;
begin
writeln('
"METODO DE NEWTON"');
writeln('');
write('Ingrese la aproximacion Po= s ');
readln(Po);
write('Ingrese iteraciones: ');
readln(iter);
write('Ingrese tolerancia: ');
readln(tol);
writeln;
salir:=false;
writeln('-----------------------------------------------------------------------------');
writeln('n
Po
Pn
f(Po)
ERROR');
writeln('-----------------------------------------------------------------------------');
i:=1;
while salir=false do
begin
FPo:=RAIZ(grado,coef,ind,Po);
DerPo:=DERIVADA(grado,coef,ind,Po);
p:=Po-(FPo/DerPo);
if (i>iter) or (abs(p-Po)<tol) then
begin
salir:=true;
if i>iter then
begin
writeln('-----------------------------------------------------------------------------');
writeln(' EL METODO FRACASO DESPUES DE ',iter,'
ITERACIONES!!!!');
end
else
begin
writeln(i,Po:15:9,p:15:9,FPo:15:9,abs(p-Po):15:9);
writeln('-----------------------------------------------------------------------------');
writeln;
writeln(' LA SOLUCION APROXIMADA PARA LA FUNCION
POLINOMICA ES... X = ',p:0:9)
end
end
else
begin
writeln(i,Po:15:9,p:15:9,FPo:15:9,abs(p-Po):15:9);
i:=i+1;
Po:=p;
end
end;
writeln;
end;
procedure SECANTE(grado:integer;coef:coe;ind:real);
var p,Po,P1,tol,Qo,Q1:real;
iter,i:integer;
salir:boolean;
begin
writeln('
"METODO DE LA SECANTE"');
writeln('');
write('Ingrese la primera aproximacion: ');
readln(Po);
write('Ingrese la segunda aproximacion: ');
readln(P1);
write('Ingrese iteraciones: ');
readln(iter);
write('Ingrese tolerancia: ');
readln(tol);
writeln;
salir:=false;
writeln('-----------------------------------------------------------------------------');
writeln('n
Po
P1
Pn
ERROR');
writeln('-----------------------------------------------------------------------------');
i:=2;
while salir=false do
begin
Qo:=RAIZ(grado,coef,ind,Po);
Q1:=RAIZ(grado,coef,ind,P1);
p:=P1-Q1*(P1-Po)/(Q1-Qo);
if (i>iter) or (abs(p-P1)<tol) then
begin
salir:=true;
if i>iter then
begin
writeln('-----------------------------------------------------------------------------');
writeln(' EL METODO FRACASO DESPUES DE ',iter,'
ITERACIONES!!!!');
end
else
begin
writeln(i,Po:15:9,P1:15:9,p:15:9,abs(p-P1):15:9);
writeln('-----------------------------------------------------------------------------');
writeln;
writeln(' LA SOLUCION APROXIMADA PARA LA FUNCION
POLINOMICA ES... X = ',p:0:9)
end
end
else
begin
writeln(i,Po:15:9,P1:15:9,p:15:9,abs(p-P1):15:9);
i:=i+1;
Po:=P1;
Qo:=Q1;
P1:=p;
Q1:=RAIZ(grado,coef,ind,p);
end
end;
writeln;
end;
procedure POSICION_FALSA(grado:integer;coef:coe;ind:real);
var p,Po,P1,tol,Qo,Q1,q:real;
iter,i:integer;
salir:boolean;
begin
writeln('
writeln('
');
writeln('Estimado usuario, en este mtodo usted deber ingresar dos
aproximaciones');
writeln('Po y P1 de manera que F(x) est definido en [Po,P1] y que
adems');
writeln('F(Po) y F(P1) sean de signos diferentes...!!! ');
writeln('
');
write('Ingrese la primera aproximacin Po=');
read(Po);
Qo:=RAIZ(grado,coef,ind,Po);
writeln('
F(',Po:0:2,')=',Qo:0:2);
F(',P1:0:2,')=',Q1:0:2);
while Qo*Q1>=0 do
begin
writeln('Debe ingresar las aproximaciones Po y P1 de manera
que');
writeln('F(Po) y F(P1) sean de signos opuestos!!!');
write('Ingrese la primera aproximacin Po=');
read(Po);
Qo:=RAIZ(grado,coef,ind,Po);
writeln('
F(',Po:0:2,')=',Qo:0:2);
F(',P1:0:2,')=',Q1:0:2);
end;
write('Ingrese iteraciones: ');
readln(iter);
write('Ingrese tolerancia: ');
readln(tol);
writeln;
salir:=false;
writeln('-----------------------------------------------------------------------------');
writeln('n
Po
P1
Pn
ERROR');
writeln('-----------------------------------------------------------------------------');
i:=2;
while salir=false do
begin
Qo:=RAIZ(grado,coef,ind,Po);
Q1:=RAIZ(grado,coef,ind,P1);
p:=P1-Q1*(P1-Po)/(Q1-Qo);
if (i>iter) or (abs(p-P1)<tol) then
begin
salir:=true;
if i>iter then
begin
writeln('-----------------------------------------------------------------------------');
writeln(' EL METODO FRACASO DESPUES DE ',iter,'
ITERACIONES!!!!');
end
else
begin
writeln(i,Po:15:9,P1:15:9,p:15:9,abs(p-P1):15:9);
writeln('-----------------------------------------------------------------------------');
writeln;
writeln(' LA SOLUCION APROXIMADA PARA LA FUNCION
POLINOMICA ES... X = ',p:0:9)
end
end
else
begin
writeln(i,Po:15:9,P1:15:9,p:15:9,abs(p-P1):15:9);
i:=i+1;
q:=RAIZ(grado,coef,ind,p);
if q*Q1<0 then
begin
Po:=P1;
Qo:=Q1
end;
P1:=p;
Q1:=q
end
end;
writeln;
end;
end;
until seleccion=5
end.