## BEGIN_DESCRIPTION ## Sample problem embedding Sage in WW ## ## This problem shows a method of passing the student's ## answer from the work they've done in the SCS ## back to WW for grading transparently to the student. ## It requires hard coding of the input boxes. ## ## This problem asks the student to determine experimentally ## the appropriate coefficients (stored in the vector x) so that ## b lies in the span of the columns of A. That is, Ax = b. ## END_DESCRIPTION ## KEYWORDS('sage', 'sagelet', 'span','linear combination') ## DBsubject('') ## DBchapter('') ## DBsection('') ## Date('June 2012') ## Author('John Travis') ## Institution('Mississippi College') ## TitleText1('') ## EditionText1('') ## AuthorText1('') ## Section1('') ## Problem1('') DOCUMENT(); loadMacros( "PGstandard.pl", "MathObjects.pl", "AnswerFormatHelp.pl", "problemRandomize.pl", ); TEXT(beginproblem()); ProblemRandomize(when=>"Correct",onlyAfterDue=>0); ########################################################### ## ## pg initializations and regular WeBWorK code $a11 = random(2,3,1/2); $a12 = 1; $a21 = random(-3,-1,1/2); $a22 = non_zero_random(-2,5,1/20); $A = Matrix([[$a11,$a12],[$a21,$a22]]); $A1 = Vector($a11,$a21); $x1 = non_zero_random(-2,2,1/20); $x1ans = Compute("$x1"); $x2 = non_zero_random(-2,2,1/10); $x2ans = Compute("$x2"); $x = Vector($x1,$x2); $b1 = $a11*$x1+$a12*$x2; $b2 = $a21*$x1+$a22*$x2; $b = Vector($b1,$b2); #################################################### ## ## Upper WeBWorK text ## ## Problem display preceding the Sage cell ## Context()->texStrings; BEGIN_TEXT Solve A x= b by finding coefficients for the columns of A which show b lies in their span. $PAR When solving \[Ax=b\]the solution \(x\) can be determined by determining the linear combination of the columns of A which equal b. In the interactive cell below \(A_1\) represents the first column of A while \(A_2\) represents the second column of A. Determine values of \(x_1\) and \(x_2\) so that \[x_1 A_1 + x_2 A_2 = b \]. $PAR END_TEXT Context()->normalStrings; ########################################################### ## ## single cell server code ## ## The Sage code that is sent to the single cell server ## that returns the Sage out put desired. ## It is preprocessed by pg so use pg TeX constructs ## and escape @ to ~~@ etc ## ## TEXT(MODES(TeX=>"", HTML=>< The solution x for Ax=b is given by x1=\{ ans_rule(15) \} and x2=\{ans_rule(15) \}. REPLACE_WITH_SCRIPT type="application/sage"> b = matrix([[$b1],[$b2]]) bt = b.transpose() A=matrix([[$a11,$a12],[$a21,$a22]]) At =A.transpose() # Notice the correct exact answer is given by x = A\b # Finding when a vector b is in the span of other vectors in 2-space ~~@interact def _(x1=slider(-3,3,1/20,1), x2=slider(-3,3,1/20,1)): G = arrow((0,0),x1*At[0],rgbcolor=(0,0,1)) G += arrow(x1*At[0],x1*At[0]+x2*At[1],rgbcolor=(0,1,0)) G += arrow((0,0),($b1,$b2),rgbcolor=(1,0,0),width=5) G += text("A1",(x1*At[0][0]/2,x1*At[0][1]/2),fontsize=30,color='purple') G += text("A2",(x1*At[0][0]+x2*At[1][0]/2,x1*At[0][1]+x2*At[1][1]/2),fontsize=30,color='purple') G += text("b",($b1/2,$b2/2),fontsize=40,color='purple') G += point(x1*At[0],color='blue',pointsize=40) G += point(($b1,$b2),color='red',pointsize=30) G += point(x1*At[0]+x2*At[1],color='green',pointsize=40) G += point(($b1,$b2),color='red',pointsize=20) # Add fixed originals and dashed modified version of these show(G,frame=False) html('' %str(x1) ) html('' %str(x2) ) END_TEXT ## SAGE_CODE ########################################################### ## ## single cell server script ## ## script that sends the Sage code above to the ## single cell server and writes the return into ## the webpage ## TEXT(MODES(TeX=>"", HTML=><<'SAGE_SCRIPT')); REPLACE_WITH_SCRIPT src="http://aleph.sagemath.org/static/jquery.min.js"> REPLACE_WITH_SCRIPT src="http://aleph.sagemath.org/embedded_sagecell.js"> REPLACE_WITH_SCRIPT> $(function () { sagecell.makeSagecell({inputLocation: '#sagecell', template: sagecell.templates.minimal, autoeval: true, evalButtonText: 'Reset the interactive display'}); }); SAGE_SCRIPT #################################################### ## ## Lower WeBWorK text ## ## Problem display following the Sage cell ## Context()->texStrings; BEGIN_TEXT When you are comfortable with the coefficients that you have chosen, press the submit button below. END_TEXT Context()->normalStrings; ####################### # Answer Evaluation $showPartialCorrectAnswers = 1; ANS( $x1ans->cmp() ); ANS( $x2ans->cmp() ); ########################################################### ## ## Hint(s), delete or comment if not used ## Context()->texStrings; $showHint = 2; BEGIN_HINT By adjusting the sliders, you are changing the length of the corresponding vector. Remember that a negative coefficient makes the vector point in the opposite direction. END_HINT $showHint = 4; $x1low = $x1-1/3; $x1high = $x1+1/5; BEGIN_HINT Consider choosing a value for the first coefficient somewhere between $x1low and $x1high. END_HINT Context()->normalStrings; ########################################################### ## ## Solution, delete or comment if not used ## Context()->texStrings; BEGIN_SOLUTION Notice that \(($x1) *A_1 + ($x2) *A_2 = $b\) END_SOLUTION Context()->normalStrings; ENDDOCUMENT(); # This should be the last executable line in the problem.