Consider applying Newton's method to approximate zeros of f(x) = b + x cos(x) for various values of b. Some choices of x_0 yield convergence to a nearby zero of f while others have different results (which are worth discussing during a class).
I would like to choose a random value of b and then present a random choice from those starts which converge to a nearby zero. E.g., if b = 1, then have x0 = list_random(2,4,5,8,11) but if b = 3, then have x0 = list_random(3,4,8,11). That type of casewise processing can be done in Perl, but I would prefer a more elegant (and extensible) approach. With several other languages (Lisp, Maple, Python) I could do something resembling
@B = ( 1 , 2 , 3 ) ;
@X = ( (2,4,5,8,11) , (2,3,4,5,8,11) , (3,4,8,11) ) ;
$j = random(0,2,1) ; ## is random( 0 , @B , 1 ) an alternative?
$b = $B[ $j ] ;
$x0 = list_random( $X[ $j ] ) ;
[Note: @BX = ( (b,list) , ( 1 , (2,4,5,8,11) ) , ( 3 , (3,4,8,11) ) ) would be easier to maintain --- at the price of an extra level of indexing.] In any event, I will welcome suggestions about Perl/PG programming because all of my current attempts at a non-kludge version have failed.
Note: http://webwork.maa.org/moodle/mod/forum/discuss.php?d=2272 discusses some related stuff about lists, but I have not yet been able to apply it here.
Hi Dick,
You can do the same sort of nested data in Perl and therefore in problems. The following should be something that would work.
@BX = ( [ 1, [2,4,5,8,11] ], [ 2, [2,3,4,5,8,11] ], [ 3, [3,4,8,11] ] );
$j = random( 0, scalar(@BX), 1 );
$b = $BX[$j]->[0];
$x0 = $BX[$j]->[1];
Now $x0 is a list reference. Thus if $j is 0, @$x0 is the list (2,4,5,8,11) and we can dereference elements of the list with the arrow operator: $x0->[3] is 5.
Does that help?
Gavin
You can do the same sort of nested data in Perl and therefore in problems. The following should be something that would work.
@BX = ( [ 1, [2,4,5,8,11] ], [ 2, [2,3,4,5,8,11] ], [ 3, [3,4,8,11] ] );
$j = random( 0, scalar(@BX), 1 );
$b = $BX[$j]->[0];
$x0 = $BX[$j]->[1];
Now $x0 is a list reference. Thus if $j is 0, @$x0 is the list (2,4,5,8,11) and we can dereference elements of the list with the arrow operator: $x0->[3] is 5.
Does that help?
Gavin