#BEGIN OUTFILE1 # before write_ruby top matter ALWAYS = 1 INFO = 2 DEBUGL = 3 DEBUGMASSIVE = 4 MAX_UNCHANGED = 10 MAX_TERMS = 20 # before write_ats library and user def block #BEGIN ATS LIBRARY BLOCK # Begin Function number 2 def omniout_str(iolevel,str) if ($glob_iolevel >= iolevel) then # if number 1 puts str end# end if 1 end # End Function number 2 # Begin Function number 3 def omniout_str_noeol(iolevel,str) if ($glob_iolevel >= iolevel) then # if number 1 printf("%s", str) end# end if 1 end # End Function number 3 # Begin Function number 4 def omniout_labstr(iolevel,label,str) if ($glob_iolevel >= iolevel) then # if number 1 puts label + str end# end if 1 end # End Function number 4 # Begin Function number 5 def omniout_float(iolevel,prelabel,prelen,value,vallen,postlabel) if ($glob_iolevel >= iolevel) then # if number 1 puts prelabel.ljust(30) + value.to_s + postlabel end# end if 1 end # End Function number 5 # Begin Function number 6 def omniout_int(iolevel,prelabel,prelen,value,vallen,postlabel) if ($glob_iolevel >= iolevel) then # if number 1 puts prelabel.ljust(32) + value.to_s + postlabel end# end if 1 end # End Function number 6 # Begin Function number 7 def omniout_float_arr(iolevel,prelabel,elemnt,prelen,value,vallen,postlabel) if ($glob_iolevel >= iolevel) then # if number 1 puts (prelabel.ljust(12) + " " + elemnt.to_s + " " + value.to_s + " " + postlabel) end# end if 1 end # End Function number 7 # Begin Function number 8 def dump_series(iolevel,dump_label,series_name,arr_series,numb) if ($glob_iolevel >= iolevel) then # if number 1 i = 1 while (i <= numb) do puts dump_label + series_name + "[" + i.to_s + "]" + arr_series[i].to_s i += 1 end end end # End Function number 8 # Begin Function number 9 def dump_series_2(iolevel,dump_label,series_name2,arr_series2,numb,subnum,arr_x) if ($glob_iolevel >= iolevel) then # if number 2 sub = 1; while (sub <= subnum) do i = 1; while (i <= numb) do puts dump_label + series_name2 + "[" + sub.to_s + "," + i.to_s + "]" + arr_series2[sub,i].to_s end# end do number 0 sub += 1; end# end do number -1 end# end if 2 end # End Function number 9 # Begin Function number 10 def cs_info(iolevel,str) if ($glob_iolevel >= iolevel) then # if number 2 puts "cs_info " + str + " $glob_correct_start_flag = " , $glob_correct_start_flag.to_s + "$glob_h := " + $glob_h + "$glob_reached_optimal_h := " + $glob_reached_optimal_h end# end if 2 end # End Function number 10 # Begin Function number 11 def logitem_time(fd,secs_in) fd.printf("") if (secs_in >= 0) then # if number 2 years_int = int_trunc(secs_in / $glob_sec_in_year) sec_temp = (secs_in % $glob_sec_in_year) days_int = int_trunc(sec_temp / $glob_sec_in_day) sec_temp = (sec_temp % $glob_sec_in_day) hours_int = int_trunc(sec_temp / $glob_sec_in_hour) sec_temp = (sec_temp % $glob_sec_in_hour) minutes_int = int_trunc(sec_temp / $glob_sec_in_minute) sec_int = (sec_temp % $glob_sec_in_minute) if (years_int > 0) then # if number 3 fd.printf(years_int.to_s + " Years " + days_int.to_s + " Days " + hours_int.to_s + " Hours " + minutes_int.to_s + " Minutes " + sec_int.to_s + " Seconds") elsif (days_int > 0) then # if number 4 fd.printf(days_int.to_s + " Days " + hours_int.to_s + " Hours " + minutes_int.to_s + " Minutes " + sec_int.to_s + " Seconds") elsif (hours_int > 0) then # if number 5 fd.printf(hours_int.to_s + " Hours " + minutes_int.to_s + " Minutes " + sec_int.to_s + " Seconds") elsif (minutes_int > 0) then # if number 6 fd.printf(minutes_int.to_s + " Minutes " + sec_int.to_s + " Seconds") else fd.printf(sec_int.to_s + " Seconds") end# end if 6 else fd.printf(" 0.0 Seconds") end# end if 5 fd.printf("") end # End Function number 11 # Begin Function number 12 def omniout_timestr(secs_in) if (secs_in >= 0) then # if number 5 years_int = int_trunc(secs_in / $glob_sec_in_year) sec_temp = (secs_in % $glob_sec_in_year) days_int = int_trunc(sec_temp / $glob_sec_in_day) sec_temp = (sec_temp % $glob_sec_in_day) hours_int = int_trunc(sec_temp / $glob_sec_in_hour) sec_temp = (sec_temp % $glob_sec_in_hour) minutes_int = int_trunc(sec_temp / $glob_sec_in_minute) sec_int = (sec_temp % $glob_sec_in_minute) if (years_int > 0) then # if number 6 puts years_int.to_s + " Years " + days_int.to_s + " Days " + hours_int.to_s + " Hours " + minutes_int.to_s + " Minutes " + sec_int.to_s + " Seconds" elsif (days_int > 0) then # if number 7 puts days_int.to_s + " Days " + hours_int.to_s + " Hours " + minutes_int.to_s + " Minutes " + sec_int.to_s + " Seconds" elsif (hours_int > 0) then # if number 8 puts hours_int.to_s + " Hours " + minutes_int.to_s + " Minutes " + sec_int.to_s + " Seconds" elsif (minutes_int > 0) then # if number 9 puts minutes_int.to_s + " Minutes " + sec_int.to_s + " Seconds" else puts sec_int.to_s + " Seconds" end# end if 9 else puts " 0.0 Seconds" end# end if 8 end # End Function number 12 # Begin Function number 13 def zero_ats_ar(arr_a) iii = 1 while (iii <= MAX_TERMS) do # do number -1 arr_a [iii] = 0.0 iii = iii + 1 end# end do number -1 end # End Function number 13 # Begin Function number 14 def ats(mmm_ats,arr_a,arr_b,jjj_ats) ret_ats = 0.0 if (jjj_ats <= mmm_ats) then # if number 8 ma_ats = mmm_ats + 1 iii_ats = jjj_ats while (iii_ats <= mmm_ats) do # do number -1 lll_ats = ma_ats - iii_ats if ((lll_ats <= MAX_TERMS and (iii_ats <= MAX_TERMS) )) then # if number 9 ret_ats = ret_ats + arr_a[iii_ats]*arr_b[lll_ats] end# end if 9 iii_ats = iii_ats + 1 end# end do number -1 end# end if 8 return ( ret_ats) end # End Function number 14 # Begin Function number 15 def att(mmm_att,arr_aa,arr_bb,jjj_att) ret_att = 0.0 if (jjj_att < mmm_att) then # if number 8 ma_att = mmm_att + 2 iii_att = jjj_att while ((iii_att < mmm_att) and (iii_att <= MAX_TERMS) ) do # do number -1 lll_att = ma_att - iii_att al_att = (lll_att - 1) if ((lll_att <= MAX_TERMS and (iii_att <= MAX_TERMS) )) then # if number 9 ret_att = ret_att + arr_aa[iii_att]*arr_bb[lll_att]* (al_att) end# end if 9 iii_att = iii_att + 1 end# end do number -1 ret_att = ret_att / (mmm_att) end# end if 8 return ( ret_att) end # End Function number 15 # Begin Function number 16 def logditto(file) file.printf("") file.printf("ditto") file.printf("") end # End Function number 16 # Begin Function number 17 def logitem_integer(file,n) file.printf("") file.printf("%d",n) file.printf("") end # End Function number 17 # Begin Function number 18 def logitem_str(file,str) file.printf("") file.printf(str) file.printf("") end # End Function number 18 # Begin Function number 19 def logitem_good_digits(file,rel_error) file.printf("") if (rel_error != -1.0) then # if number 8 if (rel_error > + 0.0000000000000000000000000000000001) then # if number 9 good_digits = 3-int_trunc(log10(rel_error)) file.printf("%d",good_digits) else good_digits = 16 file.printf("%d",good_digits) end# end if 9 else file.printf("Unknown") end# end if 8 file.printf("") end # End Function number 19 # Begin Function number 20 def log_revs(file,revs) file.printf(revs.to_s) end # End Function number 20 # Begin Function number 21 def logitem_float(file,x) file.printf("") file.printf(x.to_s) file.printf("") end # End Function number 21 # Begin Function number 22 def logitem_pole(file,pole) file.printf("") if pole == 0 then # if number 8 file.printf("NA") elsif pole == 1 then # if number 9 file.printf("Real") elsif pole == 2 then # if number 10 file.printf("Complex") elsif pole == 4 then # if number 11 file.printf("Yes") else file.printf("No") end# end if 11 file.printf("") end # End Function number 22 # Begin Function number 23 def logstart(file) file.printf("") end # End Function number 23 # Begin Function number 24 def logend(file) file.printf("") end # End Function number 24 # Begin Function number 25 def chk_data() errflag = false if ($glob_max_iter < 2) then # if number 11 omniout_str(ALWAYS,"Illegal max_iter") errflag = true end# end if 11 if (errflag) then # if number 11 end# end if 11 end # End Function number 25 # Begin Function number 26 def comp_expect_sec(t_end2,t_start2,t2,clock_sec2) ms2 = clock_sec2 sub1 = (t_end2-t_start2) sub2 = (t2-t_start2) if (sub1 == 0.0) then # if number 11 sec_left = 0.0 else if (sub2 > 0.0) then # if number 12 rrr = (sub1/sub2) sec_left = rrr * ms2 - ms2 else sec_left = 0.0 end# end if 12 end# end if 11 return ( sec_left) end # End Function number 26 # Begin Function number 27 def comp_percent(t_end2,t_start2, t2) sub1 = (t_end2-t_start2) sub2 = (t2-t_start2) if (sub2 > $glob_small_float) then # if number 11 rrr = (100.0*sub2)/sub1 else rrr = 0.0 end# end if 11 return ( rrr) end # End Function number 27 # Begin Function number 28 def comp_rad_from_ratio(term1,term2,last_no) #TOP TWO TERM RADIUS ANALYSIS if (term2 > 0.0) then # if number 11 ret = float_abs(term1 * $glob_h / term2) else ret = $glob_large_float end# end if 11 return ( ret) #BOTTOM TWO TERM RADIUS ANALYSIS end # End Function number 28 # Begin Function number 29 def comp_ord_from_ratio(term1,term2,last_no) #TOP TWO TERM ORDER ANALYSIS if (term2 > 0.0) then # if number 11 ret = 1.0 + float_abs(term2) * convfloat(last_no) * ln(float_abs(term1 * $glob_h / term2))/ln(convfloat(last_no)) else ret = $glob_large_float end# end if 11 return ( ret) #BOTTOM TWO TERM ORDER ANALYSIS end # End Function number 29 # Begin Function number 30 def comp_rad_from_three_terms(term1,term2,term3,last_no) #TOP THREE TERM RADIUS ANALYSIS temp = float_abs(term2*term2*convfloat(last_no)-2.0*term2*term2-term1*term3*convfloat(last_no)+term1*term3) if (temp > 0.0) then # if number 11 ret = float_abs((term2*$glob_h*term1)/(temp)) else ret = $glob_large_float end# end if 11 return ( ret) #BOTTOM THREE TERM RADIUS ANALYSIS end # End Function number 30 # Begin Function number 31 def comp_ord_from_three_terms(term1,term2,term3,last_no) #TOP THREE TERM ORDER ANALYSIS ret = float_abs((4.0*term1*term3*convfloat(last_no)-3.0*term1*term3-4.0*term2*term2*convfloat(last_no)+4.0*term2*term2+term2*term2*convfloat(last_no*last_no)-term1*term3*convfloat(last_no*last_no))/(term2*term2*convfloat(last_no)-2.0*term2*term2-term1*term3*convfloat(last_no)+term1*term3)) return ( ret) #TOP THREE TERM ORDER ANALYSIS end # End Function number 31 # Begin Function number 32 def comp_rad_from_six_terms(term1,term2,term3,term4,term5,term6,last_no) #TOP SIX TERM RADIUS ANALYSIS if ((term5 != 0.0) and (term4 != 0.0) and (term3 != 0.0) and (term2 != 0.0) and (term1 != 0.0)) then # if number 11 rm0 = term6/term5 rm1 = term5/term4 rm2 = term4/term3 rm3 = term3/term2 rm4 = term2/term1 nr1 = convfloat(last_no-1)*rm0 - 2.0*convfloat(last_no-2)*rm1 + convfloat(last_no-3)*rm2 nr2 = convfloat(last_no-2)*rm1 - 2.0*convfloat(last_no-3)*rm2 + convfloat(last_no-4)*rm3 dr1 = (-1.0)/rm1 + 2.0/rm2 - 1.0/rm3 dr2 = (-1.0)/rm2 + 2.0/rm3 - 1.0/rm4 ds1 = 3.0/rm1 - 8.0/rm2 + 5.0/rm3 ds2 = 3.0/rm2 - 8.0/rm3 + 5.0/rm4 if ((float_abs(nr1 * dr2 - nr2 * dr1) == 0.0) or (float_abs(dr1) == 0.0)) then # if number 12 rad_c = $glob_large_float ord_no = $glob_large_float else if (float_abs(nr1*dr2 - nr2 * dr1) != 0.0) then # if number 13 rcs = ((ds1*dr2 - ds2*dr1 +dr1*dr2)/(nr1*dr2 - nr2 * dr1)) #(Manuels) rcs = (ds1*dr2 - ds2*dr1)/(nr1*dr2 - nr2 * dr1) ord_no = (rcs*nr1 - ds1)/(2.0*dr1) -convfloat(last_no)/2.0 if (float_abs(rcs) != 0.0) then # if number 14 if (rcs > 0.0) then # if number 15 rad_c = sqrt(rcs) * float_abs($glob_h) else rad_c = $glob_large_float ord_no = $glob_large_float end# end if 15 else rad_c = $glob_large_float ord_no = $glob_large_float end# end if 14 else rad_c = $glob_large_float ord_no = $glob_large_float end# end if 13 end# end if 12 else rad_c = $glob_large_float ord_no = $glob_large_float end# end if 11 $glob_six_term_ord_save = ord_no return ( rad_c) #BOTTOM SIX TERM RADIUS ANALYSIS end # End Function number 32 # Begin Function number 33 def comp_ord_from_six_terms(term1,term2,term3,term4,term5,term6,last_no) #TOP SIX TERM ORDER ANALYSIS #TOP SAVED FROM SIX TERM RADIUS ANALYSIS return ( $glob_six_term_ord_save) #BOTTOM SIX TERM ORDER ANALYSIS end # End Function number 33 # Begin Function number 34 def factorial_2(nnn) if (nnn > 0) then # if number 11 return ( nnn * factorial_2(nnn - 1)) else return ( 1.0) end# end if 11 end # End Function number 34 # Begin Function number 35 def factorial_1(nnn) if (nnn <= MAX_TERMS) then # if number 11 if ($array_fact_1[nnn] == 0) then # if number 12 ret = factorial_2(nnn) $array_fact_1[nnn] = ret else ret = $array_fact_1[nnn] end# end if 12 else ret = factorial_2(nnn) end# end if 11 return ( ret) end # End Function number 35 # Begin Function number 36 def factorial_3(mmm,nnn) if ((nnn <= MAX_TERMS) and (mmm <= MAX_TERMS)) then # if number 11 if ($array_fact_2[mmm][nnn] == 0) then # if number 12 ret = factorial_1(mmm)/factorial_1(nnn) $array_fact_2[mmm][nnn] = ret else ret = $array_fact_2[mmm][nnn] end# end if 12 else ret = factorial_2(mmm)/factorial_2(nnn) end# end if 11 return ( ret) end # End Function number 36 # Begin Function number 37 def convfloat(mmm) return(mmm.to_f) end # End Function number 37 # Begin Function number 38 def elapsed_time_seconds() t = Time.now return(t.to_i) end # End Function number 38 # Begin Function number 39 def expt(x,y) if ((x <= 0.0) and (y < 0.0)) then # if number 11 puts "expt error x = " + x.to_s + "y = " + y.to_s end# end if 11 return(x**y) end # End Function number 39 # Begin Function number 40 def Si(x) return(0.0) end # End Function number 40 # Begin Function number 41 def Ci(x) return(0.0) end # End Function number 41 # Begin Function number 42 def float_abs(x) return(x.abs) end # End Function number 42 # Begin Function number 43 def int_abs(x) return(x.abs) end # End Function number 43 # Begin Function number 44 def exp(x) return(Math.exp(x)) end # End Function number 44 # Begin Function number 45 def int_trunc(x) return(x.to_i) end # End Function number 45 # Begin Function number 46 def floor(x) return(x.floor) end # End Function number 46 # Begin Function number 47 def sin(x) return(Math.sin(x)) end # End Function number 47 # Begin Function number 48 def cos(x) return(Math.cos(x)) end # End Function number 48 # Begin Function number 49 def tan(x) return(Math.tan(x)) end # End Function number 49 # Begin Function number 50 def arccos(x) return(Math.acos(x)) end # End Function number 50 # Begin Function number 51 def arccosh(x) return(Math.acosh(x)) end # End Function number 51 # Begin Function number 52 def arcsin(x) return(Math.asin(x)) end # End Function number 52 # Begin Function number 53 def arcsinh(x) return(Math.asinh(x)) end # End Function number 53 # Begin Function number 54 def arctan(x) return(Math.atan(x)) end # End Function number 54 # Begin Function number 55 def arctanh(x) return(Math.atanh(x)) end # End Function number 55 # Begin Function number 56 def cosh(x) return(Math.cosh(x)) end # End Function number 56 # Begin Function number 57 def erf(x) return(Math.erf(x)) end # End Function number 57 # Begin Function number 58 def ln(x) return(Math.log(x)) end # End Function number 58 # Begin Function number 59 def log10(x) return(Math.log10(x)) end # End Function number 59 # Begin Function number 60 def sinh(x) return(Math.sinh(x)) end # End Function number 60 # Begin Function number 61 def tanh(x) return(Math.tanh(x)) end # End Function number 61 # Begin Function number 62 def sqrt(x) return(Math.sqrt(x)) end # End Function number 62 # Begin Function number 63 def array2d(op3,op4) i = 0 x1 = Array.new(op3.to_i + 1) while i <= op3.to_i + 1 do # do number -1 x1[i] = Array.new(op4.to_i + 1) i += 1 end# end do number -1 return x1 end # End Function number 63 # Begin Function number 64 def estimated_needed_step_error(x_start,x_end,estimated_h,estimated_answer) omniout_float(ALWAYS,"$glob_desired_digits_correct",32,$glob_desired_digits_correct,32,"") desired_abs_gbl_error = expt(10.0, -$glob_desired_digits_correct) * float_abs(estimated_answer) omniout_float(ALWAYS,"estimated_h",32,estimated_h,32,"") omniout_float(ALWAYS,"estimated_answer",32,estimated_answer,32,"") omniout_float(ALWAYS,"desired_abs_gbl_error",32,desired_abs_gbl_error,32,"") range = (x_end - x_start) omniout_float(ALWAYS,"range",32,range,32,"") estimated_steps = range / estimated_h omniout_float(ALWAYS,"estimated_steps",32,estimated_steps,32,"") step_error = float_abs(desired_abs_gbl_error / estimated_steps) omniout_float(ALWAYS,"step_error",32,step_error,32,"") return ( (step_error)) end # End Function number 64 #END ATS LIBRARY BLOCK #BEGIN USER FUNCTION BLOCK #BEGIN BLOCK 3 #BEGIN USER DEF BLOCK def exact_soln_y (x) return(1.0 / (x * x + 0.000001)) end #END USER DEF BLOCK #END BLOCK 3 #END USER FUNCTION BLOCK # before write_aux functions # Begin Function number 2 def display_poles() if ($glob_type_given_pole == 4) then # if number 1 rad_given = sqrt(($array_x[1] - $array_given_rad_poles[1][1]) * ($array_x[1] - $array_given_rad_poles[1][1]) + $array_given_rad_poles[1][2] * $array_given_rad_poles[1][2]) if (rad_given < $glob_least_given_sing) then # if number 2 $glob_least_given_sing = rad_given end# end if 2 omniout_float(ALWAYS,"Radius of convergence (given) for eq 1 ",4,rad_given,4," ") omniout_float(ALWAYS,"Order of pole (given) ",4,$array_given_ord_poles[1][1],4," ") elsif ($glob_type_given_pole == 3) then # if number 2 omniout_str(ALWAYS,"NO POLE (given) for Equation 1") else omniout_str(ALWAYS,"NO INFO (given) for Equation 1") end# end if 2 if ($array_rad_test_poles[1][1] != $glob_large_float) then # if number 2 omniout_float(ALWAYS,"Radius of convergence (ratio test) for eq 1 ",4,$array_rad_test_poles[1][1],4," ") if ($array_rad_test_poles[1][1]< $glob_least_ratio_sing) then # if number 3 $glob_least_ratio_sing = $array_rad_test_poles[1][1] end# end if 3 omniout_float(ALWAYS,"Order of pole (ratio test) ",4, $array_ord_test_poles[1][1],4," ") else omniout_str(ALWAYS,"NO POLE (ratio test) for Equation 1") end# end if 2 if (($array_rad_test_poles[1][2] > 0.0) and ($array_rad_test_poles[1][2] != $glob_large_float)) then # if number 2 omniout_float(ALWAYS,"Radius of convergence (three term test) for eq 1 ",4,$array_rad_test_poles[1][2],4," ") if ($array_rad_test_poles[1][2]< $glob_least_3_sing) then # if number 3 $glob_least_3_sing = $array_rad_test_poles[1][2] end# end if 3 omniout_float(ALWAYS,"Order of pole (three term test) ",4, $array_ord_test_poles[1][2],4," ") else omniout_str(ALWAYS,"NO REAL POLE (three term test) for Equation 1") end# end if 2 if (($array_rad_test_poles[1][3] > 0.0) and ($array_rad_test_poles[1][3] != $glob_large_float)) then # if number 2 omniout_float(ALWAYS,"Radius of convergence (six term test) for eq 1 ",4,$array_rad_test_poles[1][3],4," ") if ($array_rad_test_poles[1][3]< $glob_least_6_sing) then # if number 3 $glob_least_6_sing = $array_rad_test_poles[1][3] end# end if 3 omniout_float(ALWAYS,"Order of pole (six term test) ",4, $array_ord_test_poles[1][3],4," ") else omniout_str(ALWAYS,"NO COMPLEX POLE (six term test) for Equation 1") end# end if 2 end # End Function number 2 # Begin Function number 3 def my_check_sign( x0 ,xf) if (xf > x0) then # if number 2 ret = 1.0 else ret = -1.0 end# end if 2 return ( ret) end # End Function number 3 # Begin Function number 4 def est_size_answer() min_size = $glob_estimated_size_answer if (float_abs($array_y[1]) < min_size) then # if number 2 min_size = float_abs($array_y[1]) omniout_float(ALWAYS,"min_size",32,min_size,32,"") end# end if 2 if (min_size < 1.0) then # if number 2 min_size = 1.0 omniout_float(ALWAYS,"min_size",32,min_size,32,"") end# end if 2 return ( min_size) end # End Function number 4 # Begin Function number 5 def test_suggested_h() max_estimated_step_error = 0.0 no_terms = MAX_TERMS hn_div_ho = 0.5 hn_div_ho_2 = 0.25 hn_div_ho_3 = 0.125 omniout_float(ALWAYS,"hn_div_ho",32,hn_div_ho,32,"") omniout_float(ALWAYS,"hn_div_ho_2",32,hn_div_ho_2,32,"") omniout_float(ALWAYS,"hn_div_ho_3",32,hn_div_ho_3,32,"") est_tmp = float_abs($array_y[no_terms-3] + $array_y[no_terms - 2] * hn_div_ho + $array_y[no_terms - 1] * hn_div_ho_2 + $array_y[no_terms] * hn_div_ho_3) if (est_tmp >= max_estimated_step_error) then # if number 2 max_estimated_step_error = est_tmp end# end if 2 omniout_float(ALWAYS,"max_estimated_step_error",32,max_estimated_step_error,32,"") return ( max_estimated_step_error) end # End Function number 5 # Begin Function number 6 def reached_interval() if ($glob_check_sign * ($array_x[1]) >= $glob_check_sign * $glob_next_display) then # if number 2 ret = true else ret = false end# end if 2 return(ret) end # End Function number 6 # Begin Function number 7 def display_alot(iter) #TOP DISPLAY ALOT if (reached_interval()) then # if number 2 if (iter >= 0) then # if number 3 ind_var = $array_x[1] omniout_float(ALWAYS,"x[1] ",33,ind_var,20," ") analytic_val_y = exact_soln_y(ind_var) omniout_float(ALWAYS,"y[1] (analytic) ",33,analytic_val_y,20," ") term_no = 1 numeric_val = $array_y[term_no] abserr = float_abs(numeric_val - analytic_val_y) omniout_float(ALWAYS,"y[1] (numeric) ",33,numeric_val,20," ") if (float_abs(analytic_val_y) != 0.0) then # if number 4 relerr = abserr*100.0/float_abs(analytic_val_y) if (relerr > 0.0000000000000000000000000000000001) then # if number 5 $glob_good_digits = -int_trunc(log10(relerr)) + 3 else $glob_good_digits = 16 end# end if 5 else relerr = -1.0 $glob_good_digits = -1 end# end if 4 if ($glob_iter == 1) then # if number 4 $array_1st_rel_error[1] = relerr else $array_last_rel_error[1] = relerr end# end if 4 omniout_float(ALWAYS,"absolute error ",4,abserr,20," ") omniout_float(ALWAYS,"relative error ",4,relerr,20,"%") omniout_int(INFO,"Correct digits ",32,$glob_good_digits,4," ") omniout_float(ALWAYS,"h ",4,$glob_h,20," ") end# end if 3 #BOTTOM DISPLAY ALOT end# end if 2 end # End Function number 7 # Begin Function number 8 def adjust_for_pole(h_param) #TOP ADJUST FOR POLE hnew = h_param $glob_normmax = $glob_small_float if (float_abs($array_y_higher[1][1]) > $glob_small_float) then # if number 2 tmp = float_abs($array_y_higher[1][1]) if (tmp < $glob_normmax) then # if number 3 $glob_normmax = tmp end# end if 3 end# end if 2 if ($glob_look_poles and ($glob_min_pole_est > $glob_small_float) and ($glob_min_pole_est != $glob_large_float)) then # if number 2 sz2 = $glob_min_pole_est/10.0 if (sz2 < hnew) then # if number 3 omniout_float(INFO,"$glob_h adjusted to ",20,h_param,12,"due to singularity.") omniout_str(INFO,"Reached Optimal") return(hnew) end# end if 3 end# end if 2 if ( not $glob_reached_optimal_h) then # if number 2 $glob_reached_optimal_h = true $glob_curr_iter_when_opt = $glob_current_iter $glob_optimal_clock_start_sec = elapsed_time_seconds() $glob_optimal_start = $array_x[1] end# end if 2 hnew = sz2 #END block return ( hnew) #BOTTOM ADJUST FOR POLE end # End Function number 8 # Begin Function number 9 def prog_report(x_start,x_end) #TOP PROGRESS REPORT clock_sec1 = elapsed_time_seconds() total_clock_sec = (clock_sec1) - ($glob_orig_start_sec) $glob_clock_sec = (clock_sec1) - ($glob_clock_start_sec) left_sec = ($glob_max_sec) + ($glob_orig_start_sec) - (clock_sec1) expect_sec = comp_expect_sec((x_end),(x_start),($array_x[1]) + ($glob_h) ,( clock_sec1) - ($glob_orig_start_sec)) opt_clock_sec = ( clock_sec1) - ($glob_optimal_clock_start_sec) $glob_optimal_expect_sec = comp_expect_sec((x_end),(x_start),($array_x[1]) +( $glob_h) ,( opt_clock_sec)) $glob_total_exp_sec = $glob_optimal_expect_sec + total_clock_sec percent_done = comp_percent((x_end),(x_start),($array_x[1]) + ($glob_h)) $glob_percent_done = percent_done omniout_str_noeol(INFO,"Total Elapsed Time ") omniout_timestr((total_clock_sec)) omniout_str_noeol(INFO,"Elapsed Time(since restart) ") omniout_timestr(($glob_clock_sec)) if ((percent_done) < (100.0)) then # if number 2 omniout_str_noeol(INFO,"Expected Time Remaining ") omniout_timestr((expect_sec)) omniout_str_noeol(INFO,"Optimized Time Remaining ") omniout_timestr(($glob_optimal_expect_sec)) omniout_str_noeol(INFO,"Expected Total Time ") omniout_timestr(($glob_total_exp_sec)) end# end if 2 omniout_str_noeol(INFO,"Time to Timeout ") omniout_timestr((left_sec)) omniout_float(INFO, "Percent Done ",33,percent_done,4,"%") #BOTTOM PROGRESS REPORT end # End Function number 9 # Begin Function number 10 def check_for_pole() #TOP CHECK FOR POLE $glob_min_pole_est = $glob_large_float tmp_rad = $glob_large_float prev_tmp_rad = $glob_large_float tmp_ratio = $glob_large_float rad_c = $glob_large_float $array_rad_test_poles[1][1] = $glob_large_float $array_ord_test_poles[1][1] = $glob_large_float found_sing = 1 last_no = MAX_TERMS - 1 - 10 cnt = 0 while (last_no < MAX_TERMS-3 and found_sing == 1) do # do number 1 tmp_rad = comp_rad_from_ratio($array_y_higher[1][last_no-1],$array_y_higher[1][last_no],last_no) tmp_ratio = tmp_rad / prev_tmp_rad if ((cnt > 0 ) and (tmp_ratio < $glob_upper_ratio_limit) and (tmp_ratio > $glob_lower_ratio_limit)) then # if number 2 rad_c = tmp_rad elsif (cnt == 0) then # if number 3 rad_c = tmp_rad elsif (cnt > 0) then # if number 4 found_sing = 0 end# end if 4 prev_tmp_rad = tmp_rad cnt = cnt + 1 last_no = last_no + 1 end# end do number 1 if (found_sing == 1) then # if number 4 if (rad_c < $array_rad_test_poles[1][1]) then # if number 5 $array_rad_test_poles[1][1] = rad_c last_no = last_no - 1 tmp_ord = comp_ord_from_ratio($array_y_higher[1][last_no-1],$array_y_higher[1][last_no],last_no) $array_rad_test_poles[1][1] = rad_c $array_ord_test_poles[1][1] = tmp_ord end# end if 5 end# end if 4 #BOTTOM general radius test1 $glob_min_pole_est = $glob_large_float tmp_rad = $glob_large_float prev_tmp_rad = $glob_large_float tmp_ratio = $glob_large_float rad_c = $glob_large_float $array_rad_test_poles[1][2] = $glob_large_float $array_ord_test_poles[1][2] = $glob_large_float found_sing = 1 last_no = MAX_TERMS - 1 - 10 cnt = 0 while (last_no < MAX_TERMS-4 and found_sing == 1) do # do number 1 tmp_rad = comp_rad_from_three_terms($array_y_higher[1][last_no-2],$array_y_higher[1][last_no-1],$array_y_higher[1][last_no],last_no) tmp_ratio = tmp_rad / prev_tmp_rad if ((cnt > 0 ) and (tmp_ratio < $glob_upper_ratio_limit) and (tmp_ratio > $glob_lower_ratio_limit)) then # if number 4 rad_c = tmp_rad elsif (cnt == 0) then # if number 5 rad_c = tmp_rad elsif (cnt > 0) then # if number 6 found_sing = 0 end# end if 6 prev_tmp_rad = tmp_rad cnt = cnt + 1 last_no = last_no + 1 end# end do number 1 if (found_sing == 1) then # if number 6 if (rad_c < $array_rad_test_poles[1][2]) then # if number 7 $array_rad_test_poles[1][2] = rad_c last_no = last_no - 1 tmp_ord = comp_ord_from_three_terms($array_y_higher[1][last_no-2],$array_y_higher[1][last_no-1],$array_y_higher[1][last_no],last_no) $array_rad_test_poles[1][2] = rad_c if (rad_c < $glob_min_pole_est) then # if number 8 $glob_min_pole_est = rad_c end# end if 8 $array_ord_test_poles[1][2] = tmp_ord end# end if 7 end# end if 6 #BOTTOM general radius test1 $glob_min_pole_est = $glob_large_float tmp_rad = $glob_large_float prev_tmp_rad = $glob_large_float tmp_ratio = $glob_large_float rad_c = $glob_large_float $array_rad_test_poles[1][3] = $glob_large_float $array_ord_test_poles[1][3] = $glob_large_float found_sing = 1 last_no = MAX_TERMS - 1 - 10 cnt = 0 while (last_no < MAX_TERMS-7 and found_sing == 1) do # do number 1 tmp_rad = comp_rad_from_six_terms($array_y_higher[1][last_no-5],$array_y_higher[1][last_no-4],$array_y_higher[1][last_no-3],$array_y_higher[1][last_no-2],$array_y_higher[1][last_no-1],$array_y_higher[1][last_no],last_no) tmp_ratio = tmp_rad / prev_tmp_rad if ((cnt > 0 ) and (tmp_ratio < $glob_upper_ratio_limit) and (tmp_ratio > $glob_lower_ratio_limit)) then # if number 6 rad_c = tmp_rad elsif (cnt == 0) then # if number 7 rad_c = tmp_rad elsif (cnt > 0) then # if number 8 found_sing = 0 end# end if 8 prev_tmp_rad = tmp_rad cnt = cnt + 1 last_no = last_no + 1 end# end do number 1 if (found_sing == 1) then # if number 8 if (rad_c < $array_rad_test_poles[1][3]) then # if number 9 $array_rad_test_poles[1][3] = rad_c last_no = last_no - 1 tmp_ord = comp_ord_from_six_terms($array_y_higher[1][last_no-5],$array_y_higher[1][last_no-4],$array_y_higher[1][last_no-3],$array_y_higher[1][last_no-2],$array_y_higher[1][last_no-1],$array_y_higher[1][last_no],last_no) $array_rad_test_poles[1][3] = rad_c if (rad_c < $glob_min_pole_est) then # if number 10 $glob_min_pole_est = rad_c end# end if 10 $array_ord_test_poles[1][3] = tmp_ord end# end if 9 end# end if 8 #BOTTOM general radius test1 #START ADJUST ALL SERIES if (float_abs($glob_min_pole_est) * $glob_ratio_of_radius < float_abs($glob_h)) then # if number 8 h_new = $glob_check_sign * $glob_min_pole_est * $glob_ratio_of_radius term = 1 ratio = 1.0 while (term <= MAX_TERMS) do # do number 1 $array_y[term] = $array_y[term]* ratio $array_y_higher[1][term] = $array_y_higher[1][term]* ratio $array_x[term] = $array_x[term]* ratio ratio = ratio * h_new / float_abs($glob_h) term = term + 1 end# end do number 1 $glob_h = h_new end# end if 8 #BOTTOM ADJUST ALL SERIES if (reached_interval()) then # if number 8 display_poles() end# end if 8 end # End Function number 10 # Begin Function number 11 def atomall() #TOP ATOMALL #END OUTFILE1 #BEGIN OUTFILE2 #END OUTFILE2 #BEGIN ATOMHDR1 #emit pre mult FULL CONST $eq_no = 1 i = 1 $array_tmp1[1] = $array_m1[1] * $array_const_2D0[1] #emit pre mult FULL LINEAR $eq_no = 1 i = 1 #emit pre mult LINEAR - FULL $eq_no = 1 i = 1 $array_tmp2[1] = $array_x[1] * $array_tmp1[1] #emit pre mult LINEAR - LINEAR $eq_no = 1 i = 1 $array_tmp3[1] = $array_x[1] * $array_x[1] #emit pre add FULL - CONST $eq_no = 1 i = 1 $array_tmp4[1] = $array_tmp3[1] + $array_const_0D000001[1] #emit pre div FULL - FULL $eq_no = 1 i = 1 $array_tmp5[1] = ($array_tmp2[1] / ($array_tmp4[1])) #emit pre mult LINEAR - LINEAR $eq_no = 1 i = 1 $array_tmp6[1] = $array_x[1] * $array_x[1] #emit pre add FULL - CONST $eq_no = 1 i = 1 $array_tmp7[1] = $array_tmp6[1] + $array_const_0D000001[1] #emit pre div FULL - FULL $eq_no = 1 i = 1 $array_tmp8[1] = ($array_tmp5[1] / ($array_tmp7[1])) #emit pre add CONST FULL $eq_no = 1 i = 1 $array_tmp9[1] = $array_const_0D0[1] + $array_tmp8[1] #emit pre assign xxx $eq_no = 1 i = 1 $min_hdrs = 5 if ( not $array_y_set_initial[1][2]) then # if number 1 if (1 <= MAX_TERMS) then # if number 2 temporary = $array_tmp9[1] * expt($glob_h , (1)) * factorial_3(0,1) if (2 <= MAX_TERMS) then # if number 3 $array_y[2] = temporary $array_y_higher[1][2] = temporary end# end if 3 temporary = temporary / $glob_h * (1.0) $array_y_higher[2][1] = temporary end# end if 2 end# end if 1 kkk = 2 #END ATOMHDR1 #BEGIN ATOMHDR2 #emit pre mult FULL CONST $eq_no = 1 i = 2 $array_tmp1[2] = $array_m1[2] * $array_const_2D0[1] #emit pre mult LINEAR FULL $eq_no = 1 i = 2 $array_tmp2[2] = $array_x[2] * $array_tmp1[kkk - 1] + $array_x[1] * $array_tmp1[kkk] #emit pre mult LINEAR - LINEAR $eq_no = 1 i = 2 $array_tmp3[2] = $array_x[1] * $array_x[2] + $array_x[2] * $array_x[1] #emit pre add FULL CONST $eq_no = 1 i = 2 $array_tmp4[2] = $array_tmp3[2] #emit pre div FULL - FULL $eq_no = 1 i = 2 $array_tmp5[2] = (($array_tmp2[2] - ats(2,$array_tmp4,$array_tmp5,2))/$array_tmp4[1]) #emit pre mult LINEAR - LINEAR $eq_no = 1 i = 2 $array_tmp6[2] = $array_x[1] * $array_x[2] + $array_x[2] * $array_x[1] #emit pre add FULL CONST $eq_no = 1 i = 2 $array_tmp7[2] = $array_tmp6[2] #emit pre div FULL - FULL $eq_no = 1 i = 2 $array_tmp8[2] = (($array_tmp5[2] - ats(2,$array_tmp7,$array_tmp8,2))/$array_tmp7[1]) #emit pre add CONST FULL $eq_no = 1 i = 2 $array_tmp9[2] = $array_tmp8[2] #emit pre assign xxx $eq_no = 1 i = 2 $min_hdrs = 5 if ( not $array_y_set_initial[1][3]) then # if number 1 if (2 <= MAX_TERMS) then # if number 2 temporary = $array_tmp9[2] * expt($glob_h , (1)) * factorial_3(1,2) if (3 <= MAX_TERMS) then # if number 3 $array_y[3] = temporary $array_y_higher[1][3] = temporary end# end if 3 temporary = temporary / $glob_h * (2.0) $array_y_higher[2][2] = temporary end# end if 2 end# end if 1 kkk = 3 #END ATOMHDR2 #BEGIN ATOMHDR3 #emit pre mult FULL CONST $eq_no = 1 i = 3 $array_tmp1[3] = $array_m1[3] * $array_const_2D0[1] #emit pre mult LINEAR FULL $eq_no = 1 i = 3 $array_tmp2[3] = $array_x[2] * $array_tmp1[kkk - 1] + $array_x[1] * $array_tmp1[kkk] #emit pre mult LINEAR - LINEAR $eq_no = 1 i = 3 $array_tmp3[3] = $array_x[2] * $array_x[2] #emit pre add FULL CONST $eq_no = 1 i = 3 $array_tmp4[3] = $array_tmp3[3] #emit pre div FULL - FULL $eq_no = 1 i = 3 $array_tmp5[3] = (($array_tmp2[3] - ats(3,$array_tmp4,$array_tmp5,2))/$array_tmp4[1]) #emit pre mult LINEAR - LINEAR $eq_no = 1 i = 3 $array_tmp6[3] = $array_x[2] * $array_x[2] #emit pre add FULL CONST $eq_no = 1 i = 3 $array_tmp7[3] = $array_tmp6[3] #emit pre div FULL - FULL $eq_no = 1 i = 3 $array_tmp8[3] = (($array_tmp5[3] - ats(3,$array_tmp7,$array_tmp8,2))/$array_tmp7[1]) #emit pre add CONST FULL $eq_no = 1 i = 3 $array_tmp9[3] = $array_tmp8[3] #emit pre assign xxx $eq_no = 1 i = 3 $min_hdrs = 5 if ( not $array_y_set_initial[1][4]) then # if number 1 if (3 <= MAX_TERMS) then # if number 2 temporary = $array_tmp9[3] * expt($glob_h , (1)) * factorial_3(2,3) if (4 <= MAX_TERMS) then # if number 3 $array_y[4] = temporary $array_y_higher[1][4] = temporary end# end if 3 temporary = temporary / $glob_h * (3.0) $array_y_higher[2][3] = temporary end# end if 2 end# end if 1 kkk = 4 #END ATOMHDR3 #BEGIN ATOMHDR4 #emit pre mult FULL CONST $eq_no = 1 i = 4 $array_tmp1[4] = $array_m1[4] * $array_const_2D0[1] #emit pre mult LINEAR FULL $eq_no = 1 i = 4 $array_tmp2[4] = $array_x[2] * $array_tmp1[kkk - 1] + $array_x[1] * $array_tmp1[kkk] #emit pre add FULL CONST $eq_no = 1 i = 4 $array_tmp4[4] = $array_tmp3[4] #emit pre div FULL - FULL $eq_no = 1 i = 4 $array_tmp5[4] = (($array_tmp2[4] - ats(4,$array_tmp4,$array_tmp5,2))/$array_tmp4[1]) #emit pre add FULL CONST $eq_no = 1 i = 4 $array_tmp7[4] = $array_tmp6[4] #emit pre div FULL - FULL $eq_no = 1 i = 4 $array_tmp8[4] = (($array_tmp5[4] - ats(4,$array_tmp7,$array_tmp8,2))/$array_tmp7[1]) #emit pre add CONST FULL $eq_no = 1 i = 4 $array_tmp9[4] = $array_tmp8[4] #emit pre assign xxx $eq_no = 1 i = 4 $min_hdrs = 5 if ( not $array_y_set_initial[1][5]) then # if number 1 if (4 <= MAX_TERMS) then # if number 2 temporary = $array_tmp9[4] * expt($glob_h , (1)) * factorial_3(3,4) if (5 <= MAX_TERMS) then # if number 3 $array_y[5] = temporary $array_y_higher[1][5] = temporary end# end if 3 temporary = temporary / $glob_h * (4.0) $array_y_higher[2][4] = temporary end# end if 2 end# end if 1 kkk = 5 #END ATOMHDR4 #BEGIN ATOMHDR5 #emit pre mult FULL CONST $eq_no = 1 i = 5 $array_tmp1[5] = $array_m1[5] * $array_const_2D0[1] #emit pre mult LINEAR FULL $eq_no = 1 i = 5 $array_tmp2[5] = $array_x[2] * $array_tmp1[kkk - 1] + $array_x[1] * $array_tmp1[kkk] #emit pre add FULL CONST $eq_no = 1 i = 5 $array_tmp4[5] = $array_tmp3[5] #emit pre div FULL - FULL $eq_no = 1 i = 5 $array_tmp5[5] = (($array_tmp2[5] - ats(5,$array_tmp4,$array_tmp5,2))/$array_tmp4[1]) #emit pre add FULL CONST $eq_no = 1 i = 5 $array_tmp7[5] = $array_tmp6[5] #emit pre div FULL - FULL $eq_no = 1 i = 5 $array_tmp8[5] = (($array_tmp5[5] - ats(5,$array_tmp7,$array_tmp8,2))/$array_tmp7[1]) #emit pre add CONST FULL $eq_no = 1 i = 5 $array_tmp9[5] = $array_tmp8[5] #emit pre assign xxx $eq_no = 1 i = 5 $min_hdrs = 5 if ( not $array_y_set_initial[1][6]) then # if number 1 if (5 <= MAX_TERMS) then # if number 2 temporary = $array_tmp9[5] * expt($glob_h , (1)) * factorial_3(4,5) if (6 <= MAX_TERMS) then # if number 3 $array_y[6] = temporary $array_y_higher[1][6] = temporary end# end if 3 temporary = temporary / $glob_h * (5.0) $array_y_higher[2][5] = temporary end# end if 2 end# end if 1 kkk = 6 #END ATOMHDR5 #BEGIN OUTFILE3 #Top Atomall While Loop-- outfile3 while (kkk <= MAX_TERMS) do # do number 1 #END OUTFILE3 #BEGIN OUTFILE4 #emit mult FULL CONST $eq_no = 1 i = 1 $array_tmp1[kkk] = $array_m1[kkk] * $array_const_2D0[1] #emit mult FULL LINEAR $eq_no = 1 i = 1 $array_tmp2[kkk] = $array_tmp1[kkk-1] * $array_x[2] + $array_tmp1[kkk] * $array_x[1] #emit mult LINEAR - LINEAR $eq_no = 1 i = 1 #emit FULL - NOT FULL add $eq_no = 1 $array_tmp4[kkk] = $array_tmp3[kkk] #emit div FULL FULL $eq_no = 1 $array_tmp5[kkk] = (($array_tmp2[kkk] - ats(kkk,$array_tmp4,$array_tmp5,2))/$array_tmp4[1]) #emit mult LINEAR - LINEAR $eq_no = 1 i = 1 #emit FULL - NOT FULL add $eq_no = 1 $array_tmp7[kkk] = $array_tmp6[kkk] #emit div FULL FULL $eq_no = 1 $array_tmp8[kkk] = (($array_tmp5[kkk] - ats(kkk,$array_tmp7,$array_tmp8,2))/$array_tmp7[1]) #emit NOT FULL - FULL add $eq_no = 1 $array_tmp9[kkk] = $array_tmp8[kkk] #emit assign $eq_no = 1 order_d = 1 if (kkk + order_d <= MAX_TERMS) then # if number 1 if ( not $array_y_set_initial[1][kkk + order_d]) then # if number 2 temporary = $array_tmp9[kkk] * expt($glob_h , (order_d)) * factorial_3((kkk - 1),(kkk + order_d - 1)) $array_y[kkk + order_d] = temporary $array_y_higher[1][kkk + order_d] = temporary term = kkk + order_d - 1 adj2 = kkk + order_d - 1 adj3 = 2 while ((term >= 1) and (term <= MAX_TERMS) and (adj3 < order_d + 1)) do # do number 1 if (adj3 <= order_d + 1) then # if number 3 if (adj2 > 0) then # if number 4 temporary = temporary / $glob_h * (adj2) else temporary = temporary end# end if 4 $array_y_higher[adj3][term] = temporary end# end if 3 term = term - 1 adj2 = adj2 - 1 adj3 = adj3 + 1 end# end do number 1 end# end if 2 end# end if 1 kkk = kkk + 1 end# end do number 1 #BOTTOM ATOMALL #END OUTFILE4 #BEGIN OUTFILE5 #BOTTOM ATOMALL ??? end # End Function number 12 #END OUTFILE5 # before write_ruby_main_top # Begin Function number 12 def main() #BEGIN OUTFILEMAIN # before first input block #BEGIN FIRST INPUT BLOCK #BEGIN BLOCK 1 #BEGIN FIRST INPUT BLOCK # Digits:=32; ELIMINATED in preodein.rb max_terms=20 #END BLOCK 1 #END FIRST INPUT BLOCK #START OF INITS AFTER INPUT BLOCK $glob_html_log = true #END OF INITS AFTER INPUT BLOCK # before generate arrays $array_y_init= Array.new(MAX_TERMS + 1) $array_norms= Array.new(MAX_TERMS + 1) $array_fact_1= Array.new(MAX_TERMS + 1) $array_1st_rel_error= Array.new(2 + 1) $array_last_rel_error= Array.new(2 + 1) $array_type_pole= Array.new(2 + 1) $array_type_real_pole= Array.new(2 + 1) $array_type_complex_pole= Array.new(2 + 1) $array_y= Array.new(MAX_TERMS + 1) $array_x= Array.new(MAX_TERMS + 1) $array_tmp0= Array.new(MAX_TERMS + 1) $array_tmp1= Array.new(MAX_TERMS + 1) $array_tmp2= Array.new(MAX_TERMS + 1) $array_tmp3= Array.new(MAX_TERMS + 1) $array_tmp4= Array.new(MAX_TERMS + 1) $array_tmp5= Array.new(MAX_TERMS + 1) $array_tmp6= Array.new(MAX_TERMS + 1) $array_tmp7= Array.new(MAX_TERMS + 1) $array_tmp8= Array.new(MAX_TERMS + 1) $array_tmp9= Array.new(MAX_TERMS + 1) $array_m1= Array.new(MAX_TERMS + 1) $array_y_higher = array2d(2 + 1 ,MAX_TERMS + 1) $array_y_higher_work = array2d(2 + 1 ,MAX_TERMS + 1) $array_y_higher_work2 = array2d(2 + 1 ,MAX_TERMS + 1) $array_y_set_initial = array2d(2 + 1 ,MAX_TERMS + 1) $array_given_rad_poles = array2d(2 + 1 ,3 + 1) $array_given_ord_poles = array2d(2 + 1 ,3 + 1) $array_rad_test_poles = array2d(2 + 1 ,3 + 1) $array_ord_test_poles = array2d(2 + 1 ,3 + 1) $array_fact_2 = array2d(MAX_TERMS + 1 ,MAX_TERMS + 1) # before generate constants # before generate globals definition #Top Generate Globals Definition $glob_check_sign=1.0 $glob_desired_digits_correct=8.0 $glob_max_estimated_step_error=0.0 $glob_ratio_of_radius=0.1 $glob_percent_done=0.0 $glob_subiter_method=3 $glob_total_exp_sec=0.1 $glob_optimal_expect_sec=0.1 $glob_estimated_size_answer=100.0 $glob_html_log=true $glob_good_digits=0 $glob_max_opt_iter=10 $glob_dump=false $glob_djd_debug=true $glob_display_flag=true $glob_djd_debug2=true $glob_sec_in_minute=60 $glob_min_in_hour=60.0 $glob_hours_in_day=24.0 $glob_days_in_year=365 $glob_sec_in_hour=3600 $glob_sec_in_day=86400 $glob_sec_in_year=31536000 $glob_almost_1=0.9990 $glob_clock_sec=0.0 $glob_clock_start_sec=0.0 $glob_not_yet_finished=true $glob_initial_pass=true $glob_not_yet_start_msg=true $glob_reached_optimal_h=false $glob_optimal_done=false $glob_disp_incr=0.1 $glob_h=0.1 $glob_diff_rc_fm=0.1 $glob_diff_rc_fmm1=0.1 $glob_diff_rc_fmm2=0.1 $glob_diff_ord_fm=0.1 $glob_diff_ord_fmm1=0.1 $glob_diff_ord_fmm2=0.1 $glob_six_term_ord_save=0.1 $glob_guess_error_rc=0.1 $glob_guess_error_ord=0.1 $glob_max_h=0.1 $glob_min_h=0.000001 $glob_type_given_pole=0 $glob_large_float=9.0e100 $glob_least_given_sing=9.9e100 $glob_least_ratio_sing=9.9e100 $glob_least_3_sing=9.9e100 $glob_least_6_sing=9.9e100 $glob_last_good_h=0.1 $glob_look_poles=false $glob_neg_h=false $glob_display_interval=0.0 $glob_next_display=0.0 $glob_dump_analytic=false $glob_abserr=0.1e-10 $glob_relerr=0.1e-10 $glob_min_pole_est=0.1e+10 $glob_max_hours=0.0 $glob_max_iter=1000 $glob_max_rel_trunc_err=0.1e-10 $glob_max_trunc_err=0.1e-10 $glob_no_eqs=0 $glob_optimal_clock_start_sec=0.0 $glob_optimal_start=0.0 $glob_upper_ratio_limit=1.1 $glob_lower_ratio_limit=0.9 $glob_small_float=0.0 $glob_smallish_float=0.0 $glob_unchanged_h_cnt=0 $glob_warned=false $glob_warned2=false $glob_max_sec=10000.0 $glob_orig_start_sec=0.0 $glob_start=0 $glob_curr_iter_when_opt=0 $glob_current_iter=0 $glob_iter=0 $glob_normmax=0.0 $glob_max_minutes=0.0 #Bottom Generate Globals Deninition # before generate const definition $array_const_1= Array.new(MAX_TERMS + 1) $array_const_0D0= Array.new(MAX_TERMS + 1) $array_const_2D0= Array.new(MAX_TERMS + 1) $array_const_0D000001= Array.new(MAX_TERMS + 1) # before arrays initialized term = 1 while (term <= MAX_TERMS) do # do number 1 $array_y_init[term] = 0.0 term = term + 1 end# end do number 1 term = 1 while (term <= MAX_TERMS) do # do number 1 $array_norms[term] = 0.0 term = term + 1 end# end do number 1 term = 1 while (term <= MAX_TERMS) do # do number 1 $array_fact_1[term] = 0.0 term = term + 1 end# end do number 1 term = 1 while (term <= 2) do # do number 1 $array_1st_rel_error[term] = 0.0 term = term + 1 end# end do number 1 term = 1 while (term <= 2) do # do number 1 $array_last_rel_error[term] = 0.0 term = term + 1 end# end do number 1 term = 1 while (term <= 2) do # do number 1 $array_type_pole[term] = 0 term = term + 1 end# end do number 1 term = 1 while (term <= 2) do # do number 1 $array_type_real_pole[term] = 0 term = term + 1 end# end do number 1 term = 1 while (term <= 2) do # do number 1 $array_type_complex_pole[term] = 0 term = term + 1 end# end do number 1 term = 1 while (term <= MAX_TERMS) do # do number 1 $array_y[term] = 0.0 term = term + 1 end# end do number 1 term = 1 while (term <= MAX_TERMS) do # do number 1 $array_x[term] = 0.0 term = term + 1 end# end do number 1 term = 1 while (term <= MAX_TERMS) do # do number 1 $array_tmp0[term] = 0.0 term = term + 1 end# end do number 1 term = 1 while (term <= MAX_TERMS) do # do number 1 $array_tmp1[term] = 0.0 term = term + 1 end# end do number 1 term = 1 while (term <= MAX_TERMS) do # do number 1 $array_tmp2[term] = 0.0 term = term + 1 end# end do number 1 term = 1 while (term <= MAX_TERMS) do # do number 1 $array_tmp3[term] = 0.0 term = term + 1 end# end do number 1 term = 1 while (term <= MAX_TERMS) do # do number 1 $array_tmp4[term] = 0.0 term = term + 1 end# end do number 1 term = 1 while (term <= MAX_TERMS) do # do number 1 $array_tmp5[term] = 0.0 term = term + 1 end# end do number 1 term = 1 while (term <= MAX_TERMS) do # do number 1 $array_tmp6[term] = 0.0 term = term + 1 end# end do number 1 term = 1 while (term <= MAX_TERMS) do # do number 1 $array_tmp7[term] = 0.0 term = term + 1 end# end do number 1 term = 1 while (term <= MAX_TERMS) do # do number 1 $array_tmp8[term] = 0.0 term = term + 1 end# end do number 1 term = 1 while (term <= MAX_TERMS) do # do number 1 $array_tmp9[term] = 0.0 term = term + 1 end# end do number 1 term = 1 while (term <= MAX_TERMS) do # do number 1 $array_m1[term] = 0.0 term = term + 1 end# end do number 1 ord = 1 while (ord <=2) do # do number 1 term = 1 while (term <= MAX_TERMS) do # do number 2 $array_y_higher[ord][term] = 0.0 term = term + 1 end# end do number 2 ord = ord + 1 end# end do number 1 ord = 1 while (ord <=2) do # do number 1 term = 1 while (term <= MAX_TERMS) do # do number 2 $array_y_higher_work[ord][term] = 0.0 term = term + 1 end# end do number 2 ord = ord + 1 end# end do number 1 ord = 1 while (ord <=2) do # do number 1 term = 1 while (term <= MAX_TERMS) do # do number 2 $array_y_higher_work2[ord][term] = 0.0 term = term + 1 end# end do number 2 ord = ord + 1 end# end do number 1 ord = 1 while (ord <=2) do # do number 1 term = 1 while (term <= MAX_TERMS) do # do number 2 $array_y_set_initial[ord][term] = 0.0 term = term + 1 end# end do number 2 ord = ord + 1 end# end do number 1 ord = 1 while (ord <=2) do # do number 1 term = 1 while (term <= 3) do # do number 2 $array_given_rad_poles[ord][term] = 0.0 term = term + 1 end# end do number 2 ord = ord + 1 end# end do number 1 ord = 1 while (ord <=2) do # do number 1 term = 1 while (term <= 3) do # do number 2 $array_given_ord_poles[ord][term] = 0.0 term = term + 1 end# end do number 2 ord = ord + 1 end# end do number 1 ord = 1 while (ord <=2) do # do number 1 term = 1 while (term <= 3) do # do number 2 $array_rad_test_poles[ord][term] = 0.0 term = term + 1 end# end do number 2 ord = ord + 1 end# end do number 1 ord = 1 while (ord <=2) do # do number 1 term = 1 while (term <= 3) do # do number 2 $array_ord_test_poles[ord][term] = 0.0 term = term + 1 end# end do number 2 ord = ord + 1 end# end do number 1 ord = 1 while (ord <=MAX_TERMS) do # do number 1 term = 1 while (term <= MAX_TERMS) do # do number 2 $array_fact_2[ord][term] = 0.0 term = term + 1 end# end do number 2 ord = ord + 1 end# end do number 1 # before symbols initialized #BEGIN SYMBOLS INITIALIZATED zero_ats_ar($array_y) zero_ats_ar($array_x) zero_ats_ar($array_m1) zero_ats_ar($array_tmp0) zero_ats_ar($array_tmp1) zero_ats_ar($array_tmp2) zero_ats_ar($array_tmp3) zero_ats_ar($array_tmp4) zero_ats_ar($array_tmp5) zero_ats_ar($array_tmp6) zero_ats_ar($array_tmp7) zero_ats_ar($array_tmp8) zero_ats_ar($array_tmp9) zero_ats_ar($array_const_1) $array_const_1[1] = 1 zero_ats_ar($array_const_0D0) $array_const_0D0[1] = 0.0 zero_ats_ar($array_const_2D0) $array_const_2D0[1] = 2.0 zero_ats_ar($array_const_0D000001) $array_const_0D000001[1] = 0.000001 zero_ats_ar($array_m1) $array_m1[1] = -1.0 #END SYMBOLS INITIALIZATED # before generate factorials init #Initing Factorial Tables iiif = 0 while (iiif <= MAX_TERMS) do # do number 1 jjjf = 0 while (jjjf <= MAX_TERMS) do # do number 2 $array_fact_1[iiif] = 0 $array_fact_2[iiif][jjjf] = 0 jjjf = jjjf + 1 end# end do number 2 iiif = iiif + 1 end# end do number 1 #Done Initing Factorial Table # before generate set diff initial $array_y_set_initial[1][1] = true $array_y_set_initial[1][2] = false $array_y_set_initial[1][3] = false $array_y_set_initial[1][4] = false $array_y_set_initial[1][5] = false $array_y_set_initial[1][6] = false $array_y_set_initial[1][7] = false $array_y_set_initial[1][8] = false $array_y_set_initial[1][9] = false $array_y_set_initial[1][10] = false $array_y_set_initial[1][11] = false $array_y_set_initial[1][12] = false $array_y_set_initial[1][13] = false $array_y_set_initial[1][14] = false $array_y_set_initial[1][15] = false $array_y_set_initial[1][16] = false $array_y_set_initial[1][17] = false $array_y_set_initial[1][18] = false $array_y_set_initial[1][19] = false $array_y_set_initial[1][20] = false # before generate init omniout const $glob_iolevel = INFO # set default block #Write Set Defaults $glob_orig_start_sec = elapsed_time_seconds() $glob_curr_iter_when_opt = 0 $glob_display_flag = true $glob_no_eqs = 1 $glob_iter = -1 opt_iter = -1 $glob_max_iter = 50000 $glob_max_hours = 0.0 $glob_max_minutes = 15.0 omniout_str(ALWAYS,"##############ECHO OF PROBLEM#################") omniout_str(ALWAYS,"##############temp/sing1postode.ode#################") omniout_str(ALWAYS,"diff ( y , x , 1 ) = m1 * 2.0 * x / ( x * x + 0.000001 ) / ( x * x + 0.000001 ) ; ") omniout_str(ALWAYS,"!") omniout_str(ALWAYS,"#BEGIN FIRST INPUT BLOCK") omniout_str(ALWAYS,"# Digits:=32; ELIMINATED in preodein.rb") omniout_str(ALWAYS,"max_terms=20 ") omniout_str(ALWAYS,"!") omniout_str(ALWAYS,"#END FIRST INPUT BLOCK") omniout_str(ALWAYS,"#BEGIN SECOND INPUT BLOCK") omniout_str(ALWAYS,"x_start=-2.0 ") omniout_str(ALWAYS,"x_end=-1.5 ") omniout_str(ALWAYS,"$array_y_init[0 + 1] = exact_soln_y(x_start)") omniout_str(ALWAYS,"$glob_look_poles=true ") omniout_str(ALWAYS,"$glob_max_iter=500 ") omniout_str(ALWAYS,"$glob_max_h=0.5 ") omniout_str(ALWAYS,"## Not Given = 0") omniout_str(ALWAYS,"## No Pole = 3") omniout_str(ALWAYS,"## Pole = 4") omniout_str(ALWAYS,"$glob_type_given_pole=4 ") omniout_str(ALWAYS,"## Real Part") omniout_str(ALWAYS,"$array_given_rad_poles[1][1]=0.0 ") omniout_str(ALWAYS,"## Imag Part") omniout_str(ALWAYS,"$array_given_rad_poles[1][2]=0.001 ") omniout_str(ALWAYS,"## Order") omniout_str(ALWAYS,"$array_given_ord_poles[1][1]=1.0 ") omniout_str(ALWAYS,"## Not Used") omniout_str(ALWAYS,"$array_given_ord_poles[1][2]=0.0 ") omniout_str(ALWAYS,"#END SECOND INPUT BLOCK") omniout_str(ALWAYS,"#BEGIN OVERRIDE BLOCK") omniout_str(ALWAYS,"$glob_desired_digits_correct=10 ") omniout_str(ALWAYS,"$glob_display_interval=0.01 ") omniout_str(ALWAYS,"$glob_look_poles=true ") omniout_str(ALWAYS,"$glob_max_iter=1000000000 ") omniout_str(ALWAYS,"$glob_max_minutes=30.0 ") omniout_str(ALWAYS,"$glob_subiter_method=3 ") omniout_str(ALWAYS,"#END OVERRIDE BLOCK") omniout_str(ALWAYS,"!") omniout_str(ALWAYS,"#BEGIN USER DEF BLOCK") omniout_str(ALWAYS,"def exact_soln_y (x)") omniout_str(ALWAYS,"return(1.0 / (x * x + 0.000001)) ") omniout_str(ALWAYS,"end") omniout_str(ALWAYS,"") omniout_str(ALWAYS,"") omniout_str(ALWAYS,"#END USER DEF BLOCK") omniout_str(ALWAYS,"#######END OF ECHO OF PROBLEM#################") $glob_unchanged_h_cnt = 0 $glob_warned = false $glob_warned2 = false $glob_small_float = 0.0 $glob_smallish_float = 0.0 $glob_large_float = 1.0e100 $glob_almost_1 = 0.99 # before second block #TOP SECOND INPUT BLOCK #BEGIN SECOND INPUT BLOCK #BEGIN BLOCK 2 #END FIRST INPUT BLOCK #BEGIN SECOND INPUT BLOCK x_start=-2.0 x_end=-1.5 $array_y_init[0 + 1] = exact_soln_y(x_start) $glob_look_poles=true $glob_max_iter=500 $glob_max_h=0.5 ## Not Given = 0 ## No Pole = 3 ## Pole = 4 $glob_type_given_pole=4 ## Real Part $array_given_rad_poles[1][1]=0.0 ## Imag Part $array_given_rad_poles[1][2]=0.001 ## Order $array_given_ord_poles[1][1]=1.0 ## Not Used $array_given_ord_poles[1][2]=0.0 #END SECOND INPUT BLOCK #BEGIN OVERRIDE BLOCK $glob_desired_digits_correct=10 $glob_display_interval=0.01 $glob_look_poles=true $glob_max_iter=1000000000 $glob_max_minutes=30.0 $glob_subiter_method=3 #END OVERRIDE BLOCK #END BLOCK 2 #END SECOND INPUT BLOCK #BEGIN INITS AFTER SECOND INPUT BLOCK $glob_last_good_h = $glob_h $glob_max_sec = (60.0) * ($glob_max_minutes) + (3600.0) * ($glob_max_hours) # after second input block #BEGIN OPTIMIZE CODE omniout_str(ALWAYS,"START of Optimize") #Start Series -- INITIALIZE FOR OPTIMIZE $glob_check_sign = my_check_sign(x_start,x_end) found_h = false $glob_h = $glob_min_h * $glob_check_sign if (float_abs($glob_max_h) < float_abs($glob_h)) then # if number 8 $glob_h = float_abs($glob_max_h) * $glob_check_sign end# end if 8 if (float_abs($glob_display_interval) < float_abs($glob_h)) then # if number 8 $glob_h = float_abs($glob_display_interval) end# end if 8 if ($glob_h > 0.0) then # if number 8 $glob_neg_h = false $glob_display_interval = float_abs($glob_display_interval) else $glob_neg_h = true $glob_display_interval = -float_abs($glob_display_interval) end# end if 8 chk_data() best_h = $glob_h min_value = $glob_large_float est_answer = est_size_answer() opt_iter = 1 est_needed_step_err = estimated_needed_step_error(x_start,x_end,$glob_h,est_answer) omniout_float(ALWAYS,"est_needed_step_err",32,est_needed_step_err,16,"") estimated_step_error = 0.0 while ((opt_iter <= 100) and ( not found_h)) do # do number 1 omniout_int(ALWAYS,"opt_iter",32,opt_iter,4,"") $array_x[1] = x_start $array_x[2] = $glob_h $glob_next_display = x_start order_diff = 1 #Start Series $array_y term_no = 1 while (term_no <= order_diff) do # do number 2 $array_y[term_no] = $array_y_init[term_no] * expt($glob_h , (term_no - 1)) / factorial_1(term_no - 1) term_no = term_no + 1 end# end do number 2 rows = order_diff r_order = 1 while (r_order <= rows) do # do number 2 term_no = 1 while (term_no <= (rows - r_order + 1)) do # do number 3 it = term_no + r_order - 1 if (term_no < MAX_TERMS) then # if number 8 $array_y_higher[r_order][term_no] = $array_y_init[it]* expt($glob_h , (term_no - 1)) / ((factorial_1(term_no - 1))) end# end if 8 term_no = term_no + 1 end# end do number 3 r_order = r_order + 1 end# end do number 2 atomall() estimated_step_error = test_suggested_h() omniout_float(ALWAYS,"estimated_step_error",32,estimated_step_error,32,"") if (((estimated_step_error > est_needed_step_err) and (opt_iter == 1)) or (($glob_check_sign * $glob_h) >= ($glob_check_sign *$glob_max_h ))) then # if number 8 found_h = true $glob_h = $glob_check_sign * $glob_max_h best_h = $glob_h elsif ((estimated_step_error > est_needed_step_err) and ( not found_h)) then # if number 9 $glob_h = $glob_h/2.0 best_h = $glob_h found_h = true else $glob_h = $glob_h*2.0 best_h = $glob_h end# end if 9 omniout_float(ALWAYS,"best_h",32,best_h,32,"") opt_iter = opt_iter + 1 end# end do number 1 if (( not found_h) and (opt_iter == 1)) then # if number 9 omniout_str(ALWAYS,"Beginning $glob_h too large.") found_h = false end# end if 9 if (opt_iter > 100) then # if number 9 $glob_h = $glob_check_sign * $glob_max_h found_h = false end# end if 9 if ($glob_check_sign * $glob_display_interval < $glob_check_sign * $glob_h) then # if number 9 $glob_h = $glob_check_sign * $glob_display_interval end# end if 9 #END OPTIMIZE CODE if ($glob_html_log) then # if number 9 html_log_file = File.new("entry.html","w") end# end if 9 #BEGIN SOLUTION CODE if (found_h) then # if number 9 omniout_str(ALWAYS,"START of Soultion") #Start Series -- INITIALIZE FOR SOLUTION $array_x[1] = x_start $array_x[2] = $glob_h $glob_next_display = x_start order_diff = 1 #Start Series $array_y term_no = 1 while (term_no <= order_diff) do # do number 1 $array_y[term_no] = $array_y_init[term_no] * expt($glob_h , (term_no - 1)) / factorial_1(term_no - 1) term_no = term_no + 1 end# end do number 1 rows = order_diff r_order = 1 while (r_order <= rows) do # do number 1 term_no = 1 while (term_no <= (rows - r_order + 1)) do # do number 2 it = term_no + r_order - 1 if (term_no < MAX_TERMS) then # if number 10 $array_y_higher[r_order][term_no] = $array_y_init[it]* expt($glob_h , (term_no - 1)) / ((factorial_1(term_no - 1))) end# end if 10 term_no = term_no + 1 end# end do number 2 r_order = r_order + 1 end# end do number 1 current_iter = 1 $glob_clock_start_sec = elapsed_time_seconds() $glob_clock_sec = elapsed_time_seconds() $glob_current_iter = 0 $glob_iter = 0 omniout_str(DEBUGL," ") $glob_reached_optimal_h = true $glob_optimal_clock_start_sec = elapsed_time_seconds() while (($glob_current_iter < $glob_max_iter) and ($glob_check_sign * $array_x[1] < $glob_check_sign * x_end ) and ((($glob_clock_sec) - ($glob_orig_start_sec)) < ($glob_max_sec))) do # do number 1 #left paren 0001C if (reached_interval()) then # if number 10 omniout_str(INFO," ") omniout_str(INFO,"TOP MAIN SOLVE Loop") end# end if 10 $glob_iter = $glob_iter + 1 $glob_clock_sec = elapsed_time_seconds() $glob_current_iter = $glob_current_iter + 1 atomall() display_alot(current_iter) if ($glob_look_poles) then # if number 10 #left paren 0004C check_for_pole() end# end if 10#was right paren 0004C if (reached_interval()) then # if number 10 $glob_next_display = $glob_next_display + $glob_display_interval end# end if 10 $array_x[1] = $array_x[1] + $glob_h $array_x[2] = $glob_h #Jump Series $array_y order_diff = 2 #START PART 1 SUM AND ADJUST #START SUM AND ADJUST EQ =1 #sum_and_adjust $array_y #BEFORE ADJUST SUBSERIES EQ =1 ord = 2 calc_term = 1 #adjust_subseries$array_y iii = MAX_TERMS while (iii >= calc_term) do # do number 2 $array_y_higher_work[2][iii] = $array_y_higher[2][iii] / expt($glob_h , (calc_term - 1)) / factorial_3(iii - calc_term , iii - 1) iii = iii - 1 end# end do number 2 #AFTER ADJUST SUBSERIES EQ =1 #BEFORE SUM SUBSERIES EQ =1 temp_sum = 0.0 ord = 2 calc_term = 1 #sum_subseries$array_y iii = MAX_TERMS while (iii >= calc_term) do # do number 2 temp_sum = temp_sum + $array_y_higher_work[ord][iii] iii = iii - 1 end# end do number 2 $array_y_higher_work2[ord][calc_term] = temp_sum * expt($glob_h , (calc_term - 1)) / (factorial_1(calc_term - 1)) #AFTER SUM SUBSERIES EQ =1 #BEFORE ADJUST SUBSERIES EQ =1 ord = 1 calc_term = 2 #adjust_subseries$array_y iii = MAX_TERMS while (iii >= calc_term) do # do number 2 $array_y_higher_work[1][iii] = $array_y_higher[1][iii] / expt($glob_h , (calc_term - 1)) / factorial_3(iii - calc_term , iii - 1) iii = iii - 1 end# end do number 2 #AFTER ADJUST SUBSERIES EQ =1 #BEFORE SUM SUBSERIES EQ =1 temp_sum = 0.0 ord = 1 calc_term = 2 #sum_subseries$array_y iii = MAX_TERMS while (iii >= calc_term) do # do number 2 temp_sum = temp_sum + $array_y_higher_work[ord][iii] iii = iii - 1 end# end do number 2 $array_y_higher_work2[ord][calc_term] = temp_sum * expt($glob_h , (calc_term - 1)) / (factorial_1(calc_term - 1)) #AFTER SUM SUBSERIES EQ =1 #BEFORE ADJUST SUBSERIES EQ =1 ord = 1 calc_term = 1 #adjust_subseries$array_y iii = MAX_TERMS while (iii >= calc_term) do # do number 2 $array_y_higher_work[1][iii] = $array_y_higher[1][iii] / expt($glob_h , (calc_term - 1)) / factorial_3(iii - calc_term , iii - 1) iii = iii - 1 end# end do number 2 #AFTER ADJUST SUBSERIES EQ =1 #BEFORE SUM SUBSERIES EQ =1 temp_sum = 0.0 ord = 1 calc_term = 1 #sum_subseries$array_y iii = MAX_TERMS while (iii >= calc_term) do # do number 2 temp_sum = temp_sum + $array_y_higher_work[ord][iii] iii = iii - 1 end# end do number 2 $array_y_higher_work2[ord][calc_term] = temp_sum * expt($glob_h , (calc_term - 1)) / (factorial_1(calc_term - 1)) #AFTER SUM SUBSERIES EQ =1 #END SUM AND ADJUST EQ =1 #END PART 1 #START PART 2 MOVE TERMS to REGULAR Array term_no = MAX_TERMS while (term_no >= 1) do # do number 2 $array_y[term_no] = $array_y_higher_work2[1][term_no] ord = 1 while (ord <= order_diff) do # do number 3 $array_y_higher[ord][term_no] = $array_y_higher_work2[ord][term_no] ord = ord + 1 end# end do number 3 term_no = term_no - 1 end# end do number 2 #END PART 2 HEVE MOVED TERMS to REGULAR Array end# end do number 1#right paren 0001C omniout_str(ALWAYS,"Finished!") if ($glob_iter >= $glob_max_iter) then # if number 10 omniout_str(ALWAYS,"Maximum Iterations Reached before Solution Completed!") end# end if 10 if (elapsed_time_seconds() - ($glob_orig_start_sec) >= ($glob_max_sec )) then # if number 10 omniout_str(ALWAYS,"Maximum Time Reached before Solution Completed!") end# end if 10 $glob_clock_sec = elapsed_time_seconds() omniout_str(INFO,"diff ( y , x , 1 ) = m1 * 2.0 * x / ( x * x + 0.000001 ) / ( x * x + 0.000001 ) ; ") omniout_int(INFO,"Iterations ",32,$glob_iter,4," ") prog_report(x_start,x_end) if ($glob_html_log) then # if number 10 logstart(html_log_file) logitem_str(html_log_file,"2014-01-08T03:52:41-06:00") logitem_str(html_log_file,"Ruby") logitem_str(html_log_file,"sing1") logitem_str(html_log_file,"diff ( y , x , 1 ) = m1 * 2.0 * x / ( x * x + 0.000001 ) / ( x * x + 0.000001 ) ; ") logitem_float(html_log_file,x_start) logitem_float(html_log_file,x_end) logitem_float(html_log_file,$array_x[1]) logitem_float(html_log_file,$glob_h) logitem_str(html_log_file,"16") logitem_good_digits(html_log_file,$array_last_rel_error[1]) logitem_integer(html_log_file,MAX_TERMS) if ($glob_least_given_sing < $glob_large_float) then # if number 11 logitem_float(html_log_file,$glob_least_given_sing) else logitem_str(html_log_file,"NOT GIVEN") end# end if 11 if ($glob_least_ratio_sing < $glob_large_float) then # if number 11 logitem_float(html_log_file,$glob_least_ratio_sing) else logitem_str(html_log_file,"NONE") end# end if 11 if ($glob_least_3_sing < $glob_large_float) then # if number 11 logitem_float(html_log_file,$glob_least_3_sing) else logitem_str(html_log_file,"NONE") end# end if 11 if ($glob_least_6_sing < $glob_large_float) then # if number 11 logitem_float(html_log_file,$glob_least_6_sing) else logitem_str(html_log_file,"NONE") end# end if 11 logitem_integer(html_log_file,$glob_iter) logitem_time(html_log_file,($glob_clock_sec)) if ($glob_percent_done < 100.0) then # if number 11 logitem_time(html_log_file,($glob_total_exp_sec)) 0 else logitem_str(html_log_file,"Done") 0 end# end if 11 log_revs(html_log_file," 223 ") logitem_str(html_log_file,"sing1 diffeq.rb") logitem_str(html_log_file,"sing1 Ruby results") logitem_str(html_log_file,"All Tests - Ruby only - to save time") logend(html_log_file) end# end if 10 if ($glob_html_log) then # if number 10 html_log_file.close; end# end if 10 end# end if 9 #END OUTFILEMAIN end # End Function number 12 main()