If you can't read please download the document
Upload
mark-sutton
View
219
Download
3
Embed Size (px)
DESCRIPTION
dsfd
Citation preview
*** 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 ( %er Meq Mid Mvi )
OVER 1DMATRIX? NcaseSIZEERR ( %er Meq Mid Mvi )
FLASHPTR XNUM ( %er Meq Mid Mvi )
FLASHPTR ARRAY2MATRIX ( %er Meq Mid Mvi )
FLASHPTR 2DMATRIX? caseSIZEERR ( %er Meq Mid Mvi )
FLASHPTR MATRIX2LIST ( %er Meq Mid {}vi )
3PICK LENCOMP ( %er Meq Mid {}vi #eq )
2DUPSWAP ( %er Meq Mid {}vi #eq #eq {}vi )
LENCOMP ( %er Meq Mid {}vi #eq #eq #vi )
#= ( %er Meq Mid {}vi #eq flag )
NcaseSIZEERR ( %er Meq Mid {}vi #eq )
DUP ( %er Meq Mid {}vi #eq #eq )
4PICK ( %er Meq Mid {}vi #eq #eq Mid )
LENCOMP ( %er Meq Mid {}vi #eq #eq #id )
#= ( %er Meq Mid {}vi #eq flag )
NcaseSIZEERR ( %er Meq Mid {}vi #eq )
3PICK
FLASHPTR MATRIX2LIST ( %er Meq Mid {}vi #eq {}id )
Check{}ID_SORT ( %er Meq Mid {}vi #eq {}id_SORT )
FLASHPTR COMPRIMext ( %er Meq Mid {}vi #eq {}id_SORT Meq )
5PICK
FLASHPTR LIDNText ( %er Meq Mid {}vi #eq {}id_SORT {}id_eq )
ROMPTR 0E8 016
EQUAL NcaseSIZEERR ( %er Meq Mid {}vi #eq )
3PICK {ID}->{LAM} 6UNROLL ( {}lam %er Meq Mid {}vi #eq )
OVER ( {}lam %er Meq Mid {}vi #eq {}vi )
INNERCOMP #6+ PICK ( {}lam %er Meq Mid {}vi #eq %X1 ... %Xn {}lam )
BIND ( {}lam %er Meq Mid {}vi #eq )
DUP UNCOERCE DUP %1+ TWO{}N 7UNROLL ( {%n %m} {}lam %er Meq Mid {}vi #eq )
NULLLAM BINT7 NDUPN DOBIND ( LAM7 LAM6 LAM5 LAM4 LAM3 LAM2 LAM1 )
CLEARLCD
1GETLAM #1+_ONE_DO (DO)
"Hallando derivadas\0Ade la funcin " INDEX@ #>$ &$ %1 DODISP
4GETLAMINDEX@ 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 &$BINT5 TRUE DISP_LINE
5GETLAM ( {}vf %abs FLASHPTR RCLEPS )
%> NOT ( {}vf flag )
;
UNTIL
4GETLAM
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' x- EQ 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)
ROLLRSWAP 'RRSWAP%-ISTOP@
LOOP
{}N
;