~ubuntu-branches/debian/squeeze/maxima/squeeze

« back to all changes in this revision

Viewing changes to share/simplification/elim.mac

  • Committer: Bazaar Package Importer
  • Author(s): Camm Maguire
  • Date: 2006-10-18 14:52:42 UTC
  • mto: (1.1.5 upstream)
  • mto: This revision was merged to the branch mainline in revision 4.
  • Revision ID: james.westby@ubuntu.com-20061018145242-vzyrm5hmxr8kiosf
ImportĀ upstreamĀ versionĀ 5.10.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
ELIMINATE(EQNS,VARS):=BLOCK([TEQNS,SV,SE,L,FLAG,DISPFLAG],
2
 
        MODEDECLARE([L,I],fixnum,FLAG,BOOLEAN),FLAG:DISPFLAG:FALSE,
3
 
        IF NOT (LISTP(EQNS) AND LISTP(VARS)) THEN ERROR("THE ARGUMENTS MUST BOTH BE LISTS"),
4
 
        IF LENGTH(VARS)>L:LENGTH(EQNS) THEN ERROR("MORE VARIABLES THEN EQUATIONS"),
5
 
        IF L=1 THEN ERROR("CAN'T ELIMINATE FROM ONLY ONE EQUATION"),
6
 
        IF LENGTH(VARS)=L THEN (VARS:REVERSE(VARS),SV:VARS[1], VARS:REVERSE(REST(VARS)),FLAG:TRUE),
 
1
eliminate(eqns,vars):=block([teqns,sv,se,l,flag,dispflag],
 
2
        modedeclare([l,i],fixnum,flag,boolean),flag:dispflag:false,
 
3
        if not (listp(eqns) and listp(vars)) then error("the arguments must both be lists"),
 
4
        if length(vars)>l:length(eqns) then error("more variables then equations"),
 
5
        if l=1 then error("can't eliminate from only one equation"),
 
6
        if length(vars)=l then (vars:reverse(vars),sv:vars[1], vars:reverse(rest(vars)),flag:true),
7
7
/* ?meqhk turns [a=b] into [a-b] */
8
 
        EQNS:MAP('?MEQHK,EQNS),
9
 
        FOR V IN VARS DO (
10
 
                TEQNS:[],
11
 
                FOR J:1 THRU L WHILE(FREEOF(V,FIRST(EQNS))) DO(
12
 
                  TEQNS:CONS(FIRST(EQNS),TEQNS), EQNS:REST(EQNS)),
13
 
                IF EQNS=[] THEN EQNS:TEQNS ELSE (TEQNS:APPEND(TEQNS,REST(EQNS)), EQNS:FIRST(EQNS), L:L-1, SE:[],
14
 
                FOR J:1 THRU L DO SE:CONS(RESULTANT(EQNS,TEQNS[J],V),SE),
15
 
                EQNS:SE)),
16
 
        IF FLAG THEN [RHS(apply('EV,[LAST(SOLVE(EQNS[1],SV)),EVAL]))] ELSE EQNS)$
 
8
        eqns:map('?meqhk,eqns),
 
9
        for v in vars do (
 
10
                teqns:[],
 
11
                for j:1 thru l while(freeof(v,first(eqns))) do(
 
12
                  teqns:cons(first(eqns),teqns), eqns:rest(eqns)),
 
13
                if eqns=[] then eqns:teqns else (teqns:append(teqns,rest(eqns)), eqns:first(eqns), l:l-1, se:[],
 
14
                for j:1 thru l do se:cons(resultant(eqns,teqns[j],v),se),
 
15
                eqns:se)),
 
16
        if flag then [rhs(apply('ev,[last(solve(eqns[1],sv)),eval]))] else eqns)$