--- loncom/homework/functionplotresponse.pm 2010/11/07 12:28:28 1.27 +++ loncom/homework/functionplotresponse.pm 2010/11/07 21:10:14 1.29 @@ -1,7 +1,7 @@ # LearningOnline Network with CAPA # option list style responses # -# $Id: functionplotresponse.pm,v 1.27 2010/11/07 12:28:28 www Exp $ +# $Id: functionplotresponse.pm,v 1.29 2010/11/07 21:10:14 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -392,8 +392,34 @@ sub start_functionplotrule { &Apache::lonxml::get_param('value',$parstack,$safeeval) ))); } elsif ($target eq 'edit') { - $result=&Apache::edit::tag_start($target,$token,'Function Plot Evaluation Rule'). - &Apache::edit::end_row(); + $result=&Apache::edit::tag_start($target,$token,'Function Plot Evaluation Rule'). + &Apache::edit::text_arg('Index:','index', + $token,'4').' '. + &Apache::edit::select_arg(&mt('Function:'),'derivative', + [['0','Function itself'], + ['1','First derivative'], + ['2','Second derivative']],$token). + &Apache::edit::text_arg('(Initial) x-value:','xinitial', + $token,'4').' '. + &Apache::edit::text_arg('Final x-value for ranges:','xfinal', + $token,'4').' '. + &Apache::edit::select_arg(&mt('Relationship:'),'relationship', + [['eq','equal'], + ['ne','not equal'], + ['ge','greater than or equal'], + ['gt','greater than'], + ['lt','less than'], + ['le','less than or equal']],$token). + $result.= &Apache::edit::select_or_text_arg('Value:','value', + [['undef','not defined']],$token,'4'). + &Apache::edit::text_arg('Percent error:','percenterror', + $token,'4'). + &Apache::edit::end_row(); + } elsif ($target eq 'modified') { + my $constructtag=&Apache::edit::get_new_args($token,$parstack, + $safeeval,'index','derivative','xinitial','xfinal','relationship', + 'value','percenterror'); + if ($constructtag) { $result=&Apache::edit::rebuild_tag($token); } } return $result; } @@ -591,15 +617,19 @@ sub populate_arrays { $xiold=$xi; # Function value $Apache::functionplotresponse::func[$xi]=&cubic_hermite($t,@yparms); +# Chain rule # dy/dx=dy/dt/(dx/dt) my $dxdt=&ddt_cubic_hermite($t,@xparms); if ($dxdt) { $Apache::functionplotresponse::dfuncdx[$xi]=&ddt_cubic_hermite($t,@yparms)/$dxdt; } -# d^2y/dx^2 +# Faa di Bruno +# d^2y/dx^2=(d^2y/dt^2)/(dx/dt)^2+(dy/dt)/(d^2x/dt^2) my $d2xdt2=&d2dt2_cubic_hermite($t,@xparms); - if ($d2xdt2) { - $Apache::functionplotresponse::d2funcdx2[$xi]=&d2dt2_cubic_hermite($t,@yparms)/$d2xdt2; + if (($dxdt) && ($d2xdt2)) { + $Apache::functionplotresponse::d2funcdx2[$xi]= + &d2dt2_cubic_hermite($t,@yparms)/($dxdt*$dxdt) + +&ddt_cubic_hermite($t,@yparms)/$d2xdt2; } } } @@ -788,9 +818,6 @@ sub functionplotrulecheck { for (my $i=$li; $i<=$lh; $i++) { my $val; if ($derivative==2) { - &Apache::lonnet::logthis("Second ". - -$Apache::functionplotresponse::d2funcdx2[$i-1].'__'.$Apache::functionplotresponse::d2funcdx2[$i].'__'.$Apache::functionplotresponse::d2funcdx2[$i+1]); $val=$Apache::functionplotresponse::d2funcdx2[$i]; } elsif ($derivative==1) { $val=$Apache::functionplotresponse::dfuncdx[$i];