MSLV2 Código Fuente

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

;