Vous êtes sur la page 1sur 12

EXPORT met_num()

BEGIN

LOCAL MENU;

CHOOSE(MENU," MÉTODOS NUMÉRICOS",

".>> Método de Taylor",

".>> Método Biseccion",

".>> Método de la falsa posición",

".>> Método de Newton Raphson",

".>> Método de la secante",

".>> Método de Muller",

".>> Método de Bairstow",

".>> Método de muller",

".>> REGRESION",

".>> Autor");

////METODO DE TAYLOR////

IF MENU == 1 THEN

LOCAL fx,xi,h,n,i,a,xin,x2;

LOCAL v1,v2,et,fx1,fr;

LOCAL fxi,fxn;

LOCAL der,fac;

INPUT({{fx,[8]},xi,xin,n});

h=EVAL(xin-xi);

X:=xi;

fxi:=EVAL(fx);

X:=xin;

fxn:=EVAL(fx);

et:=abs((fxn-fxi)/fxn)*100;

PRINT;

fx:=CAS.diff(fx,X);

fx1:=v1+fx*(xin-xi);

FOR i FROM 1 TO n+1 DO

fx:=CAS.diff(fx,X);

fr:=(fx*h^i)/i!;

fx:=fx1+fr;
a:=EVAL(fx);

PRINT("h=:"+h);

PRINT("Fx1=:"+fx1);

PRINT("fx:="+fx);

END;

END;

//////BISECCION///////

IF MENU==2 THEN

LOCAL Gx,Xini,FUNCf,xf,k,iter:=40;

LOCAL calculos,myf,Fx,error_max:=0.0001,FUNCg;

LOCAL error,itfn,a_ini,b_ini;

LOCAL af,bf,cf,fa,fb,fc;

LOCAL fx,n,s,r;

PRINT;

INPUT({{FUNCf,[8],{30,50,1}},{a_ini,[0],{30,20,2}},{b_ini,[0],{30,20,3}},{error_max,[0],{30,20,4}},{iter,[0],{30,20,5}}},"
Método Biseccion Newton Raphson",{"ƒ(x) =","a =","b =","error =","N° iter max ="},{"Ingrese la f(X) en funcion de
X","Escribir valor de a.","Escribir valor de b.","Presición por defecto 0.0001","Ingrese máxima cantidad de
iteraciones"});

Fx:=FUNCf;

myf:=MAKEMAT(0,iter+1,2);

calculos:=MAKEMAT(0,iter,5);

myf(1,1):=a_ini;

myf(1,2):=b_ini;

FOR k FROM 1 TO iter DO

cf:=(myf(k,1)+myf(k,2))/2;

X:=myf(k,1);

fa:=EVAL(Fx);

X:=myf(k,2);

fb:=EVAL(Fx);

X:=cf;

fc:=EVAL(Fx);

calculos(k,1):=myf(k,1);
calculos(k,2):=myf(k,2);

calculos(k,3):=cf;

calculos(k,4):=fc;

IF fa*fc<0 THEN

af:=myf(k,1);

bf:=cf;

ELSE

af:=cf;

bf:=myf(k,2);

END;

myf((k+1),1):=af;

myf((k+1),2):=bf;

IF ABS(fc)<error_max THEN

BREAK;

END;

itfn:=k;

END;

calculos:=REDIM(calculos,{itfn+1,4});

EDITMAT(calculos,{"Iteración Biseccion",{"1"},{"x0","x1","raiz = X","ƒ(X)"," "}});

print("========= Biseccion newton raphson ========");

print("");

print("f(x) = "+FUNCf);

print("");

print("Criterio de paro: ¦ f(x) ¦ < "+error_max);

print("");

print("Valor A: "+a_ini);

print("Valor B: "+b_ini);

print("");

print("");

print("El método halló la raíz X = "+cf);

print("");

print("presione ESC para volver a INICIO.......");

wait(-1);

ELSE
//////METODO DE LA FALSA POSICION///////

IF MENU==3 THEN

LOCAL Gx,Xini,FUNCf,xf,k,iter:=40;

LOCAL calculos,myf,Fx,error_max:=0.0001,FUNCg;

LOCAL error,itfn,a_ini,b_ini;

LOCAL af,bf,cf,fa,fb,fc;

PRINT;

INPUT({{FUNCf,[8],{30,50,1}},{a_ini,[0],{30,20,2}},{b_ini,[0],{30,20,3}},{error_max,[0],{30,20,4}},{iter,[0],{30,20,5}}},"
Método de la falsa posición",{"ƒ(x) =","a =","b =","error =","N° iter max ="},{"Ingrese la f(X) en funcion de X","Escribir
valor de a.","Escribir valor de b.","Presición por defecto 0.0001","Ingrese máxima cantidad de iteraciones"});

Fx:=FUNCf;

myf:=MAKEMAT(0,iter+1,2);

calculos:=MAKEMAT(0,iter,5);

myf(1,1):=a_ini;

myf(1,2):=b_ini;

FOR k FROM 1 TO iter DO

X:=myf(k,1);

fa:=EVAL(Fx);

X:=myf(k,2);

fb:=EVAL(Fx);

cf:=(fa*myf(k,2)-fb*myf(k,1))/(fa-fb);

X:=cf;

fc:=EVAL(Fx);

calculos(k,1):=myf(k,1);

calculos(k,2):=myf(k,2);

calculos(k,3):=cf;

calculos(k,4):=fc;

IF fa*fc<0 THEN

af:=myf(k,1);

bf:=cf;

ELSE

af:=cf;

bf:=myf(k,2);

END;

myf((k+1),1):=af;
myf((k+1),2):=bf;

IF ABS(fc)<error_max THEN

BREAK;

END;

itfn:=k;

END;

calculos:=REDIM(calculos,{itfn+1,4});

EDITMAT(calculos,{"Iteración Método de la falsa posición",{"1"},{"a","b","c = X","ƒ(X)"," "}});

print("======== Método de la falsa posición ========");

print("");

print("f(x) = "+FUNCf);

print("");

print("Criterio de paro: ¦ f(x) ¦ < "+error_max);

print("");

print("Valor A: "+a_ini);

print("Valor B: "+b_ini);

print("Extremo Fijo: B");

print("");

print("El método halló la raíz X = "+cf);

print("");

print("presione ESC para volver a INICIO.......");

wait(-1);

ELSE

////METODO DE NEWTON RAPHSON////

IF MENU==4 THEN

LOCAL dFx,Xini,FUNC,xf,Xresult,k,iter:=40;

LOCAL calculos,myf,Fx,yff,error_max:=0.0001,DIV;

LOCAL error,itfn;

PRINT;

INPUT({{FUNC,[8],{30,50,1}},{Xini,[0],{30,20,2}},{error_max,[0],{30,20,3}},{iter,[0],{30,20,5}}},"Método de
Newton",{"ƒ(x) =","Xo =","error =","N° iter max ="},{"Ingrese la f(X) en funcion de X","Ingrese valor xo inicial o aprox.
a la raiz","Presición por defecto 0.0001","Ingrese máxima cantidad de iteraciones"});

myf:=MAKEMAT(0,iter+1,2);

calculos:=MAKEMAT(0,iter,5);

myf(1,1):=Xini;
FOR k FROM 1 TO iter DO

X:=myf(k,1);

Fx:=FUNC;

dFx:=diff(FUNC,X);

DIV:=(Fx)/(dFx);

xf:=EVAL(myf(k,1)-DIV);

error:=ABS(myf(k,1)-xf);

calculos(k,1):=myf(k,1);

calculos(k,2):=EVAL(Fx);

calculos(k,3):=EVAL(dFx);

calculos(k,4):=xf;

calculos(k,5):=trunc(error,7);

myf((k+1),1):=xf;

itfn:=k;

IF ABS(EVAL(Fx))<error_max THEN

BREAK;

END;

END;

calculos:=REDIM(calculos,{itfn,5});

EDITMAT(calculos,{"Iteración Newton Raphson",{"1"},{"Xo","ƒ(Xo)","ƒ'(Xo)","raiz=X1","presicion"," "}});

print("======== Método de Newton Raphson =======");

print("");

print("f(x) = "+FUNC);

print("");

print("");

print("Criterio de paro: ¦ f(x) ¦ < "+error_max);

print("");

print("Valor inicial Xo = "+Xini);

print("");

print("");

print("El método halló la raíz X = "+xf);

print("");

print("presione ESC para volver a INICIO.......");

WAIT(-1);
ELSE

//////METODO DE LA SECANTE///////

IF MENU==5 THEN

LOCAL Gx,Xini,FUNCf,xf,k,iter:=40;

LOCAL calculos,myf,Fx,error_max:=0.0001,FUNCg;

LOCAL error,itfn,a_ini,b_ini;

LOCAL af,bf,cf,fa,fb,fc;

PRINT;

INPUT({{FUNCf,[8],{30,50,1}},{a_ini,[0],{30,20,2}},{b_ini,[0],{30,20,3}},{error_max,[0],{30,20,4}},{iter,[0],{30,20,5}}},"
Método de la secante",{"ƒ(x) =","a =","b =","error =","N° iter max ="},{"Ingrese la f(X) en funcion de X","Escribir valor
de a.","Escribir valor de b.","Presición por defecto 0.0001","Ingrese máxima cantidad de iteraciones"});

Fx:=FUNCf;

myf:=MAKEMAT(0,iter+1,2);

calculos:=MAKEMAT(0,iter,5);

myf(1,1):=a_ini;

myf(1,2):=b_ini;

FOR k FROM 1 TO iter DO

//cf:=(myf(k,1)+myf(k,2))/2;

X:=myf(k,1);

fa:=EVAL(Fx);

X:=myf(k,2);

fb:=EVAL(Fx);

cf:=myf(k,2)-(fb*(myf(k,2)-myf(k,1))/(fb-fa));

X:=cf;

fc:=EVAL(Fx);

calculos(k,1):=myf(k,1);

calculos(k,2):=myf(k,2);

calculos(k,3):=cf;

calculos(k,4):=fc;

myf((k+1),1):=myf(k,2);

myf((k+1),2):=cf;

IF ABS(fc)<error_max THEN

BREAK;

END;

itfn:=k;
END;

calculos:=REDIM(calculos,{itfn+1,4});

EDITMAT(calculos,{"Iteración Método de la secante",{"1"},{"a=X(n-1)","b=Xn","raiz=X","ƒ(X)"," "}});

print("=========== Método de la secante ==========");

print("");

print("f(x) = "+FUNCf);

print("");

print("Criterio de paro: ¦ f(x) ¦ < "+error_max);

print("");

print("Valor A: "+a_ini);

print("Valor B: "+b_ini);

print("");

print("");

print("El método halló la raíz X = "+cf);

print("");

print("presione ESC para volver a INICIO.......");

wait(-1);

ELSE

////METODO DE BULLEN////

IF MENU == 6 THEN

LOCAL fx,x0,x1,x2,x3,i,den;

LOCAL fx0,fx1,fx2,error,ERROR,r;

LOCAL h0,h1,e0,e1,a,b,c,discr;

PRINT;

INPUT({{fx,[8]},x0,x1,x2,ERROR});

i:=2;

r:=1;

REPEAT

X:=x0;

fx0:=EVAL(fx);

X:=x1;

fx1:=EVAL(fx);

X:=x2;

fx2:=EVAL(fx);
h0:=x1-x0;

h1:=x2-x1;

e0:=EVAL((fx0-fx1)/(x0-x1));

e1:=EVAL((fx2-fx1)/(x2-x1));

a:=EVAL((e1-e0)/(h1+h0));

b:=EVAL(a*h1+e1);

c:=fx2;

discr:=√(b^2−(4*a*c));

IF abs(b+discr)>abs(b-discr) THEN

den:=b+discr;

ELSE

den:=b-discr;

END;

x3:=x2+(−2*c)/den;

error:=abs(EVAL((x3-x2)/x3))*100;

x2:=x3;

Spreadsheet.Cell(1,1):="INTER";

Spreadsheet.Cell(1,2):="x0";

Spreadsheet.Cell(1,3):="x1";

Spreadsheet.Cell(1,4):="x2";

Spreadsheet.Cell(1,5):="x3";

Spreadsheet.Cell(1,6):="fx0";

Spreadsheet.Cell(1,7):="fx1";

Spreadsheet.Cell(1,9):="fx2";

Spreadsheet.Cell(1,9):="a";

Spreadsheet.Cell(1,10):="b";

Spreadsheet.Cell(1,11):="c";

Spreadsheet.Cell(i,1):=r;

Spreadsheet.Cell(i,2):=x0;

Spreadsheet.Cell(i,3):=x1;

Spreadsheet.Cell(i,4):=x2;

Spreadsheet.Cell(i,5):=x3;

Spreadsheet.Cell(i,6):=fx0;
Spreadsheet.Cell(i,7):=fx1;

Spreadsheet.Cell(i,8):=fx2;

Spreadsheet.Cell(i,9):=a;

Spreadsheet.Cell(i,10):=b;

Spreadsheet.Cell(i,11):=c;

STARTAPP("Spreadsheet");

i:=i+1;

r:=r+1;

PRINT("fx1="+fx1);

PRINT("fx2="+fx2);

PRINT("h0="+h0);

PRINT("h1="+h1);

PRINT("e0="+e0);

PRINT("e1="+e1);

PRINT("a="+a);

PRINT("b="+b);

PRINT("c="+c);

PRINT("la raiz aproximada es:= "+x3);

PRINT("el error es:="+error);

UNTIL error<ERROR ;

END;

////METODO DE BAISRTOW////

IF MENU == 7 THEN

LOCAL fx,a,n,r,s,sol,j,calc;

INPUT({{fx,[8]},n,r,s});

a:=CAS.coeff(fx);

sol:=CAS.proot(fx);

PRINT;

PRINT(a);

PRINT(sol);

END;
IF MENU == 8 THEN

LOCAL A,B,i,X,XF,X1;

INPUT(i);

A:=MAKEMAT(0,i,2);

EDITMAT(A);

B:=TRN(A);

X:=lagrange(B);

X1:=simplify(X);

PRINT();

PRINT("el polinomio de lagrangen es "+X1)

END;

///////AUTOR//////

IF MENU==9 THEN

DIMGROB_P(G7,320,240);

RECT(G7);

RECT_P(G7,0,0,320,240,RGB(0,255,255));

TEXTOUT_P("ING. CIVIL",G7,110,25,7,RGB(255,0,50),300);

TEXTOUT_P("ING. CIVIL",G7,112,27,7,RGB(0,0,255),300);

//TEXTOUT_P("HP PRIME PROGRAMACIÓN",G7,21,31,7,#1C1C1Ch,300);

//TEXTOUT_P("HP PRIME PROGRAMACIÓN",G7,20,30,7,#FFFFFFh,300);

TEXTOUT_P("MÉTODOS NUMÉRICOS",G7,47,62,7,#FFFFFFh,300);

TEXTOUT_P("MÉTODOS NUMÉRICOS",G7,45,60,7,#FF0080h,300);

TEXTOUT_P("DESARROLLADOR :",G7,10,110,1,#1C1C1Ch,300);

TEXTOUT_P("MARIO CESGO SOLIZ",G7,105,110,1,RGB(0,0,255),300);

TEXTOUT_P("Gmail :",G7,10,120,1,#1C1C1Ch,300);

TEXTOUT_P("mariocs855@gmail.com",G7,105,120,1,RGB(0,0,255),300);

//TEXTOUT_P("HP PRIME programar ",G7,105,130,1,#FFFFFFh,300);

//TEXTOUT_P(" El uso de nuestros programas es netamente en el ámbito ",G7,25,160,1,#1C1C1Ch,300);

//TEXTOUT_P(" académico, usarla para otros fines está prohibido.",G7,40,170,1,#1C1C1Ch,300);

//TEXTOUT_P("Se reservan derechos del autor",G7,80,190,1,#FFFFFFh,300);


//TEXTOUT_P("©",G7,230,185,3,#FFFFFFh,300);

//TEXTOUT_P("------------------",G7,88,205,3,#FFFFFFh,300);

TEXTOUT_P("✘",G7,300,220,5,#FF0040h,200);

BLIT_P(G0,G7);

WAIT(-1);

END;

END;

END;

END;

END;

END;

Vous aimerez peut-être aussi