File:
[LON-CAPA] /
loncom /
homework /
mathresponse.idea
Revision
1.2:
download - view:
text,
annotated -
select for diffs
Tue Dec 5 15:20:22 2006 UTC (17 years, 8 months ago) by
www
Branches:
MAIN
CVS tags:
version_2_9_X,
version_2_9_99_0,
version_2_9_1,
version_2_9_0,
version_2_8_X,
version_2_8_99_1,
version_2_8_99_0,
version_2_8_2,
version_2_8_1,
version_2_8_0,
version_2_7_X,
version_2_7_99_1,
version_2_7_99_0,
version_2_7_1,
version_2_7_0,
version_2_6_X,
version_2_6_99_1,
version_2_6_99_0,
version_2_6_3,
version_2_6_2,
version_2_6_1,
version_2_6_0,
version_2_5_X,
version_2_5_99_1,
version_2_5_99_0,
version_2_5_2,
version_2_5_1,
version_2_5_0,
version_2_4_X,
version_2_4_99_0,
version_2_4_2,
version_2_4_1,
version_2_4_0,
version_2_3_X,
version_2_3_99_0,
version_2_3_2,
version_2_3_1,
version_2_3_0,
version_2_2_99_1,
version_2_2_99_0,
version_2_12_X,
version_2_11_X,
version_2_11_5_msu,
version_2_11_5,
version_2_11_4_uiuc,
version_2_11_4_msu,
version_2_11_4,
version_2_11_3_uiuc,
version_2_11_3_msu,
version_2_11_3,
version_2_11_2_uiuc,
version_2_11_2_msu,
version_2_11_2_educog,
version_2_11_2,
version_2_11_1,
version_2_11_0_RC3,
version_2_11_0_RC2,
version_2_11_0_RC1,
version_2_11_0,
version_2_10_X,
version_2_10_1,
version_2_10_0_RC2,
version_2_10_0_RC1,
version_2_10_0,
loncapaMITrelate_1,
language_hyphenation_merge,
language_hyphenation,
bz6209-base,
bz6209,
bz5969,
bz2851,
PRINT_INCOMPLETE_base,
PRINT_INCOMPLETE,
HEAD,
GCI_3,
GCI_2,
GCI_1,
BZ5971-printing-apage,
BZ5434-fox,
BZ4492-merge,
BZ4492-feature_horizontal_radioresponse,
BZ4492-feature_Support_horizontal_radioresponse,
BZ4492-Support_horizontal_radioresponse
Gesundheit ... might as well add this.
<problem>
<script type="loncapa/perl">
$a1 = random(-5,5,2);
$a2 = random(-5,5,2);
$n1 = random(1,10,1);
$n2 = random(1,10,1);
$function = "$a1*cos($n1*x)+$a2*sin($n2*x)";
@cas_list = ($function);
</script>
<startouttext />
Give an example of a function which is
(1) orthogonal to <algebra>$function</algebra> with respect to the
scalar product
<m>$$\langle g \mid h \rangle =
\frac{1}{\pi} \int_{-\pi}^{\pi} g(x) \cdot h(x)$$</m>
and
(2) whose norm is 1.
<endouttext />
<mathresponse cas="maxima" args="@cas_list">
<answer>
f(x):= LONCAPALIST[1];
overlap: integrate(f(x)*RESPONSE[1],x,-%pi,%pi)/%pi;
norm: integrate(RESPONSE[1]*RESPONSE[1],x,-%pi,%pi)/%pi;
grade: is(overlap=0 and norm=1);
[grade];
</answer>
<textline />
<hintgroup showoncorrect="no">
<mathhint cas="maxima" args="@cas_list" name="ortho">
<answer>
f(x):= LONCAPALIST[1];
overlap: integrate(f(x)*RESPONSE[1],x,-%pi,%pi)/%pi;
[is(overlap != 0)];
</answer>
</mathhint>
<mathhint cas="maxima" args="@cas_list" name="norm">
<answer>
f(x):= LONCAPALIST[1];
norm: integrate(RESPONSE[1]*RESPONSE[1],x,-%pi,%pi)/%pi;
[is(norm != 1)];
</answer>
</mathhint>
<hintpart on="norm">
<script type="loncapa/perl">
$response = &EXT('user.resource.resource.0.submissiom');
$norm = &cas('maxima',...); # get the norm
$norm_display = &cas_tex_display($norm);
</script>
<startouttext />
The function you have provided is not normal to
<algebra>$function</algebra> its norm is
<m eval="on">$norm_display</m>
<endouttext />
</hintpart>
<hintpart on="ortho">
<startouttext />
The function you have provided is not orthognal.
<endouttext />
</hintpart>
</hintgroup>
</mathresponse>
</problem>
* Maxima hat keinen echten Servermode.
Das Programm
/loncapa/loncom/lonmaxima
erzeugt fuenf Serverprozesse, die jeweils einen Maxima-Prozess am Laufen halten:
www 8506 0.0 0.5 8880 5324 ? S Dec04 0:00 lonmaxima: Parent process, sleeping Mon Dec 4 09:53:10 2006
www 8507 0.0 0.5 9012 5380 ? S Dec04 0:00 lonmaxima: Accepting connections Mon Dec 4 10:23:24 2006
www 8508 0.0 2.3 885900 24276 pts/2 S Dec04 0:00 sbcl --core /usr/local/lib/maxima/5.9.2.99rc1/binary-sbcl/maxima.core --noinform --end-runtime-options --eval (cl-user::run) --end-toplevel-options
www 8510 0.0 0.5 9012 5380 ? S Dec04 0:00 lonmaxima: Accepting connections Mon Dec 4 10:23:24 2006
www 8512 0.0 0.5 9012 5380 ? S Dec04 0:00 lonmaxima: Accepting connections Mon Dec 4 10:23:30 2006
www 8513 0.0 2.3 885900 24308 pts/4 S Dec04 0:00 sbcl --core /usr/local/lib/maxima/5.9.2.99rc1/binary-sbcl/maxima.core --noinform --end-runtime-options --eval (cl-user::run) --end-toplevel-options
www 8515 0.0 2.3 885900 24040 pts/5 S Dec04 0:00 sbcl --core /usr/local/lib/maxima/5.9.2.99rc1/binary-sbcl/maxima.core --noinform --end-runtime-options --eval (cl-user::run) --end-toplevel-options
www 8621 0.0 0.5 9012 5380 ? S Dec04 0:00 lonmaxima: Accepting connections Mon Dec 4 10:23:30 2006
www 8622 0.0 2.3 885900 24312 pts/3 S Dec04 0:00 sbcl --core /usr/local/lib/maxima/5.9.2.99rc1/binary-sbcl/maxima.core --noinform --end-runtime-options --eval (cl-user::run) --end-toplevel-options
www 8648 0.0 0.5 9012 5380 ? S Dec04 0:00 lonmaxima: Accepting connections Mon Dec 4 10:23:19 2006
www 8649 0.0 2.2 885900 22952 pts/6 S Dec04 0:00 sbcl --core /usr/local/lib/maxima/5.9.2.99rc1/binary-sbcl/maxima.core --noinform --end-runtime-options --eval (cl-user::run) --end-toplevel-options
Dieser Daemon muss laufen, damit LON-CAPA mit Maxima reden kann.
Die Routinen, die dazu benutzt werden sollen, sind in
/loncapa/loncom/homework/lonmaxima.pm
* XML-Umgebung: wir haben zwei Perl-Umgebungen, wenn wir XML-Dateien abarbeiten, naemlich
- die Apache-Module-Umgebung: volle Privilegien
- die "Safeeval"-Umgebung: die interne Umgebung des Dokuments, in der zum Beispiel die <script>-Bloecke laufen. In dieser Umgebung existieren die Variablen des Problems.
Eingeschraenkte Opcodes (no I/O), kein direkter Zugriff auf die Apache-Umgebungen ausser mit "Safe Holes", z.B.,
$safehole->wrap(\&Apache::lonmaxima::maxima_check,$safeeval,'&maxima_check');
caparesponse.pm, response.pm, lonmaxima.pm, etc, laufen in der Apache-Umgebung
default_homework.lcpm laueft in der Safeeval-Umgebung
* formularesponse: Erweiterung der "einfachen" Responsetypes: numerical, string, etc. Das haben wir vom alten CAPA-System geerbt und ist deshalb in
/loncapa/loncom/homework/caparesponse/caparesponse.pm
Alle einfachen Responses gehen in &check_submission(), wo dann sortiert wird, wer es bearbeitet. <formularesponse> ohne Samples soll von Maxima bearbeitet werden (auskommentiert in Production-Version). Ausgefuehrt wird das dann in
/loncapa/loncom/xml/run.pm
das den Uebergang in die Safeeval-Umgebung macht. In der Safeeval-Umgebung kuemmert sich
/loncapa/loncom/homework/default_homework.lcpm
in der Routine &caparesponse_check()
if ($type eq '9') {
$result = &maxima_check(&maxima_cas_formula_fix($response),&maxima_cas_formula_fix($answer),\$reterror);
} else {
if ($type eq '8') { # fml type
...
* <mathresponse>: neuer Antwork-Typ, aehnlich wie <customresponse>. Das Design ist beschrieben in
/loncapa/loncom/homework/mathresponse.idea
Das Tag ist definiert in
/loncapa/loncom/homework/response.pm
Die Routine
&start_mathresponse()
wird aufgerufen, wenn der Parser auf <mathresponse> trifft. Die Routine
&end_mathresponse()
wird aufgerufen, wenn der Parser auf </mathresponse> trifft. Beide Routinen muessen die verschiedenen Rendering-Targets bedienen:
* web: Darstellung auf dem Web
* tex: Darstellung im Druck
* edit: Darstellung im bunten Editor
* modified: Zurueckschreiben von Aenderungen im Editor (muss normalerweise nicht geaendert werden)
* meta: Katalogdaten (muss normalerweise nicht geaendert werden)
* answer: Darstellung der richtigen Antwort
* grade: Benotung der Studierendenantwort
Die Routinen &start_answer and &end_answer (<answer> und </answer>) sammeln nur die Scripts ein und werden von <mathresponse> und <customresponse> genutzt.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>