** Probability Exponential Density Calculator and eTCL Slot Calculator Demo Example ** 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. 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. 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 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. 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 is defaulted to 0.0014, but 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 **** ---- **** Testcase 2 **** ---- **** Testcase 3 **** ---- **** Testcase 4 **** ---- ***Screenshots Section*** ****figure 1.**** [http://s1.postimg.org/7nrwm5lnz/sumerian_bronze_calculator_TCL_WIKI_2.png] ---- ***References:*** * On Dairy Productivity ---- **Appendix Code** ***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 =t2:} lappend names {time interval hours = t1 only : } lappend names {probability interval =>t2 to =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 0.001 if {$side4 >= 0.001 } {set expcoeff $side4} set excoef [* $uptohours $expcoeff -1.] set probability [- 1. [exp $excoef ]] set probability_gt_t1 [- 1. $probability] 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 =t2 | |& " puts "&| $side3 :|interval maximum hours =< t3| |& " puts "&| $side4 :| exponential density coefficient (optional) | |&" puts "&| $side5 :| probability up to =t1| |&" puts "&| $side7 :|probability interval =>t2 to =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, [http://tcl.tk/software/tcltk/license.html%|%this license]. **Comments Section** <> Please place any comments here, Thanks. <> Numerical Analysis | Toys | Calculator | Mathematics| Example