version 1.21, 2010/10/31 12:33:02
|
version 1.22, 2010/11/01 00:04:09
|
Line 524 sub indices_scale {
|
Line 524 sub indices_scale {
|
my ($xmin,$xmax,$x)=@_; |
my ($xmin,$xmax,$x)=@_; |
my $i=&array_index($xmin,$xmax,$x); |
my $i=&array_index($xmin,$xmax,$x); |
my $xr=&index_x($xmin,$xmax,$i); |
my $xr=&index_x($xmin,$xmax,$i); |
&Apache::lonnet::logthis("x:$x i:$i xr:$xr"); |
|
if ($xr<$x) { |
if ($xr<$x) { |
# Desired x is right of array index |
# Desired x is right of array index |
if ($i>=200) { return (200,200,0); } |
if ($i>=200) { return (200,200,0); } |
Line 553 sub func_val {
|
Line 552 sub func_val {
|
unless (defined($fl) || defined($fh)) { return undef; } |
unless (defined($fl) || defined($fh)) { return undef; } |
unless (defined($fl)) { return $fh; } |
unless (defined($fl)) { return $fh; } |
unless (defined($fh)) { return $fl; } |
unless (defined($fh)) { return $fl; } |
my $func=$fl+$factor*($fh-$fl); |
return $fl+$factor*($fh-$fl); |
&Apache::lonnet::logthis("x:$x func:$func factor:$factor il:$il ih:$ih fil:$fl fih:$fh"); |
} |
return $func; |
|
|
# |
|
# First derivative |
|
# |
|
|
|
sub dfuncdx_val { |
|
my ($xmin,$xmax,$x)=@_; |
|
my ($il,$ih,$factor)=&indices_scale($xmin,$xmax,$x); |
|
my $fl=$Apache::functionplotresponse::dfuncdx[$il]; |
|
my $fh=$Apache::functionplotresponse::dfuncdx[$ih]; |
|
unless (defined($fl) || defined($fh)) { return undef; } |
|
unless (defined($fl)) { return $fh; } |
|
unless (defined($fh)) { return $fl; } |
|
return $fl+$factor*($fh-$fl); |
|
} |
|
|
|
# |
|
# Second derivative |
|
# |
|
|
|
sub d2funcdx2_val { |
|
my ($xmin,$xmax,$x)=@_; |
|
my ($il,$ih,$factor)=&indices_scale($xmin,$xmax,$x); |
|
my $fl=$Apache::functionplotresponse::d2funcdx2[$il]; |
|
my $fh=$Apache::functionplotresponse::d2funcdx2[$ih]; |
|
unless (defined($fl) || defined($fh)) { return undef; } |
|
unless (defined($fl)) { return $fh; } |
|
unless (defined($fh)) { return $fl; } |
|
return $fl+$factor*($fh-$fl); |
} |
} |
|
|
# |
# |
Line 566 sub populate_arrays {
|
Line 593 sub populate_arrays {
|
my ($id,$xmin,$xmax)=@_; |
my ($id,$xmin,$xmax)=@_; |
for (my $i=0; $i<=200; $i++) { |
for (my $i=0; $i<=200; $i++) { |
$Apache::functionplotresponse::func[$i]=undef; |
$Apache::functionplotresponse::func[$i]=undef; |
$Apache::functionplotresponse::dfunddx[$i]=undef; |
$Apache::functionplotresponse::dfuncdx[$i]=undef; |
$Apache::functionplotresponse::d2funcd2x[$i]=undef; |
$Apache::functionplotresponse::d2funcd2x[$i]=undef; |
} |
} |
unless ($xmax>$xmin) { return 'no_func'; } |
unless ($xmax>$xmin) { return 'no_func'; } |
Line 591 sub populate_arrays {
|
Line 618 sub populate_arrays {
|
if (($xi>$xiold) && ($xi>=0) && ($xi<=200)) { |
if (($xi>$xiold) && ($xi>=0) && ($xi<=200)) { |
if (defined($Apache::functionplotresponse::func[$xi])) { return 'no_func'; } |
if (defined($Apache::functionplotresponse::func[$xi])) { return 'no_func'; } |
$xiold=$xi; |
$xiold=$xi; |
|
# Function value |
$Apache::functionplotresponse::func[$xi]=&cubic_hermite($t,@yparms); |
$Apache::functionplotresponse::func[$xi]=&cubic_hermite($t,@yparms); |
|
# 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 |
|
my $d2xdt2=&d2dt2_cubic_hermite($t,@xparms); |
|
if ($d2xdt2) { |
|
$Apache::functionplotresponse::d2funcd2x[$xi]=&d2dt2_cubic_hermite($t,@yparms)/$d2xdt2; |
|
} |
} |
} |
} |
} |
} |
} |
Line 722 sub end_functionplotresponse {
|
Line 760 sub end_functionplotresponse {
|
} else { |
} else { |
$ad='INCORRECT'; |
$ad='INCORRECT'; |
} |
} |
&func_val($xmin,$xmax,3.96); |
|
|
|
&func_val($xmin,$xmax,3.965); |
|
|
|
&func_val($xmin,$xmax,3.97); |
|
&func_val($xmin,$xmax,3.975); |
|
&func_val($xmin,$xmax,3.98); |
|
|
|
&func_val($xmin,$xmax,3.985); |
|
&func_val($xmin,$xmax,3.99); |
|
&func_val($xmin,$xmax,3.995); |
|
|
|
&func_val($xmin,$xmax,4); |
|
&func_val($xmin,$xmax,4.05); |
|
&func_val($xmin,$xmax,4.1); |
|
|
|
&func_val($xmin,$xmax,4.15); |
|
&func_val($xmin,$xmax,4.2); |
|
&func_val($xmin,$xmax,4.25); |
|
|
|
# |
# |
# Store grading info |
# Store grading info |