From: Chris S. <san...@us...> - 2005-11-09 13:56:55
|
Update of /cvsroot/stack/stack-1-0/scripts/maxima In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20619/scripts/maxima Modified Files: stackmaxima.mac Log Message: Index: stackmaxima.mac =================================================================== RCS file: /cvsroot/stack/stack-1-0/scripts/maxima/stackmaxima.mac,v retrieving revision 1.41 retrieving revision 1.42 diff -C2 -d -r1.41 -r1.42 *** stackmaxima.mac 8 Nov 2005 19:39:42 -0000 1.41 --- stackmaxima.mac 9 Nov 2005 11:57:29 -0000 1.42 *************** *** 365,368 **** --- 365,369 ---- /* Reduces an inequality to either ? > 0 or ? >=0 */ ineqreduce(ex) := block( + if atom(ex) then return(ex), if op(ex)="=" then ex:ev(part(ex,1) - part(ex,2),simp,trigreduce) = 0, if op(ex)=">" then ex:ev(part(ex,1) - part(ex,2),simp,trigreduce) > 0, *************** *** 425,431 **** )$ ! /* An answer test based on Stack_Test for the a> flag. */ ! ATAlgEquiv(SA,SB) := ! block([KEEPFLOAT,RawMark,FeedBack,AnswerNote,str], RawMark:0, FeedBack:"", AnswerNote:"", KEEPFLOAT:TRUE, /* See pg 23 */ --- 426,460 ---- )$ ! /* An general, all purpose answer test based maximum simplifiaction. ! This function is a wraper for AtAlgEquivfun(SA,SB) ! */ ! ATAlgEquiv(SA,SB) :=block([ret,oldsimp], ! oldsimp:simp, ! simp:true, ! /* Turn on simplification and error catch */ ! SA:errcatch(ev(SA,simp,fullratsimp,nouns)), ! if SA=[] then (simp:oldsimp, return(StackReturnOb("false","0","Error simplifing SAns",""))), ! SA:SA[1], ! SB:errcatch(ev(SB,simp,fullratsimp,nouns)), ! if SB=[] then (simp:oldsimp, return(StackReturnOb("false","0","Error simplifing TAns",""))), ! SB:SB[1], ! /* Start recursive process */ ! ret:ATAlgEquivfun(SA,SB), ! /* Send back result */ ! simp:oldsimp, ! return(StackReturnOb(string(ret[1]),string(ret[2]),ret[3],ret[4])) ! )$ ! ! /* ATAlgEquiv_fun is a recursive "thing" comparing function. It is designed to ! cope with a variety of different objects, eg lists of inequalities etc. ! ! Returns [valid,RawMark,AnswerNote,FeedBack] ! where valid = true/false ! RawMark = 1 or 0 ! AnswerNote = "string", ! FeedBack = StackFeedback ! */ ! ! ATAlgEquivfun(SA,SB) := block([KEEPFLOAT,RawMark,FeedBack,AnswerNote,ret], RawMark:0, FeedBack:"", AnswerNote:"", KEEPFLOAT:TRUE, /* See pg 23 */ *************** *** 433,437 **** if matrixp(SB) then if matrixp(SA)#TRUE then ! return(StackReturnOb("false","0","ATAlgEquiv_SA_not_matrix",StackAddFeedback("","ATAlgEquiv_SA_not_matrix"))) else return(ATMatrix(SA,SB)), --- 462,466 ---- if matrixp(SB) then if matrixp(SA)#TRUE then ! return([false,0,"ATAlgEquiv_SA_not_matrix",StackAddFeedback("","ATAlgEquiv_SA_not_matrix")]) else return(ATMatrix(SA,SB)), *************** *** 439,443 **** if listp(SB) then if listp(SA)#TRUE then ! return(StackReturnOb("false","0","ATAlgEquiv_SA_not_list",StackAddFeedback("","ATAlgEquiv_SA_not_list"))) else return(ATList(SA,SB)), --- 468,472 ---- if listp(SB) then if listp(SA)#TRUE then ! return([false,0,"ATAlgEquiv_SA_not_list",StackAddFeedback("","ATAlgEquiv_SA_not_list")]) else return(ATList(SA,SB)), *************** *** 445,457 **** if equationp(SB) then if equationp(SA)#TRUE then ! return(StackReturnOb("false","0","ATAlgEquiv_SA_not_equation",StackAddFeedback("","ATAlgEquiv_SA_not_equation"))) else return(ATEquation(SA,SB)), /* Did the student type in an equation, but the teacher did not? */ ! if equationp(SA) then return(StackReturnOb("false","0","ATAlgEquiv_SA_not_equation",StackAddFeedback("","ATAlgEquiv_TA_not_equation"))), /* Are we dealing with an equation? */ if inequalityp(SB) then if inequalityp(SA)#TRUE then ! return(StackReturnOb("false","0","ATAlgEquiv_SA_not_inequality",StackAddFeedback("","ATAlgEquiv_SA_not_inequality"))) else return(ATInequality(SA,SB)), --- 474,486 ---- if equationp(SB) then if equationp(SA)#TRUE then ! return([false,0,"ATAlgEquiv_SA_not_equation",StackAddFeedback("","ATAlgEquiv_SA_not_equation")]) else return(ATEquation(SA,SB)), /* Did the student type in an equation, but the teacher did not? */ ! if equationp(SA) then return([false,0,"ATAlgEquiv_SA_not_equation",StackAddFeedback("","ATAlgEquiv_TA_not_equation")]), /* Are we dealing with an equation? */ if inequalityp(SB) then if inequalityp(SA)#TRUE then ! return([false,0,"ATAlgEquiv_SA_not_inequality",StackAddFeedback("","ATAlgEquiv_SA_not_inequality")]) else return(ATInequality(SA,SB)), *************** *** 459,463 **** if setp(SB) then if setp(SA)#TRUE then ! return(StackReturnOb("false","0","ATAlgEquiv_SA_not_set",StackAddFeedback("","ATAlgEquiv_SA_notset"))) else return(ATSet(SA,SB)), --- 488,492 ---- if setp(SB) then if setp(SA)#TRUE then ! return([false,0,"ATAlgEquiv_SA_not_set",StackAddFeedback("","ATAlgEquiv_SA_not_set")]) else return(ATSet(SA,SB)), *************** *** 465,470 **** if Stack_Test(SA,SB) then RawMark:1, ! str:StackReturnOb("true",STRING(RawMark),AnswerNote,FeedBack), ! return(str) )$ --- 494,499 ---- if Stack_Test(SA,SB) then RawMark:1, ! ret:[true,RawMark,AnswerNote,FeedBack], ! return(ret) )$ *************** *** 489,509 **** /* An answer test based on two lists for SA and SB */ ATList(SA,SB):= ! block([KEEPFLOAT,DEMOIVRE,TRIGEXPAND,RawMark,FeedBack,AnswerNote,str,SAl,SBl,ZM], /* Get sizes of matrices */ SAl : length(SA), SBl : length(SB), if (SAl#SBl) THEN ! return(StackReturnOb("true","0","ATList_wronglen",StackAddFeedback("","ATList_wronglen",StackDISP(SBl,"\$"),StackDISP(SAl,"\$")))), ! /* Convert them to matrices and check they are equal */ ! SA:matrix(SA), ! SB:matrix(SB), ! ZM:MATRIXMAP(trigreduce,(SA-SB)), ! ZM:FULLRATSIMP(ZM), ! if (ZM = ZEROMATRIX(1,SBl)) then ! return(StackReturnOb("true","1","","")), ! /* Can we give feedback on which are wrong */ ! /* StackDISP(expr,st) */ ! FOR SAr:1 THRU SBl DO IF ZM[1,SAr]#0 THEN SA[1,SAr]:texcolor("red",SA[1,SAr]), ! return(StackReturnOb("true","0","ATList_wrongentries",StackAddFeedback("","ATList_wrongentries",StackDISP(SA[1],"\$\$")))) )$ --- 518,548 ---- /* An answer test based on two lists for SA and SB */ ATList(SA,SB):= ! block([AddFeedBack,SAl,SBl,ret,retnew,k], /* Get sizes of matrices */ + SAN :SA, SAl : length(SA), SBl : length(SB), if (SAl#SBl) THEN ! return([true,0,"ATList_wronglen",StackAddFeedback("","ATList_wronglen",StackDISP(SBl,"\$"),StackDISP(SAl,"\$"))]), ! ! /* Apply ATAlgEquivfun to each element pair */ ! ret:[true,1,"",""], ! AddFeedBack:false, ! for k:1 thru SAl do block( ! retnew:ATAlgEquivfun(SA[k],SB[k]), ! ret[1]:ret[1] and retnew[1], ! ret[2]:ret[2]*retnew[2], ! ret[3]:concat(ret[3]," ",retnew[3]), ! if retnew[2]=0 then block( ! ret[4]:concat(ret[4],retnew[4]), ! SA[k]:texcolor("red",SA[k]), ! AddFeedBack:true ! ) ! ), ! print(AddFeedBack), ! if AddFeedBack=true then ! ret[3]:concat("(","ATList_wrongentries",ret[3],")"), ! ret[4]:concat(StackAddFeedback("","ATList_wrongentries",StackDISP(SA,"\$\$")),ret[4]), ! return(ret) )$ *************** *** 516,520 **** if Stack_Test(SA1,SB1) or Stack_Test(SA1,SB2) then RawMark:1, ! return(StackReturnOb("true",STRING(RawMark),"","")) )$ --- 555,559 ---- if Stack_Test(SA1,SB1) or Stack_Test(SA1,SB2) then RawMark:1, ! return([true,RawMark,"",""]) )$ *************** *** 528,532 **** if (op(SA)=op(SB) and Stack_Test(SA1,SB1)) then RawMark:1, ! return(StackReturnOb("true",STRING(RawMark),"","")) )$ --- 567,571 ---- if (op(SA)=op(SB) and Stack_Test(SA1,SB1)) then RawMark:1, ! return([true,RawMark,"",""]) )$ *************** *** 543,559 **** FeedBack:StackAddFeedback("","ATMatrix_wrongsz",StackDISP(SBr,"\$"),StackDISP(SBc,"\$"),StackDISP(SAr,"\$"),StackDISP(SAc,"\$")), if (SAr#SBr) THEN ! return(StackReturnOb("true","0","ATMatrix_wrongsz rows",FeedBack)), if (SAc#SBc) THEN ! return(StackReturnOb("true","0","ATMatrix_wrongsz columns",FeedBack)), FeedBack:"", /* Check they are equal */ ZM:ev(matrixmap(trigreduce,(SA-SB)),simp,fullratsimp), if (ZM = zeromatrix(SBr,SBc)) then ! return(StackReturnOb("true","1",AnswerNote,FeedBack)), /* Can we give feedback on which are wrong */ /* StackDISP(expr,st) */ ev(for SAr:1 thru SBr do for SAc:1 thru SBc do if ZM[SAr,SAc]#0 then SA[SAr,SAc]:texcolor("red",SA[SAr,SAc]),simp), FeedBack:StackAddFeedback("","ATMatrix_wrongentries",StackDISP(SA,"$$")), ! return(StackReturnOb("true","0","ATMatrix_wrongentries",FeedBack)) )$ --- 582,598 ---- FeedBack:StackAddFeedback("","ATMatrix_wrongsz",StackDISP(SBr,"\$"),StackDISP(SBc,"\$"),StackDISP(SAr,"\$"),StackDISP(SAc,"\$")), if (SAr#SBr) THEN ! return([true,0,"ATMatrix_wrongsz rows",FeedBack]), if (SAc#SBc) THEN ! return([true,0,"ATMatrix_wrongsz columns",FeedBack]), FeedBack:"", /* Check they are equal */ ZM:ev(matrixmap(trigreduce,(SA-SB)),simp,fullratsimp), if (ZM = zeromatrix(SBr,SBc)) then ! return([true,1,AnswerNote,FeedBack]), /* Can we give feedback on which are wrong */ /* StackDISP(expr,st) */ ev(for SAr:1 thru SBr do for SAc:1 thru SBc do if ZM[SAr,SAc]#0 then SA[SAr,SAc]:texcolor("red",SA[SAr,SAc]),simp), FeedBack:StackAddFeedback("","ATMatrix_wrongentries",StackDISP(SA,"$$")), ! return([true,0,"ATMatrix_wrongentries",FeedBack]) )$ *************** *** 567,571 **** FeedBack:StackAddFeedback("","ATSet_wrongsz",StackDISP(SBl,"$"),StackDISP(SAl,"$")), if (SAl#SBl) then ! return(StackReturnOb("true","0","ATSet_wrongsz",FeedBack)), FeedBack:"", /* Check they are equal */ --- 606,610 ---- FeedBack:StackAddFeedback("","ATSet_wrongsz",StackDISP(SBl,"$"),StackDISP(SAl,"$")), if (SAl#SBl) then ! return([true,0,"ATSet_wrongsz",FeedBack]), FeedBack:"", /* Check they are equal */ *************** *** 573,582 **** SB:map(ineqreduce,map(trigsimp,SB)), if (subsetp(SA,SB) and subsetp(SB,SA)) then ! return(StackReturnOb("true","1",AnswerNote,FeedBack)), /* Can we give feedback on which are wrong */ FeedBack:StackAddFeedback("","ATSet_wrongentries",StackDISP(setdifference(SA,SB),"$$")), ! return(StackReturnOb("true","0","ATSet_wrongentries",FeedBack)) )$ /* An answer test based on the Maxima's notion of equals. */ --- 612,624 ---- SB:map(ineqreduce,map(trigsimp,SB)), if (subsetp(SA,SB) and subsetp(SB,SA)) then ! return([true,1,AnswerNote,FeedBack]), /* Can we give feedback on which are wrong */ FeedBack:StackAddFeedback("","ATSet_wrongentries",StackDISP(setdifference(SA,SB),"$$")), ! return([true,0,"ATSet_wrongentries",FeedBack]) )$ + /******************************************************************/ + + /* An answer test based on the Maxima's notion of equals. */ |