[system] / trunk / webwork / system / courseScripts / PGstatisticsmacros.pl Repository: Repository Listing bbplugincoursesdistsnplrochestersystemwww

Diff of /trunk/webwork/system/courseScripts/PGstatisticsmacros.pl

Revision 728 Revision 729
1#!/usr/local/bin/webwork-perl 1#!/usr/local/bin/webwork-perl
2 2
3sub _PGstatisticsmacros_init { 3sub _PGstatisticsmacros_init {
4 foreach my \$t (@Distributions::EXPORT_OK) { 4 foreach my \$t (@Distributions::EXPORT_OK) {
5 *{\$t} = *{"Distributions::\$t"} 5 *{\$t} = *{"Distributions::\$t"}
6 } 6 }
7 foreach my \$t (@Regression::EXPORT_OK) { 7 foreach my \$t (@Regression::EXPORT_OK) {
8 *{\$t} = *{"Regression::\$t"} 8 *{\$t} = *{"Regression::\$t"}
11 11
13 13
15 15
16=pod 16=pod
17 17
18 Usage: normal_prob(a, b, mean=>0, deviation=>1); 18 Usage: normal_prob(a, b, mean=>0, deviation=>1);
19 19
20Computes the probability of x being in the interval (a,b) for normal distribution. 20Computes the probability of x being in the interval (a,b) for normal distribution.
21The first two arguments are required. Use '-infty' for negative infinity, and 'infty' or '+infty' for positive infinity. 21The first two arguments are required. Use '-infty' for negative infinity, and 'infty' or '+infty' for positive infinity.
22The mean and deviation are optional, and are 0 and 1 respectively by default. 22The mean and deviation are optional, and are 0 and 1 respectively by default.
24 24
25=cut 25=cut
26 26
27sub normal_prob { 27sub normal_prob {
28 warn 'You must also load PGnumericalmacros to use PGstatisticsmacros' unless defined(&_PGnumericalmacros_init); 28 warn 'You must also load PGnumericalmacros to use PGstatisticsmacros' unless defined(&_PGnumericalmacros_init);
29 29
30 my \$a = shift; 30 my \$a = shift;
31 my \$b = shift; 31 my \$b = shift;
32 my %options=@_; 32 my %options=@_;
33 33
34 my \$mean = \$options{'mean'} if defined (\$options{'mean'}); 34 my \$mean = \$options{'mean'} if defined (\$options{'mean'});
35 \$mean = 0 unless defined \$mean; 35 \$mean = 0 unless defined \$mean;
36 36
37 my \$deviation = \$options{'deviation'} if defined (\$options{'deviation'}); 37 my \$deviation = \$options{'deviation'} if defined (\$options{'deviation'});
38 \$deviation = 1 unless defined \$deviation; 38 \$deviation = 1 unless defined \$deviation;
39 39
40 if (\$deviation <= 0) { 40 if (\$deviation <= 0) {
41 warn 'Deviation must be a positive number.'; 41 warn 'Deviation must be a positive number.';
42 return; 42 return;
43 } 43 }
44 44
45 my \$z_score_of_a; 45 my \$z_score_of_a;
46 my \$z_score_of_b; 46 my \$z_score_of_b;
47 47
48 if ( \$a eq '-infty' ) { 48 if ( \$a eq '-infty' ) {
49 \$z_score_of_a = -6; 49 \$z_score_of_a = -6;
50 } else { 50 } else {
51 \$z_score_of_a = (\$a - \$mean)/\$deviation; 51 \$z_score_of_a = (\$a - \$mean)/\$deviation;
52 } 52 }
53 53
54 if ((\$b eq 'infty') or (\$b eq '+infty')) { 54 if ((\$b eq 'infty') or (\$b eq '+infty')) {
55 \$z_score_of_b = 6; 55 \$z_score_of_b = 6;
56 } else { 56 } else {
57 \$z_score_of_b = (\$b - \$mean)/\$deviation; 57 \$z_score_of_b = (\$b - \$mean)/\$deviation;
58 } 58 }
59 59
60 my \$function = sub { my \$x=shift; 60 my \$function = sub { my \$x=shift;
61 \$E**(-\$x**2/2)/sqrt(2*\$PI); 61 \$E**(-\$x**2/2)/sqrt(2*\$PI);
62 }; 62 };
63 63
64 my \$prob = romberg(\$function, \$z_score_of_a, \$z_score_of_b, 8); 64 my \$prob = romberg(\$function, \$z_score_of_a, \$z_score_of_b, level => 8);
65 \$prob; 65 \$prob;
66} 66}
67 67
69 69
70=pod 70=pod
71 71
72 Usage: normal_distr(prob, mean=>0, deviation=>1); 72 Usage: normal_distr(prob, mean=>0, deviation=>1);
73 73
74Computes the positive number b such that the probability of x being in the interval (0,b) 74Computes the positive number b such that the probability of x being in the interval (0,b)
75is equal to the given probability (first argument). The mean and deviation are 75is equal to the given probability (first argument). The mean and deviation are
76optional, and are 0 and 1 respectively by default. 76optional, and are 0 and 1 respectively by default.
77Caution: since students may use tables, they may only be able to provide the answer correct to 2 or 3 77Caution: since students may use tables, they may only be able to provide the answer correct to 2 or 3
78decimal places. Use tolerance when evaluating answers. 78decimal places. Use tolerance when evaluating answers.
79Load PGnumericalmacros.pl if you use this method. 79Load PGnumericalmacros.pl if you use this method.
80 80
81=cut 81=cut
82 82
83sub normal_distr { 83sub normal_distr {
84 warn 'You must also load PGnumericalmacros to use PGstatisticsmacros' unless defined(&_PGnumericalmacros_init); 84 warn 'You must also load PGnumericalmacros to use PGstatisticsmacros' unless defined(&_PGnumericalmacros_init);
85 85
86 my \$prob = shift; 86 my \$prob = shift;
87 my %options=@_; 87 my %options=@_;
88 88
89 my \$mean = \$options{'mean'} if defined (\$options{'mean'}); 89 my \$mean = \$options{'mean'} if defined (\$options{'mean'});
90 \$mean = 0 unless defined \$mean; 90 \$mean = 0 unless defined \$mean;
91 91
92 my \$deviation = \$options{'deviation'} if defined (\$options{'deviation'}); 92 my \$deviation = \$options{'deviation'} if defined (\$options{'deviation'});
93 \$deviation = 1 unless defined \$deviation; 93 \$deviation = 1 unless defined \$deviation;
94 94
95 if (\$deviation <= 0) { 95 if (\$deviation <= 0) {
96 warn 'Deviation must be a positive number.'; 96 warn 'Deviation must be a positive number.';
103 103
104 my \$z_score_of_b = inv_romberg(\$function, 0, \$prob); 104 my \$z_score_of_b = inv_romberg(\$function, 0, \$prob);
105 105
106 my \$b = \$z_score_of_b * \$deviation + \$mean; 106 my \$b = \$z_score_of_b * \$deviation + \$mean;
107 \$b; 107 \$b;
108} 108}
109 109
110########################################## 110##########################################
111 111
1121; 1121;
113 113

Legend:
 Removed from v.728 changed lines Added in v.729