Updated 2016-04-24 20:31:25 by gold

Probability Exponential Density Calculator and eTCL Slot Calculator Demo Example  edit

This page is under development. Comments are welcome, but please load any comments in the comments section at the bottom of the page. Please include your wiki MONIKER in your comment with the same courtesy that I will give you. Its very hard to reply intelligibly without some background of the correspondent. Thanks,gold

gold Here is some eTCL starter code for probability and the exponential density function for modeling product lifetimes. The impetus for these calculations was checking product lifetimes in some lightbulbs. Most of the testcases involve replicas or models, using assumptions and rules of thumb.

Testcases edit

In planning any software, it is advisable to gather a number of testcases to check the results of the program. Additional significant figures are used to check the eTCL calculator, not to infer the accuracy of inputs and product reports. The product lifetime for the testcases was greater than 750 hours and the exponential coefficient was 1/750, 0.00133, or rounded up to even significant figures, 0.0014. Using 0.0014 as the exponential density coefficient, the following three testcases were run.

1) The probability for product lifetime up to 500 hours was 0.5034 in the eTCL calculator. The hand calculator returned 1.-exp({-0.0014*500.}),0.5034146. The probability for product lifetime of the interval between 1000 and 1500 hours was 0.1241 from eTCL. The hand calculator returned (1.-exp({* -0.0014 1500. })) -(1.-exp({* -0.0014 1000. })), 0.12414050.

2) The probability for product lifetime up to 1000 hours was 0.7534 in the eTCL calculator. The hand calculator returned 1.-exp({-0.0014*1000.}), 0.7534030. The probability for product lifetime of the interval between 1200 and 1500 hours was 0.06391 from eTCL. The hand calculator returned (1.-exp({* -0.0014 1500. })) -(1.-exp({* -0.0014 1200. })), 0.06391750.

3) The probability for product lifetime up to 1200 hours was 0.8136 in the eTCL calculator. The hand calculator returned 1.-exp({-0.0014*1200.}), 0.8136260. The probability for product lifetime of the interval between 1200 and 2000 hours was 0.0616 from eTCL. The hand calculator returned (1.-exp({* -0.0014 2000. })) -(1.-exp({* -0.0014 1200. })), 0.061646360. The eTCL calculator is working well in the expected operating range.

Using the three testcases, another way to check the internal consistency is to use similar time intervals. For example, enter time1=500 hours, time2=0.000001 hours, and time3=500 hours. The result for the first interval between zero and 500 hours is 0.5034146962085905 and the second interval between 0.00001 and 500 hours is 0.5034146948085905, showing agreement to 3 significant figures. Similar intervals for zero/0.000001 to 1000 shows 0.7534030360583935 and 0.7534030346583935 and for zero/0.000001 to 1200 shows 0.81362602396059 and 0.81362602256059. Since the lower limit, 1E-6 hours only approximates zero, differences between interval evaluations can be expected at 6 decimal places and beyond. For another internal consistency check, since the area of the exponential density function is equal to unity between zero and infinity in the plus direction, the eTCL calculator returns ~1 for large intervals of time (time1>>10000.). For example, enter time1=10000 hours, time2=0.000001 hours, and time3=10000 hours and the result is 0.99999916, approaching unity.

The eTCL calculator used an exponential density coefficient, which can be converted from most incandescent lightbulb packaging or specs. The original formula was mean or average, expected product lifetime equals 1/coefficient. Rearranging terms, the exponential coefficient equals 1/lifetime. A solution using the exponential density coefficient has to keep the time units consistent, whether hours, minutes, or years. One standard 60-watt light bulb cited 1.4 years use for 3 hours a day, converting years*hours*days_in_year, 1.4*365*3, 1533 hours. The suggested coefficient was 1/(1533 hours) or 0.00065 for the standard bulb. One extralife 60-watt light bulb cited 1.8 years use for 3 hours a day, converting years*hours*days_in_year, 1.8*365*3, 1972 hours. The suggested coefficient was 1/(1972 hours) or 0.00050 for the extralife bulb. Using round numbers, compare the standard bulb to the extralife bulb, both at 1500 hours use. Solve {1500,750,1500,0.00065} in the eTCL calculator for the standard bulb and solve {1500,750,1500,0.0005} for the extralife bulb. The probability for the standard bulb lasting longer than 1500 hours was 0.397. The probability for the extralife bulb lasting longer than 1500 hours was 0.472. Considering the halflife period of the standard bulb from 0.0001 to 750 hours (1500/2), the probability for the standard bulb was 0.386 and the extralife bulb was 0.315 in the halflife interval. There was lower probability of the extralife bulb expiring during the first 750 hours of life.

Extended Uses for Calculator edit

A famous coffee shop has long lines in the morning and some reduced customers in midmorning. What is the probability that successive customers will arrive between 2 to 4 minutes and the probability that successive arrivals will be more than 10 minutes apart? Customer arrivals by the minute were were averaged {+ 2 2 1 2 2 1 1 2 2 5 2 2 5 10 3 15 10 12 2 10 11 5 10 12 2 } /25, 131 minutes/25 customers, 5.24 minutes. The exponential coefficient was 1/5.24, 0.190839. In the eTCL calculator, load time1(10), time2(2), time3(4), and coefficient(0.191). From the eTCL calculator, the probability that customers will arrive in the interval between 2 to 4 minutes is 0.2167 . The probability that successive customers will arrive more than 10 minutes apart is 0.148 . As a bonus finding from the eTCL calculator, the probability that successive customers will arrive between zero and 10 minutes (t1<10) is 0.851. Clearly, the bulk of the customers will arrive within 10 minutes apart.

A certain car tire was rated at 10000 or 1E4 kilometers. What is the probability the tire will last longer than 10000 kilometers? The exponential coefficient was 1/(1E4 kilometers), 1E-4, or 0.0001. The coefficient was found for kilometers distance (not time! ) and the corresponding interval limits for t1,t2, and t3 should be kilometers. The eTCL calculator will accept engineering notation as powers of 10, which is useful for large numbers. In the eTCL calculator, load t1(1E4), t2(1E-6), t3(1E4), and coefficient(1E-4). The probability that the tire will last more than 1E4 kilometers is 0.368. The loading used similar intervals, so 0.632 appeared twice in the display as solution up to t1 and the interval between t2 and t3. For check on solutions, the probabilities before t1 (0.632) and after t1 (0.368) should sum to unity, {+ 0.632 0.368 } = ? 1.0.

Continuing with the tire problem, the calculator can address duration of tire use. What is the probability the tire will last longer than 100 weeks? Suppose the driver travel averaged 100 km per week, then the tire upper limit was 10000 km /100 km per week or 100 weeks of driving. Now the exponential coefficient can be linked to time, the coefficient was 1/(100 weeks) or 0.01. In the eTCL calculator, load time1(100), time2(1E-6), time3(100), and coefficient(0.01). The probability that the tire will last more than 100 weeks is 0.368 from eTCL. The probability is the same number as before, but in a different units context. One sees different sales pitches for tires that last 10000 km or two years, (100 weeks /52 weeks per year), depending on average consumer driving.

Procedures edit

For the eTCL calculator, the recommended procedure is push testcase and fill frame to initialize the display. Then change first three entries etc, and push solve. The coefficient for the exponential density function can be changed for different testcases. The calculations for the first interval up to time1 and the second interval between time2 and time3 are carried in separate tracks inside the eTCL program. Meaning, changing time1 will not effect the calculations for time2 and time3. Report allows copy and paste from console.

Pseudocode and Equations

  liters = [* volume_in_cubic_cm .001]
  price? = raw materials + labor  +  profit
  price? = raw materials + heat process
  price? = raw materials + labor 
  average price per unit  = revenue  / units sold

Testcases Section

In planning any software, it is advisable to gather a number of testcases to check the results of the program. The math for the testcases can be checked by pasting statements in the TCL console. Aside from the TCL calculator display, when one presses the report button on the calculator, one will have console show access to the capacity functions (subroutines).

Testcase 1

table 1printed in tcl wiki format
quantity value comment, if any
testcase number:1
500.0 :up to hours =<t1 only
1000.0 :interval minimum hours =>t2
1500.0 :interval maximum hours =< t3
0.0014 : exponential density coefficient (optional)
0.503 : probability up to =<t1 only
0.496 :probability =>t1
0.124 :probability interval =>t2 to =<t3
1.0 :probability =<t1+=>t1 approx unity


Testcase 2

table 2printed in tcl wiki format
quantity value comment, if any
testcase number:2
1000.0 :up to hours =<t1 only
1200.0 :interval minimum hours =>t2
1500.0 :interval maximum hours =< t3
0.0014 : exponential density coefficient (optional)
0.753 : probability up to =<t1 only
0.246 :probability =>t1
0.063 :probability interval =>t2 to =<t3
1.0 :probability =<t1+=>t1 approx unity


Testcase 3

table 3printed in tcl wiki format
quantity value comment, if any
testcase number:3
1200.0 :up to hours =<t1 only
1500.0 :interval minimum hours =>t2
2000.0 :interval maximum hours =< t3
0.0014 : exponential density coefficient (optional)
0.813 : probability up to =<t1 only
0.186 :probability =>t1
0.0616 :probability interval =>t2 to =<t3
1.0 :probability =<t1+=>t1 approx unity


Screenshots Section

figure 1.


References:

  • On Dairy Productivity

Appendix Code edit

appendix TCL programs and scripts

   
        # pretty print from autoindent and ased editor
        # Product lifetime exponential density calculator
        # written on Windows XP on eTCL
        # working under TCL version 8.5.6 and eTCL 1.0.1
        # gold on TCL WIKI, 15oct2014
        package require Tk
        namespace path {::tcl::mathop ::tcl::mathfunc}
        frame .frame -relief flat -bg aquamarine4
        pack .frame -side top -fill y -anchor center
        set names {{} {time up to hours =<t1:} }
        lappend names {time interval hours =>t2:}
        lappend names {time interval hours =<t3: }
        lappend names {exponential density coefficient (optional) :}
        lappend names {answers : probability =< t1 only:}
        lappend names {probability => t1 only : }
        lappend names {probability interval =>t2 to =<t3): }
        lappend names {probability =< t1 + =>t1 only , ~ unity :}
        foreach i {1 2 3 4 5 6 7 8} {
            label .frame.label$i -text [lindex $names $i] -anchor e
            entry .frame.entry$i -width 35 -textvariable side$i
            grid .frame.label$i .frame.entry$i -sticky ew -pady 2 -padx 1 }
        proc about {} {
            set msg "Calculator for Product lifetime exponential density
            from TCL WIKI,
            written on eTCL "
            tk_messageBox -title "About" -message $msg }       
        proc calculate {     } {
            global answer2
            global side1 side2 side3 side4 side5
            global side6 side7 side8
            global testcase_number
            incr testcase_number 
            set side1 [* $side1 1. ]
            set side2 [* $side2 1. ]
            set side3 [* $side3 1. ]
            set side4 [* $side4 1. ]
            set side5 [* $side5 1. ]
            set uptohours $side1
            set expcoeff $side4
            set excoef  [* $uptohours $expcoeff -1.]
            set probability [- 1. [exp  $excoef ]]
            set probability_gt_t1 [exp  $excoef ]
            set excoef1  [* $side2 $expcoeff -1.]
            set excoef2  [* $side3 $expcoeff -1.]
            set term1 [- 1. [exp  $excoef1 ]]
            set term2 [- 1. [exp  $excoef2 ]]
            set probability_interval [- $term2 $term1 ]
            set side5 [* $probability 1. ]
            set side6 [* $probability_gt_t1 1. ]
            set side7 [* $probability_interval 1. ]
            set side8 [+  $probability  $probability_gt_t1 ] }
        proc fillup {aa bb cc dd ee ff gg hh} {
            .frame.entry1 insert 0 "$aa"
            .frame.entry2 insert 0 "$bb"
            .frame.entry3 insert 0 "$cc"
            .frame.entry4 insert 0 "$dd"
            .frame.entry5 insert 0 "$ee"
            .frame.entry6 insert 0 "$ff" 
            .frame.entry7 insert 0 "$gg"
            .frame.entry8 insert 0 "$hh" 
             }
        proc clearx {} {
            foreach i {1 2 3 4 5 6 7 8 } {
                .frame.entry$i delete 0 end } }
        proc reportx {} {
            global side1 side2 side3 side4 side5
            global side6 side7 side8 
            global testcase_number
            console show;
            puts "%|table $testcase_number|printed in| tcl wiki format|% "
            puts "&| quantity| value| comment, if any|& "
            puts "&| testcase number:|$testcase_number | |&"
            puts "&| $side1 :|up to hours =<t1 only|   |&"
            puts "&| $side2 :|interval minimum hours =>t2 | |& "
            puts "&| $side3 :|interval maximum hours =< t3| |& "
            puts "&| $side4 :| exponential density coefficient (optional) |  |&"
            puts "&| $side5  :| probability up to =<t1 only|  |&"
            puts "&| $side6  :|probability  =>t1|  |&"
            puts "&| $side7  :|probability interval =>t2 to =<t3  |  |&"
            puts "&| $side8  :|probability =<t1+=>t1   | approx unity |&"
         }
        frame .buttons -bg aquamarine4
        ::ttk::button .calculator -text "Solve" -command { calculate   }
        ::ttk::button .test2 -text "Testcase1" -command {clearx;fillup 500.0 1000.0 1500.0 0.0014  0.50 0.49 0.124 1.}
        ::ttk::button .test3 -text "Testcase2" -command {clearx;fillup 1000.0 1200.0 1500.0 0.0014  0.75 0.24 0.064 1. }
        ::ttk::button .test4 -text "Testcase3" -command {clearx;fillup 1200.00 1500.0 2000.0 0.0014 0.813 0.18 0.0616 1. }
        ::ttk::button .clearallx -text clear -command {clearx }
        ::ttk::button .about -text about -command about
        ::ttk::button .cons -text report -command { reportx }
        ::ttk::button .exit -text exit -command {exit}
        pack .calculator  -in .buttons -side top -padx 10 -pady 5
        pack  .clearallx .cons .about .exit .test4 .test3 .test2   -side bottom -in .buttons
        grid .frame .buttons -sticky ns -pady {0 10}
        . configure -background aquamarine4 -highlightcolor brown -relief raised -border 30
        wm title . "Product Lifetime and Exponential Density Calculator "

Pushbutton Operation

For the push buttons, the recommended procedure is push testcase and fill frame, change first three entries etc, push solve, and then push report. Report allows copy and paste from console.

For testcases in a computer session, the eTCL calculator increments a new testcase number internally, eg. TC(1), TC(2) , TC(3) , TC(N). The testcase number is internal to the calculator and will not be printed until the report button is pushed for the current result numbers. The current result numbers will be cleared on the next solve button. The command { calculate; reportx } or { calculate ; reportx; clearx } can be added or changed to report automatically. Another wrinkle would be to print out the current text, delimiters, and numbers in a TCL wiki style table as
  puts " %| testcase $testcase_number | value| units |comment |%"
  puts " &| volume| $volume| cubic meters |based on length $side1 and width $side2   |&"  

gold This page is copyrighted under the TCL/TK license terms, this license.

Comments Section edit

Please place any comments here, Thanks.