Você está na página 1de 4

*** Cdigo fuente de la biblioteca MSLV2 para resolver sistemas no lineales para

*** ecuaciones con nmeros reales en calculadoras HP49g, HP48gII, HP49G+ y HP50G.
*** Esto ha sido escrito para Debug 4x.
xNAME MSLV2
:: CK4&Dispatch
# 4441
:: RunSafeFlags
:: ' MSLV2_2
TOTEMPOB
FLASHPTR CASFLAGEVAL
;
;
;
NULLNAME MSLV2_2
::
BINT72 SetSysFlag
DUP %1 %< OVER %0> AND NcaseSIZEERR
4UNROLL
( %er Meq

Mid

Mvi )

3PICK 1DMATRIX? NcaseSIZEERR


OVER 1DMATRIX? NcaseSIZEERR

( %er Meq
( %er Meq

Mid
Mid

Mvi )
Mvi )

FLASHPTR
FLASHPTR
FLASHPTR
FLASHPTR

(
(
(
(

Mid
Mid
Mid
Mid

Mvi )
Mvi )
Mvi )
{}vi )

XNUM
ARRAY2MATRIX
2DMATRIX? caseSIZEERR
MATRIX2LIST

3PICK LENCOMP
2DUPSWAP
LENCOMP
#=
NcaseSIZEERR
DUP
4PICK
LENCOMP
#=
NcaseSIZEERR

(
(
(
(
(
(
(
(
(
(

%er
%er
%er
%er
%er
%er
%er
%er
%er
%er

3PICK
FLASHPTR MATRIX2LIST
Check{}ID_SORT
FLASHPTR COMPRIMext
5PICK
FLASHPTR LIDNText
ROMPTR 0E8 016
EQUAL NcaseSIZEERR

Meq
Meq
Meq
Meq
Meq
Meq
Meq
Meq
Meq
Meq

3PICK {ID}->{LAM} 6UNROLL


OVER
INNERCOMP #6+ PICK
BIND

%er
%er
%er
%er

Mid
Mid
Mid
Mid
Mid
Mid
Mid
Mid
Mid
Mid

Meq
Meq
Meq
Meq

{}vi
{}vi
{}vi
{}vi
{}vi
{}vi
{}vi
{}vi
{}vi
{}vi

#eq
#eq
#eq
#eq
#eq
#eq
#eq
#eq
#eq
#eq

)
#eq {}vi )
#eq #vi )
flag )
)
#eq )
#eq Mid )
#eq #id )
flag )
)

( %er Meq
( %er Meq
( %er Meq

Mid
Mid
Mid

{}vi #eq {}id )


{}vi #eq {}id_SORT )
{}vi #eq {}id_SORT Meq )

( %er Meq

Mid

{}vi #eq {}id_SORT {}id_eq )

( %er Meq

Mid

{}vi #eq )

(
(
(
(

{}lam
{}lam
{}lam
{}lam

%er
%er
%er
%er

DUP UNCOERCE DUP %1+ TWO{}N 7UNROLL


NULLLAM BINT7 NDUPN DOBIND

Meq
Meq
Meq
Meq

Mid
Mid
Mid
Mid

{}vi
{}vi
{}vi
{}vi

#eq
#eq
#eq
#eq

)
{}vi )
%X1 ... %Xn {}lam )
)

( {%n %m} {}lam %er Meq Mid {}vi


( LAM7
LAM6 LAM5 LAM4 LAM3 LAM2

#eq )
LAM1 )

CLEARLCD
1GETLAM #1+_ONE_DO (DO)
"Hallando derivadas\0Ade la funcin " INDEX@ #>$ &$ %1 DODISP
4GETLAM
INDEX@ NTHCOMPDROP ( symb_Eq_i )
3GETLAM ( symb_Eq_i Mid )
FLASHPTR DERIVext ( VECTOR MATRICIAL DERIVADAS DE Fi RESPECTO A TODAS LAS VARIABLES )
"Reemplazando y simplificando\0Aderivadas de la funcin " INDEX@ #>$ &$ %1 DODISP
INNERCOMP
DUP ZERO_DO (DO)
ROLL
SYMB_ID->::_LAM
ISTOP@
LOOP
DROP
4GETLAM INDEX@ NTHCOMPDROP
SYMB_ID->::_LAM
LOOP
1GETLAM DUP#1+ #* {}N ( {}::deriv )
1PUTLAM
"FOROACTIVO dice:\0A\0AVariables y Error relativo:" %1 DODISP
( {%n %m} {}lam %er Meq
{}id {}vi {}::deriv )
( LAM7
LAM6 LAM5 LAM4 LAM3 LAM2 LAM1
)
2GETLAM ( {}vi )
BEGIN
?ATTNQUIT ( {}vi )
1GETLAM ( {}vi {}::deriv )
INNERCOMP
DUP ZERO_DO (DO)
ROLL EVAL ISTOP@
LOOP
DROP 7GETLAM FLASHPTR XEQ>ARRY ( {}vi ARRY_aumentado )
FLASHPTR 3 4F
!MATTRNnc
FLASHPTR ArryToList
FLASHPTR LASTCOMP ( {}vi {}delta )
OVERSWAP
{%}- ( {}vi {}vf )
DUP
6GETLAM STO{}
( {}vi {}vf )
DUP {%}NORMA
( {}vi {}vf %vf )
ROT {%}NORMA
( {}vf %vf %vi )
2DUP %= ITE
:: 2DROP%0_ 2PUTLAM TRUE ;
:: SWAP
( {}vf %vi %vf )
( DUP %0= IT SWAP )
%/ %1- %ABS ( {}vf %abs ) DUP 2PUTLAM
OVER DO>STR "\0A" &$
OVER DO>STR &$
5GETLAM ( {}vf %abs FLASHPTR RCLEPS )
%> NOT ( {}vf flag )
;
UNTIL
4GETLAM

BINT5 TRUE DISP_LINE

3GETLAM
ROT FLASHPTR LIST2MATRIX
2GETLAM
ABND
ABND
SetDA1Temp
;
*** DEVUELVE LA NORMA DE UN VECTOR: RAIZ(a1^2+a1^2+...+an^2)
*** PERO EL VECTOR DEBE ESTAR COMO LISTA O COMO VECTOR SIMBOLICO, NO ARRAY
NULLNAME {%}NORMA ( {} -> % )
::
INNERCOMP
%0
SWAP ZERO_DO (DO)
SWAP %SQ_ %+
LOOP
%SQRT
;
*** CONVIERTE UNA LISTA DE NOMBRES GLOBALES A LISTA DE NOMBRES LOCALES
NULLNAME {ID}->{LAM} ( {ID}/Mid -> {LAM} )
:: INNERCOMP
DUP ZERO_DO (DO)
ROLL
ID>LAM_
ISTOP@
LOOP
{}N
;
*** GUARDA LOS OBJETOS DE LA LISTA {ob}
*** EN LOS NOMBRES GLOBALES O LOCALES DE LA LISTA {id/lam}
NULLNAME STO{} ( {ob} {id/lam} -> )
::
toLEN_DO (DO)
OVERINDEX@ NTHCOMPDROP
OVERINDEX@ NTHCOMPDROP
STO
LOOP
2DROP
;
*** CONVIERTE UN OBJETO ALGEBRAICO EN UN PROGRAMA
*** PARA AUMENTAR LA RAPIDEZ DE LOS CALCULOS
NULLNAME SYMB_ID->::_LAM ( symbx-> symb% )
:: INNERCOMP
DUP ZERO_DO (DO)
ROLL
:: DUP' x+
EQ case :: DROP' %+ ;
DUP' x*
EQ case :: DROP' %* ;
DUP' x/
EQ case :: DROP' %/ ;
DUP' xEQ case :: DROP' %- ;
DUP' x^
EQ case :: DROP' %^ ;
DUP' xNEG EQ case :: DROP' %CHS ;
DUP' xSQ
EQ case :: DROP' :: DUP %* ; ;

DUP' xSQRT EQ case :: DROP' %SQRT ;


DUP' xEXP EQ case :: DROP' %EXP ;
DUP' xLN
EQ case :: DROP' %LN ;
DUP' xLOG EQ case :: DROP' %LOG ;
DUP' xSIN EQ case :: DROP' %SIN ;
DUP' xCOS EQ case :: DROP' %COS ;
DUP' xTAN EQ case :: DROP' %TAN ;
DUPTYPEIDNT? case ID>LAM_
DUPTYPEREAL? case NOP
DUPTYPEZINT? case FLASHPTR Z>R
DUP' xABS EQ case :: DROP' %ABS ;
DUP' xSIGN EQ case :: DROP' %SGN ;
DUP' x=
EQ case :: DROP' %- ;
DUP' xPI
EQ case :: DROP' %PI ;
DUP' xCONSTANTe EQ case :: DROP' %e ;
DUP' xMINR EQ case :: DROP' %MINREAL ;
DUP' xMAXR EQ case :: DROP' %MAXREAL ;
DUPTYPESYMB? caseSIZEERR
DUP' ROMPTR x\9F EQUAL caseSIZEERR
;
ISTOP@
LOOP
::N
;
*** TEST PARA UNA FORMACION
*** TRUE PARA MATRIZ DE UNA DIMENSION
*** FALSE PARA MATRIZ DE 2 DIMENSIONES
*** FALSE PARA ARRAYS
NULLNAME 1DMATRIX? ( ob -> flag )
:: FLASHPTR 2DMATRIX? NOT SWAP TYPEMATRIX?_ AND ;
*** VERIFICA QUE TODOS LOS ELEMENTOS DE UNA LISTA SEAN NOMBRES GLOBALES
*** SI NO SE CUMPLE ENTONCES MANDA MENSAJE DE ERROR Y CIERRA EL PROGRAMA
*** SI SE CUMPLE ENTONCES ORDENA LOS NOMBRES GLOBALES EN ORDEN ALFABETICO
NULLNAME Check{}ID_SORT ( {} -> {}IDsort )
:: DUPINCOMP
ZERO_DO (DO)
TYPEIDNT? NcaseSIZEERR
LOOP
( {} )
ROMPTR 0E8 016 ( {}IDsort )
;
*** RESTA LOS ELEMENTOS DE DOS LISTAS DEL MISMO TAMAO
*** QUE CONTENGAN NUMEROS REALES
NULLNAME {%}- ( {} {} -> {} )
:: >R
INNERDUP ZERO_DO (DO)
ROLL RSWAP 'R
RSWAP %ISTOP@
LOOP
{}N
;

Você também pode gostar