(%i1) batch(diffeq.max)
read and interpret file: /home/dennis/mastersource/mine/omnisode/diffeq.max
(%i2) load(stringproc)
(%o2) /usr/local/share/maxima/5.26.0/share/contrib/stringproc/stringproc.mac
(%i3) reached_interval() := block([ret],
if (((array_x >= glob_next_display) and (not glob_neg_h))
1
or ((array_x <= glob_next_display) and glob_neg_h))
1
or (glob_next_display = 0.0) then ret : true else ret : false, return(ret))
(%o3) reached_interval() := block([ret],
if (((array_x >= glob_next_display) and (not glob_neg_h))
1
or ((array_x <= glob_next_display) and glob_neg_h))
1
or (glob_next_display = 0.0) then ret : true else ret : false, return(ret))
(%i4) display_alot(iter) := block([abserr, analytic_val_y, ind_var,
numeric_val, relerr, term_no], if reached_interval()
then (if iter >= 0 then (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 : omniabs(numeric_val - analytic_val_y),
omniout_float(ALWAYS, "y[1] (numeric) ", 33, numeric_val,
20, " "), if omniabs(analytic_val_y) # 0.0
abserr 100.0
then (relerr : -----------------------,
omniabs(analytic_val_y)
relerr
if relerr # 0.0 then glob_good_digits : - floor(log10(------))
100.0
else glob_good_digits : 16) else (relerr : - 1.0, glob_good_digits : - 1),
if glob_iter = 1 then array_1st_rel_error : relerr
1
else array_last_rel_error : relerr, omniout_float(ALWAYS,
1
"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, " "))))
(%o4) display_alot(iter) := block([abserr, analytic_val_y, ind_var,
numeric_val, relerr, term_no], if reached_interval()
then (if iter >= 0 then (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 : omniabs(numeric_val - analytic_val_y),
omniout_float(ALWAYS, "y[1] (numeric) ", 33, numeric_val,
20, " "), if omniabs(analytic_val_y) # 0.0
abserr 100.0
then (relerr : -----------------------,
omniabs(analytic_val_y)
relerr
if relerr # 0.0 then glob_good_digits : - floor(log10(------))
100.0
else glob_good_digits : 16) else (relerr : - 1.0, glob_good_digits : - 1),
if glob_iter = 1 then array_1st_rel_error : relerr
1
else array_last_rel_error : relerr, omniout_float(ALWAYS,
1
"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, " "))))
(%i5) adjust_for_pole(h_param) := block([hnew, sz2, tmp],
block(hnew : h_param, glob_normmax : glob_small_float,
if omniabs(array_y_higher ) > glob_small_float
1, 1
then (tmp : omniabs(array_y_higher ),
1, 1
if tmp < glob_normmax then glob_normmax : tmp),
if glob_look_poles and (omniabs(array_pole ) > glob_small_float)
1
array_pole
1
and (array_pole # glob_large_float) then (sz2 : -----------,
1 10.0
if sz2 < hnew then (omniout_float(INFO, "glob_h adjusted to ", 20, h_param,
12, "due to singularity."), omniout_str(INFO, "Reached Optimal"),
return(hnew))), if not glob_reached_optimal_h
then (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 ), hnew : sz2), return(hnew))
1
(%o5) adjust_for_pole(h_param) := block([hnew, sz2, tmp],
block(hnew : h_param, glob_normmax : glob_small_float,
if omniabs(array_y_higher ) > glob_small_float
1, 1
then (tmp : omniabs(array_y_higher ),
1, 1
if tmp < glob_normmax then glob_normmax : tmp),
if glob_look_poles and (omniabs(array_pole ) > glob_small_float)
1
array_pole
1
and (array_pole # glob_large_float) then (sz2 : -----------,
1 10.0
if sz2 < hnew then (omniout_float(INFO, "glob_h adjusted to ", 20, h_param,
12, "due to singularity."), omniout_str(INFO, "Reached Optimal"),
return(hnew))), if not glob_reached_optimal_h
then (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 ), hnew : sz2), return(hnew))
1
(%i6) prog_report(x_start, x_end) := block([clock_sec, opt_clock_sec,
clock_sec1, expect_sec, left_sec, percent_done, total_clock_sec],
clock_sec1 : elapsed_time_seconds(), total_clock_sec :
convfloat(clock_sec1) - convfloat(glob_orig_start_sec),
glob_clock_sec : convfloat(clock_sec1) - convfloat(glob_clock_start_sec),
left_sec : - convfloat(clock_sec1) + convfloat(glob_orig_start_sec)
+ convfloat(glob_max_sec), expect_sec :
comp_expect_sec(convfloat(x_end), convfloat(x_start),
convfloat(glob_h) + convfloat(array_x ),
1
convfloat(clock_sec1) - convfloat(glob_orig_start_sec)),
opt_clock_sec : convfloat(clock_sec1)
- convfloat(glob_optimal_clock_start_sec),
glob_optimal_expect_sec : comp_expect_sec(convfloat(x_end),
convfloat(x_start), convfloat(glob_h) + convfloat(array_x ),
1
convfloat(opt_clock_sec)), percent_done :
comp_percent(convfloat(x_end), convfloat(x_start),
convfloat(glob_h) + convfloat(array_x )), glob_percent_done : percent_done,
1
omniout_str_noeol(INFO, "Total Elapsed Time "),
omniout_timestr(convfloat(total_clock_sec)),
omniout_str_noeol(INFO, "Elapsed Time(since restart) "),
omniout_timestr(convfloat(glob_clock_sec)),
if convfloat(percent_done) < convfloat(100.0)
then (omniout_str_noeol(INFO, "Expected Time Remaining "),
omniout_timestr(convfloat(expect_sec)),
omniout_str_noeol(INFO, "Optimized Time Remaining "),
omniout_timestr(convfloat(glob_optimal_expect_sec))),
omniout_str_noeol(INFO, "Time to Timeout "),
omniout_timestr(convfloat(left_sec)), omniout_float(INFO,
"Percent Done ", 33, percent_done, 4, "%"))
(%o6) prog_report(x_start, x_end) := block([clock_sec, opt_clock_sec,
clock_sec1, expect_sec, left_sec, percent_done, total_clock_sec],
clock_sec1 : elapsed_time_seconds(), total_clock_sec :
convfloat(clock_sec1) - convfloat(glob_orig_start_sec),
glob_clock_sec : convfloat(clock_sec1) - convfloat(glob_clock_start_sec),
left_sec : - convfloat(clock_sec1) + convfloat(glob_orig_start_sec)
+ convfloat(glob_max_sec), expect_sec :
comp_expect_sec(convfloat(x_end), convfloat(x_start),
convfloat(glob_h) + convfloat(array_x ),
1
convfloat(clock_sec1) - convfloat(glob_orig_start_sec)),
opt_clock_sec : convfloat(clock_sec1)
- convfloat(glob_optimal_clock_start_sec),
glob_optimal_expect_sec : comp_expect_sec(convfloat(x_end),
convfloat(x_start), convfloat(glob_h) + convfloat(array_x ),
1
convfloat(opt_clock_sec)), percent_done :
comp_percent(convfloat(x_end), convfloat(x_start),
convfloat(glob_h) + convfloat(array_x )), glob_percent_done : percent_done,
1
omniout_str_noeol(INFO, "Total Elapsed Time "),
omniout_timestr(convfloat(total_clock_sec)),
omniout_str_noeol(INFO, "Elapsed Time(since restart) "),
omniout_timestr(convfloat(glob_clock_sec)),
if convfloat(percent_done) < convfloat(100.0)
then (omniout_str_noeol(INFO, "Expected Time Remaining "),
omniout_timestr(convfloat(expect_sec)),
omniout_str_noeol(INFO, "Optimized Time Remaining "),
omniout_timestr(convfloat(glob_optimal_expect_sec))),
omniout_str_noeol(INFO, "Time to Timeout "),
omniout_timestr(convfloat(left_sec)), omniout_float(INFO,
"Percent Done ", 33, percent_done, 4, "%"))
(%i7) check_for_pole() := block([cnt, dr1, dr2, ds1, ds2, hdrc, m, n, nr1,
nr2, ord_no, rad_c, rcs, rm0, rm1, rm2, rm3, rm4, found], n : glob_max_terms,
m : - 1 - 1 + n, while (m >= 10) and ((omniabs(array_y_higher ) < glob_small_float)
1, m
or (omniabs(array_y_higher ) < glob_small_float)
1, m - 1
or (omniabs(array_y_higher ) < glob_small_float)) do m :
1, m - 2
array_y_higher
1, m
m - 1, if m > 10 then (rm0 : ----------------------,
array_y_higher
1, m - 1
array_y_higher
1, m - 1
rm1 : ----------------------, hdrc : convfloat(m - 1) rm0
array_y_higher
1, m - 2
- convfloat(m - 2) rm1, if omniabs(hdrc) > glob_small_float
glob_h convfloat(m - 1) rm0
then (rcs : ------, ord_no : 2.0 - convfloat(m) + --------------------,
hdrc hdrc
array_real_pole : rcs, array_real_pole : ord_no)
1, 1 1, 2
else (array_real_pole : glob_large_float,
1, 1
array_real_pole : glob_large_float))
1, 2
else (array_real_pole : glob_large_float,
1, 1
array_real_pole : glob_large_float), n : - 1 - 1 + glob_max_terms,
1, 2
cnt : 0, while (cnt < 5) and (n >= 10) do (if omniabs(array_y_higher ) >
1, n
glob_small_float then cnt : 1 + cnt else cnt : 0, n : n - 1), m : cnt + n,
if m <= 10 then (array_complex_pole : glob_large_float,
1, 1
array_complex_pole : glob_large_float)
1, 2
elseif (omniabs(array_y_higher ) >= glob_large_float)
1, m
or (omniabs(array_y_higher ) >= glob_large_float)
1, m - 1
or (omniabs(array_y_higher ) >= glob_large_float)
1, m - 2
or (omniabs(array_y_higher ) >= glob_large_float)
1, m - 3
or (omniabs(array_y_higher ) >= glob_large_float)
1, m - 4
or (omniabs(array_y_higher ) >= glob_large_float)
1, m - 5
then (array_complex_pole : glob_large_float,
1, 1
array_complex_pole : glob_large_float)
1, 2
array_y_higher array_y_higher
1, m 1, m - 1
else (rm0 : ----------------------, rm1 : ----------------------,
array_y_higher array_y_higher
1, m - 1 1, m - 2
array_y_higher array_y_higher
1, m - 2 1, m - 3
rm2 : ----------------------, rm3 : ----------------------,
array_y_higher array_y_higher
1, m - 3 1, m - 4
array_y_higher
1, m - 4
rm4 : ----------------------, nr1 : convfloat(m - 3) rm2
array_y_higher
1, m - 5
- 2.0 convfloat(m - 2) rm1 + convfloat(m - 1) rm0,
nr2 : convfloat(m - 4) rm3 - 2.0 convfloat(m - 3) rm2 + convfloat(m - 2) rm1,
- 1.0 2.0 - 1.0 - 1.0 2.0 - 1.0 5.0 8.0 3.0
dr1 : ----- + --- + -----, dr2 : ----- + --- + -----, ds1 : --- - --- + ---,
rm3 rm2 rm1 rm4 rm3 rm2 rm3 rm2 rm1
5.0 8.0 3.0
ds2 : --- - --- + ---, if (omniabs(nr1 dr2 - nr2 dr1) <= glob_small_float)
rm4 rm3 rm2
or (omniabs(dr1) <= glob_small_float) then (array_complex_pole :
1, 1
glob_large_float, array_complex_pole : glob_large_float)
1, 2
else (if omniabs(nr1 dr2 - nr2 dr1) > glob_small_float
dr1 dr2 - ds2 dr1 + ds1 dr2
then (rcs : ---------------------------,
nr1 dr2 - nr2 dr1
rcs nr1 - ds1 convfloat(m)
ord_no : ------------- - ------------,
2.0 dr1 2.0
if omniabs(rcs) > glob_small_float then (if rcs > 0.0
then rad_c : sqrt(rcs) omniabs(glob_h) else rad_c : glob_large_float)
else (rad_c : glob_large_float, ord_no : glob_large_float))
else (rad_c : glob_large_float, ord_no : glob_large_float)),
array_complex_pole : rad_c, array_complex_pole : ord_no),
1, 1 1, 2
found : false, if (not found) and ((array_real_pole = glob_large_float)
1, 1
or (array_real_pole = glob_large_float))
1, 2
and ((array_complex_pole # glob_large_float) and (array_complex_pole # glob_large_float))
1, 1 1, 2
and ((array_complex_pole > 0.0) and (array_complex_pole > 0.0))
1, 1 1, 2
then (array_poles : array_complex_pole ,
1, 1 1, 1
array_poles : array_complex_pole , found : true, array_type_pole : 2,
1, 2 1, 2 1
if glob_display_flag then omniout_str(ALWAYS,
"Complex estimate of poles used")), if (not found)
and ((array_real_pole # glob_large_float) and (array_real_pole # glob_large_float)
1, 1 1, 2
and (array_real_pole > 0.0) and (array_real_pole > 0.0)
1, 1 1, 2
and ((array_complex_pole = glob_large_float) or (array_complex_pole = glob_large_float) or (array_complex_pole <= 0.0) or (array_complex_pole <= 0.0)))
1, 1 1, 2 1, 1 1, 2
then (array_poles : array_real_pole ,
1, 1 1, 1
array_poles : array_real_pole , found : true, array_type_pole : 1,
1, 2 1, 2 1
if glob_display_flag then omniout_str(ALWAYS, "Real estimate of pole used")),
if (not found) and (((array_real_pole = glob_large_float)
1, 1
or (array_real_pole = glob_large_float))
1, 2
and ((array_complex_pole = glob_large_float) or (array_complex_pole = glob_large_float)))
1, 1 1, 2
then (array_poles : glob_large_float, array_poles : glob_large_float,
1, 1 1, 2
found : true, array_type_pole : 3, if reached_interval()
1
then omniout_str(ALWAYS, "NO POLE")),
if (not found) and ((array_real_pole < array_complex_pole )
1, 1 1, 1
and (array_real_pole > 0.0) and (array_real_pole >
1, 1 1, 2
0.0))
then (array_poles : array_real_pole ,
1, 1 1, 1
array_poles : array_real_pole , found : true, array_type_pole : 1,
1, 2 1, 2 1
if glob_display_flag then omniout_str(ALWAYS, "Real estimate of pole used")),
if (not found) and ((array_complex_pole # glob_large_float)
1, 1
and (array_complex_pole # glob_large_float)
1, 2
and (array_complex_pole > 0.0) and (array_complex_pole >
1, 1 1, 2
0.0))
then (array_poles : array_complex_pole ,
1, 1 1, 1
array_poles : array_complex_pole , array_type_pole : 2, found : true,
1, 2 1, 2 1
if glob_display_flag then omniout_str(ALWAYS,
"Complex estimate of poles used")), if not found
then (array_poles : glob_large_float, array_poles : glob_large_float,
1, 1 1, 2
array_type_pole : 3, if reached_interval()
1
then omniout_str(ALWAYS, "NO POLE")), array_pole : glob_large_float,
1
array_pole : glob_large_float, if array_pole > array_poles
2 1 1, 1
then (array_pole : array_poles , array_pole : array_poles ),
1 1, 1 2 1, 2
if reached_interval() then display_pole())
(%o7) check_for_pole() := block([cnt, dr1, dr2, ds1, ds2, hdrc, m, n, nr1,
nr2, ord_no, rad_c, rcs, rm0, rm1, rm2, rm3, rm4, found], n : glob_max_terms,
m : - 1 - 1 + n, while (m >= 10) and ((omniabs(array_y_higher ) < glob_small_float)
1, m
or (omniabs(array_y_higher ) < glob_small_float)
1, m - 1
or (omniabs(array_y_higher ) < glob_small_float)) do m :
1, m - 2
array_y_higher
1, m
m - 1, if m > 10 then (rm0 : ----------------------,
array_y_higher
1, m - 1
array_y_higher
1, m - 1
rm1 : ----------------------, hdrc : convfloat(m - 1) rm0
array_y_higher
1, m - 2
- convfloat(m - 2) rm1, if omniabs(hdrc) > glob_small_float
glob_h convfloat(m - 1) rm0
then (rcs : ------, ord_no : 2.0 - convfloat(m) + --------------------,
hdrc hdrc
array_real_pole : rcs, array_real_pole : ord_no)
1, 1 1, 2
else (array_real_pole : glob_large_float,
1, 1
array_real_pole : glob_large_float))
1, 2
else (array_real_pole : glob_large_float,
1, 1
array_real_pole : glob_large_float), n : - 1 - 1 + glob_max_terms,
1, 2
cnt : 0, while (cnt < 5) and (n >= 10) do (if omniabs(array_y_higher ) >
1, n
glob_small_float then cnt : 1 + cnt else cnt : 0, n : n - 1), m : cnt + n,
if m <= 10 then (array_complex_pole : glob_large_float,
1, 1
array_complex_pole : glob_large_float)
1, 2
elseif (omniabs(array_y_higher ) >= glob_large_float)
1, m
or (omniabs(array_y_higher ) >= glob_large_float)
1, m - 1
or (omniabs(array_y_higher ) >= glob_large_float)
1, m - 2
or (omniabs(array_y_higher ) >= glob_large_float)
1, m - 3
or (omniabs(array_y_higher ) >= glob_large_float)
1, m - 4
or (omniabs(array_y_higher ) >= glob_large_float)
1, m - 5
then (array_complex_pole : glob_large_float,
1, 1
array_complex_pole : glob_large_float)
1, 2
array_y_higher array_y_higher
1, m 1, m - 1
else (rm0 : ----------------------, rm1 : ----------------------,
array_y_higher array_y_higher
1, m - 1 1, m - 2
array_y_higher array_y_higher
1, m - 2 1, m - 3
rm2 : ----------------------, rm3 : ----------------------,
array_y_higher array_y_higher
1, m - 3 1, m - 4
array_y_higher
1, m - 4
rm4 : ----------------------, nr1 : convfloat(m - 3) rm2
array_y_higher
1, m - 5
- 2.0 convfloat(m - 2) rm1 + convfloat(m - 1) rm0,
nr2 : convfloat(m - 4) rm3 - 2.0 convfloat(m - 3) rm2 + convfloat(m - 2) rm1,
- 1.0 2.0 - 1.0 - 1.0 2.0 - 1.0 5.0 8.0 3.0
dr1 : ----- + --- + -----, dr2 : ----- + --- + -----, ds1 : --- - --- + ---,
rm3 rm2 rm1 rm4 rm3 rm2 rm3 rm2 rm1
5.0 8.0 3.0
ds2 : --- - --- + ---, if (omniabs(nr1 dr2 - nr2 dr1) <= glob_small_float)
rm4 rm3 rm2
or (omniabs(dr1) <= glob_small_float) then (array_complex_pole :
1, 1
glob_large_float, array_complex_pole : glob_large_float)
1, 2
else (if omniabs(nr1 dr2 - nr2 dr1) > glob_small_float
dr1 dr2 - ds2 dr1 + ds1 dr2
then (rcs : ---------------------------,
nr1 dr2 - nr2 dr1
rcs nr1 - ds1 convfloat(m)
ord_no : ------------- - ------------,
2.0 dr1 2.0
if omniabs(rcs) > glob_small_float then (if rcs > 0.0
then rad_c : sqrt(rcs) omniabs(glob_h) else rad_c : glob_large_float)
else (rad_c : glob_large_float, ord_no : glob_large_float))
else (rad_c : glob_large_float, ord_no : glob_large_float)),
array_complex_pole : rad_c, array_complex_pole : ord_no),
1, 1 1, 2
found : false, if (not found) and ((array_real_pole = glob_large_float)
1, 1
or (array_real_pole = glob_large_float))
1, 2
and ((array_complex_pole # glob_large_float) and (array_complex_pole # glob_large_float))
1, 1 1, 2
and ((array_complex_pole > 0.0) and (array_complex_pole > 0.0))
1, 1 1, 2
then (array_poles : array_complex_pole ,
1, 1 1, 1
array_poles : array_complex_pole , found : true, array_type_pole : 2,
1, 2 1, 2 1
if glob_display_flag then omniout_str(ALWAYS,
"Complex estimate of poles used")), if (not found)
and ((array_real_pole # glob_large_float) and (array_real_pole # glob_large_float)
1, 1 1, 2
and (array_real_pole > 0.0) and (array_real_pole > 0.0)
1, 1 1, 2
and ((array_complex_pole = glob_large_float) or (array_complex_pole = glob_large_float) or (array_complex_pole <= 0.0) or (array_complex_pole <= 0.0)))
1, 1 1, 2 1, 1 1, 2
then (array_poles : array_real_pole ,
1, 1 1, 1
array_poles : array_real_pole , found : true, array_type_pole : 1,
1, 2 1, 2 1
if glob_display_flag then omniout_str(ALWAYS, "Real estimate of pole used")),
if (not found) and (((array_real_pole = glob_large_float)
1, 1
or (array_real_pole = glob_large_float))
1, 2
and ((array_complex_pole = glob_large_float) or (array_complex_pole = glob_large_float)))
1, 1 1, 2
then (array_poles : glob_large_float, array_poles : glob_large_float,
1, 1 1, 2
found : true, array_type_pole : 3, if reached_interval()
1
then omniout_str(ALWAYS, "NO POLE")),
if (not found) and ((array_real_pole < array_complex_pole )
1, 1 1, 1
and (array_real_pole > 0.0) and (array_real_pole >
1, 1 1, 2
0.0))
then (array_poles : array_real_pole ,
1, 1 1, 1
array_poles : array_real_pole , found : true, array_type_pole : 1,
1, 2 1, 2 1
if glob_display_flag then omniout_str(ALWAYS, "Real estimate of pole used")),
if (not found) and ((array_complex_pole # glob_large_float)
1, 1
and (array_complex_pole # glob_large_float)
1, 2
and (array_complex_pole > 0.0) and (array_complex_pole >
1, 1 1, 2
0.0))
then (array_poles : array_complex_pole ,
1, 1 1, 1
array_poles : array_complex_pole , array_type_pole : 2, found : true,
1, 2 1, 2 1
if glob_display_flag then omniout_str(ALWAYS,
"Complex estimate of poles used")), if not found
then (array_poles : glob_large_float, array_poles : glob_large_float,
1, 1 1, 2
array_type_pole : 3, if reached_interval()
1
then omniout_str(ALWAYS, "NO POLE")), array_pole : glob_large_float,
1
array_pole : glob_large_float, if array_pole > array_poles
2 1 1, 1
then (array_pole : array_poles , array_pole : array_poles ),
1 1, 1 2 1, 2
if reached_interval() then display_pole())
(%i8) get_norms() := block([iii], if not glob_initial_pass
then (iii : 1, while iii <= glob_max_terms do (array_norms : 0.0,
iii
iii : 1 + iii), iii : 1, while iii <=
glob_max_terms do (if omniabs(array_y ) > array_norms
iii iii
then array_norms : omniabs(array_y ), iii : 1 + iii)))
iii iii
(%o8) get_norms() := block([iii], if not glob_initial_pass
then (iii : 1, while iii <= glob_max_terms do (array_norms : 0.0,
iii
iii : 1 + iii), iii : 1, while iii <=
glob_max_terms do (if omniabs(array_y ) > array_norms
iii iii
then array_norms : omniabs(array_y ), iii : 1 + iii)))
iii iii
(%i9) atomall() := block([kkk, order_d, adj2, temporary, term, temp, temp2],
array_tmp1 : array_const_0D1 array_x ,
1 1 1
array_tmp2 : array_const_0D2 + array_tmp1 ,
1 1 1
array_tmp3 : arcsin(array_tmp2 ), array_tmp3_a1 : cos(array_tmp3 ),
1 1 1 1
array_tmp4 : array_tmp3 + array_const_0D0 ,
1 1 1
if not array_y_set_initial then (if 1 <= glob_max_terms
1, 2
then (temporary : array_tmp4 expt(glob_h, 1) factorial_3(0, 1),
1
array_y : temporary, array_y_higher : temporary,
2 1, 2
temporary 2.0
temporary : -------------, array_y_higher : temporary)), kkk : 2,
glob_h 2, 1
array_tmp1 : array_const_0D1 array_x , array_tmp2 : array_tmp1 ,
2 1 2 2 2
array_tmp2
2
array_tmp3 : --------------, array_tmp3_a1 : - array_tmp2 array_tmp3 ,
2 array_tmp3_a1 2 1 2
1
array_tmp4 : array_tmp3 , if not array_y_set_initial
2 2 1, 3
then (if 2 <= glob_max_terms then (temporary :
array_tmp4 expt(glob_h, 1) factorial_3(1, 2), array_y : temporary,
2 3
temporary 2.0
array_y_higher : temporary, temporary : -------------,
1, 3 glob_h
array_y_higher : temporary)), kkk : 3,
2, 2
- att(2, array_tmp3_a1, array_tmp3, 2)
array_tmp3 : --------------------------------------,
3 array_tmp3_a1
1
array_tmp3 array_tmp2 1
2 2
array_tmp3_a1 : - ------------------------- - array_tmp3 array_tmp2 ,
3 2 3 1
array_tmp4 : array_tmp3 , if not array_y_set_initial
3 3 1, 4
then (if 3 <= glob_max_terms then (temporary :
array_tmp4 expt(glob_h, 1) factorial_3(2, 3), array_y : temporary,
3 4
temporary 2.0
array_y_higher : temporary, temporary : -------------,
1, 4 glob_h
array_y_higher : temporary)), kkk : 4,
2, 3
- att(3, array_tmp3_a1, array_tmp3, 2)
array_tmp3 : --------------------------------------,
4 array_tmp3_a1
1
array_tmp3 array_tmp2 2
3 2
array_tmp3_a1 : - ------------------------- - array_tmp3 array_tmp2 ,
4 3 4 1
array_tmp4 : array_tmp3 , if not array_y_set_initial
4 4 1, 5
then (if 4 <= glob_max_terms then (temporary :
array_tmp4 expt(glob_h, 1) factorial_3(3, 4), array_y : temporary,
4 5
temporary 2.0
array_y_higher : temporary, temporary : -------------,
1, 5 glob_h
array_y_higher : temporary)), kkk : 5,
2, 4
- att(4, array_tmp3_a1, array_tmp3, 2)
array_tmp3 : --------------------------------------,
5 array_tmp3_a1
1
array_tmp3 array_tmp2 3
4 2
array_tmp3_a1 : - ------------------------- - array_tmp3 array_tmp2 ,
5 4 5 1
array_tmp4 : array_tmp3 , if not array_y_set_initial
5 5 1, 6
then (if 5 <= glob_max_terms then (temporary :
array_tmp4 expt(glob_h, 1) factorial_3(4, 5), array_y : temporary,
5 6
temporary 2.0
array_y_higher : temporary, temporary : -------------,
1, 6 glob_h
array_y_higher : temporary)), kkk : 6,
2, 5
while kkk <= glob_max_terms do (array_tmp3 :
kkk
- att(kkk - 1, array_tmp3_a1, array_tmp3, 2)
--------------------------------------------,
array_tmp3_a1
1
array_tmp3 array_tmp2 (kkk - 2)
kkk - 1 2
array_tmp3_a1 : - ---------------------------------------
kkk kkk - 1
- array_tmp3 array_tmp2 , array_tmp4 : array_tmp3 , order_d : 1,
kkk 1 kkk kkk
if 1 + order_d + kkk <= glob_max_terms
then (if not array_y_set_initial
1, order_d + kkk
array_tmp4 expt(glob_h, order_d)
kkk
then (temporary : -----------------------------------------,
factorial_3(kkk - 1, - 1 + order_d + kkk)
array_y : temporary, array_y_higher : temporary,
order_d + kkk 1, order_d + kkk
term : - 1 + order_d + kkk, adj2 : 2, while (adj2 <= 1 + order_d)
temporary convfp(adj2)
and (term >= 1) do (temporary : ----------------------,
glob_h
array_y_higher : temporary, adj2 : 1 + adj2, term : term - 1))),
adj2, term
kkk : 1 + kkk))
(%o9) atomall() := block([kkk, order_d, adj2, temporary, term, temp, temp2],
array_tmp1 : array_const_0D1 array_x ,
1 1 1
array_tmp2 : array_const_0D2 + array_tmp1 ,
1 1 1
array_tmp3 : arcsin(array_tmp2 ), array_tmp3_a1 : cos(array_tmp3 ),
1 1 1 1
array_tmp4 : array_tmp3 + array_const_0D0 ,
1 1 1
if not array_y_set_initial then (if 1 <= glob_max_terms
1, 2
then (temporary : array_tmp4 expt(glob_h, 1) factorial_3(0, 1),
1
array_y : temporary, array_y_higher : temporary,
2 1, 2
temporary 2.0
temporary : -------------, array_y_higher : temporary)), kkk : 2,
glob_h 2, 1
array_tmp1 : array_const_0D1 array_x , array_tmp2 : array_tmp1 ,
2 1 2 2 2
array_tmp2
2
array_tmp3 : --------------, array_tmp3_a1 : - array_tmp2 array_tmp3 ,
2 array_tmp3_a1 2 1 2
1
array_tmp4 : array_tmp3 , if not array_y_set_initial
2 2 1, 3
then (if 2 <= glob_max_terms then (temporary :
array_tmp4 expt(glob_h, 1) factorial_3(1, 2), array_y : temporary,
2 3
temporary 2.0
array_y_higher : temporary, temporary : -------------,
1, 3 glob_h
array_y_higher : temporary)), kkk : 3,
2, 2
- att(2, array_tmp3_a1, array_tmp3, 2)
array_tmp3 : --------------------------------------,
3 array_tmp3_a1
1
array_tmp3 array_tmp2 1
2 2
array_tmp3_a1 : - ------------------------- - array_tmp3 array_tmp2 ,
3 2 3 1
array_tmp4 : array_tmp3 , if not array_y_set_initial
3 3 1, 4
then (if 3 <= glob_max_terms then (temporary :
array_tmp4 expt(glob_h, 1) factorial_3(2, 3), array_y : temporary,
3 4
temporary 2.0
array_y_higher : temporary, temporary : -------------,
1, 4 glob_h
array_y_higher : temporary)), kkk : 4,
2, 3
- att(3, array_tmp3_a1, array_tmp3, 2)
array_tmp3 : --------------------------------------,
4 array_tmp3_a1
1
array_tmp3 array_tmp2 2
3 2
array_tmp3_a1 : - ------------------------- - array_tmp3 array_tmp2 ,
4 3 4 1
array_tmp4 : array_tmp3 , if not array_y_set_initial
4 4 1, 5
then (if 4 <= glob_max_terms then (temporary :
array_tmp4 expt(glob_h, 1) factorial_3(3, 4), array_y : temporary,
4 5
temporary 2.0
array_y_higher : temporary, temporary : -------------,
1, 5 glob_h
array_y_higher : temporary)), kkk : 5,
2, 4
- att(4, array_tmp3_a1, array_tmp3, 2)
array_tmp3 : --------------------------------------,
5 array_tmp3_a1
1
array_tmp3 array_tmp2 3
4 2
array_tmp3_a1 : - ------------------------- - array_tmp3 array_tmp2 ,
5 4 5 1
array_tmp4 : array_tmp3 , if not array_y_set_initial
5 5 1, 6
then (if 5 <= glob_max_terms then (temporary :
array_tmp4 expt(glob_h, 1) factorial_3(4, 5), array_y : temporary,
5 6
temporary 2.0
array_y_higher : temporary, temporary : -------------,
1, 6 glob_h
array_y_higher : temporary)), kkk : 6,
2, 5
while kkk <= glob_max_terms do (array_tmp3 :
kkk
- att(kkk - 1, array_tmp3_a1, array_tmp3, 2)
--------------------------------------------,
array_tmp3_a1
1
array_tmp3 array_tmp2 (kkk - 2)
kkk - 1 2
array_tmp3_a1 : - ---------------------------------------
kkk kkk - 1
- array_tmp3 array_tmp2 , array_tmp4 : array_tmp3 , order_d : 1,
kkk 1 kkk kkk
if 1 + order_d + kkk <= glob_max_terms
then (if not array_y_set_initial
1, order_d + kkk
array_tmp4 expt(glob_h, order_d)
kkk
then (temporary : -----------------------------------------,
factorial_3(kkk - 1, - 1 + order_d + kkk)
array_y : temporary, array_y_higher : temporary,
order_d + kkk 1, order_d + kkk
term : - 1 + order_d + kkk, adj2 : 2, while (adj2 <= 1 + order_d)
temporary convfp(adj2)
and (term >= 1) do (temporary : ----------------------,
glob_h
array_y_higher : temporary, adj2 : 1 + adj2, term : term - 1))),
adj2, term
kkk : 1 + kkk))
log(x)
(%i10) log10(x) := ---------
log(10.0)
log(x)
(%o10) log10(x) := ---------
log(10.0)
(%i11) omniout_str(iolevel, str) := if glob_iolevel >= iolevel
then printf(true, "~a~%", string(str))
(%o11) omniout_str(iolevel, str) := if glob_iolevel >= iolevel
then printf(true, "~a~%", string(str))
(%i12) omniout_str_noeol(iolevel, str) :=
if glob_iolevel >= iolevel then printf(true, "~a", string(str))
(%o12) omniout_str_noeol(iolevel, str) :=
if glob_iolevel >= iolevel then printf(true, "~a", string(str))
(%i13) omniout_labstr(iolevel, label, str) :=
if glob_iolevel >= iolevel then printf(true, "~a = ~a~%", string(label),
string(str))
(%o13) omniout_labstr(iolevel, label, str) :=
if glob_iolevel >= iolevel then printf(true, "~a = ~a~%", string(label),
string(str))
(%i14) omniout_float(iolevel, prelabel, prelen, value, vallen, postlabel) :=
if glob_iolevel >= iolevel then (if vallen = 4
then printf(true, "~a = ~g ~s ~%", prelabel, value, postlabel)
else printf(true, "~a = ~g ~s ~%", prelabel, value, postlabel))
(%o14) omniout_float(iolevel, prelabel, prelen, value, vallen, postlabel) :=
if glob_iolevel >= iolevel then (if vallen = 4
then printf(true, "~a = ~g ~s ~%", prelabel, value, postlabel)
else printf(true, "~a = ~g ~s ~%", prelabel, value, postlabel))
(%i15) omniout_int(iolevel, prelabel, prelen, value, vallen, postlabel) :=
if glob_iolevel >= iolevel then (printf(true, "~a = ~d ~a~%", prelabel, value,
postlabel), newline())
(%o15) omniout_int(iolevel, prelabel, prelen, value, vallen, postlabel) :=
if glob_iolevel >= iolevel then (printf(true, "~a = ~d ~a~%", prelabel, value,
postlabel), newline())
(%i16) omniout_float_arr(iolevel, prelabel, elemnt, prelen, value, vallen,
postlabel) := if glob_iolevel >= iolevel
then (sprint(prelabel, "[", elemnt, "]=", value, postlabel), newline())
(%o16) omniout_float_arr(iolevel, prelabel, elemnt, prelen, value, vallen,
postlabel) := if glob_iolevel >= iolevel
then (sprint(prelabel, "[", elemnt, "]=", value, postlabel), newline())
(%i17) dump_series(iolevel, dump_label, series_name, array_series, numb) :=
block([i], if glob_iolevel >= iolevel then (i : 1,
while i <= numb do (sprint(dump_label, series_name, "i = ", i, "series = ",
array_series ), newline(), i : 1 + i)))
i
(%o17) dump_series(iolevel, dump_label, series_name, array_series, numb) :=
block([i], if glob_iolevel >= iolevel then (i : 1,
while i <= numb do (sprint(dump_label, series_name, "i = ", i, "series = ",
array_series ), newline(), i : 1 + i)))
i
(%i18) dump_series_2(iolevel, dump_label, series_name, array_series2, numb,
subnum) := block([i, sub, ts_term], if glob_iolevel >= iolevel
then (sub : 1, while sub <= subnum do (i : 1,
while i <= num do (sprint(dump_label, series_name, "sub = ", sub, "i = ", i,
"series2 = ", array_series2 ), i : 1 + i), sub : 1 + sub)))
sub, i
(%o18) dump_series_2(iolevel, dump_label, series_name, array_series2, numb,
subnum) := block([i, sub, ts_term], if glob_iolevel >= iolevel
then (sub : 1, while sub <= subnum do (i : 1,
while i <= num do (sprint(dump_label, series_name, "sub = ", sub, "i = ", i,
"series2 = ", array_series2 ), i : 1 + i), sub : 1 + sub)))
sub, i
(%i19) cs_info(iolevel, str) := if glob_iolevel >= iolevel
then sprint(concat("cs_info ", str, " glob_correct_start_flag = ",
glob_correct_start_flag, "glob_h := ", glob_h, "glob_reached_optimal_h := ",
glob_reached_optimal_h))
(%o19) cs_info(iolevel, str) := if glob_iolevel >= iolevel
then sprint(concat("cs_info ", str, " glob_correct_start_flag = ",
glob_correct_start_flag, "glob_h := ", glob_h, "glob_reached_optimal_h := ",
glob_reached_optimal_h))
(%i20) logitem_time(fd, secs_in) := block([cent_int, centuries, days,
days_int, hours, hours_int, millinium_int, milliniums, minutes, minutes_int,
sec_in_millinium, sec_int, seconds, secs, years, years_int], secs : secs_in,
printf(fd, "
"), if secs >= 0.0 then (sec_in_millinium :
sec_in_minute min_in_hour hours_in_day days_in_year years_in_century
secs
centuries_in_millinium, milliniums : ----------------,
sec_in_millinium
millinium_int : floor(milliniums), centuries :
(milliniums - millinium_int) centuries_in_millinium,
cent_int : floor(centuries), years : (centuries - cent_int) years_in_century,
years_int : floor(years), days : (years - years_int) days_in_year,
days_int : floor(days), hours : (days - days_int) hours_in_day,
hours_int : floor(hours), minutes : (hours - hours_int) min_in_hour,
minutes_int : floor(minutes), seconds : (minutes - minutes_int) sec_in_minute,
sec_int : floor(seconds), if millinium_int > 0 then printf(fd, "~d Millinia ~d\
Centuries ~d Years ~d Days ~d Hours ~d Minutes ~d Seconds", millinium_int,
cent_int, years_int, days_int, hours_int, minutes_int, sec_int)
elseif cent_int > 0 then printf(fd,
"~d Centuries ~d Years ~d Days ~d Hours ~d Minutes ~d Seconds", cent_int,
years_int, days_int, hours_int, minutes_int, sec_int) elseif years_int > 0
then printf(fd, "~d Years ~d Days ~d Hours ~d Minutes ~d Seconds", years_int,
days_int, hours_int, minutes_int, sec_int) elseif days_int > 0
then printf(fd, "~d Days ~d Hours ~d Minutes ~d Seconds", days_int,
hours_int, minutes_int, sec_int) elseif hours_int > 0
then printf(fd, "~d Hours ~d Minutes ~d Seconds", hours_int, minutes_int,
sec_int) elseif minutes_int > 0 then printf(fd, "~d Minutes ~d Seconds",
minutes_int, sec_int) else printf(fd, "~d Seconds", sec_int))
else printf(fd, "Unknown"), printf(fd, " | "))
(%o20) logitem_time(fd, secs_in) := block([cent_int, centuries, days,
days_int, hours, hours_int, millinium_int, milliniums, minutes, minutes_int,
sec_in_millinium, sec_int, seconds, secs, years, years_int], secs : secs_in,
printf(fd, ""), if secs >= 0.0 then (sec_in_millinium :
sec_in_minute min_in_hour hours_in_day days_in_year years_in_century
secs
centuries_in_millinium, milliniums : ----------------,
sec_in_millinium
millinium_int : floor(milliniums), centuries :
(milliniums - millinium_int) centuries_in_millinium,
cent_int : floor(centuries), years : (centuries - cent_int) years_in_century,
years_int : floor(years), days : (years - years_int) days_in_year,
days_int : floor(days), hours : (days - days_int) hours_in_day,
hours_int : floor(hours), minutes : (hours - hours_int) min_in_hour,
minutes_int : floor(minutes), seconds : (minutes - minutes_int) sec_in_minute,
sec_int : floor(seconds), if millinium_int > 0 then printf(fd, "~d Millinia ~d\
Centuries ~d Years ~d Days ~d Hours ~d Minutes ~d Seconds", millinium_int,
cent_int, years_int, days_int, hours_int, minutes_int, sec_int)
elseif cent_int > 0 then printf(fd,
"~d Centuries ~d Years ~d Days ~d Hours ~d Minutes ~d Seconds", cent_int,
years_int, days_int, hours_int, minutes_int, sec_int) elseif years_int > 0
then printf(fd, "~d Years ~d Days ~d Hours ~d Minutes ~d Seconds", years_int,
days_int, hours_int, minutes_int, sec_int) elseif days_int > 0
then printf(fd, "~d Days ~d Hours ~d Minutes ~d Seconds", days_int,
hours_int, minutes_int, sec_int) elseif hours_int > 0
then printf(fd, "~d Hours ~d Minutes ~d Seconds", hours_int, minutes_int,
sec_int) elseif minutes_int > 0 then printf(fd, "~d Minutes ~d Seconds",
minutes_int, sec_int) else printf(fd, "~d Seconds", sec_int))
else printf(fd, "Unknown"), printf(fd, " | "))
(%i21) omniout_timestr(secs_in) := block([cent_int, centuries, days, days_int,
hours, hours_int, millinium_int, milliniums, minutes, minutes_int,
sec_in_millinium, sec_int, seconds, secs, years, years_int],
secs : convfloat(secs_in), if secs >= convfloat(0.0)
then (sec_in_millinium : convfloat(sec_in_minute) convfloat(min_in_hour)
convfloat(hours_in_day) convfloat(days_in_year) convfloat(years_in_century)
secs
convfloat(centuries_in_millinium), milliniums : ---------------------------,
convfloat(sec_in_millinium)
millinium_int : floor(milliniums), centuries :
(milliniums - millinium_int) convfloat(centuries_in_millinium),
cent_int : floor(centuries), years : (centuries - cent_int)
convfloat(years_in_century), years_int : floor(years),
days : (years - years_int) convfloat(days_in_year), days_int : floor(days),
hours : (days - days_int) convfloat(hours_in_day), hours_int : floor(hours),
minutes : (hours - hours_int) convfloat(min_in_hour),
minutes_int : floor(minutes), seconds :
(minutes - minutes_int) convfloat(sec_in_minute), sec_int : floor(seconds),
if millinium_int > 0 then printf(true,
"= ~d Millinia ~d Centuries ~d Years ~d Days ~d Hours ~d Minutes ~d Seconds~%",
millinium_int, cent_int, years_int, days_int, hours_int, minutes_int, sec_int)
elseif cent_int > 0 then printf(true,
"= ~d Centuries ~d Years ~d Days ~d Hours ~d Minutes ~d Seconds~%", cent_int,
years_int, days_int, hours_int, minutes_int, sec_int) elseif years_int > 0
then printf(true, "= ~d Years ~d Days ~d Hours ~d Minutes ~d Seconds~%",
years_int, days_int, hours_int, minutes_int, sec_int) elseif days_int > 0
then printf(true, "= ~d Days ~d Hours ~d Minutes ~d Seconds~%", days_int,
hours_int, minutes_int, sec_int) elseif hours_int > 0
then printf(true, "= ~d Hours ~d Minutes ~d Seconds~%", hours_int,
minutes_int, sec_int) elseif minutes_int > 0
then printf(true, "= ~d Minutes ~d Seconds~%", minutes_int, sec_int)
else printf(true, "= ~d Seconds~%", sec_int)) else printf(true, " Unknown~%"))
(%o21) omniout_timestr(secs_in) := block([cent_int, centuries, days, days_int,
hours, hours_int, millinium_int, milliniums, minutes, minutes_int,
sec_in_millinium, sec_int, seconds, secs, years, years_int],
secs : convfloat(secs_in), if secs >= convfloat(0.0)
then (sec_in_millinium : convfloat(sec_in_minute) convfloat(min_in_hour)
convfloat(hours_in_day) convfloat(days_in_year) convfloat(years_in_century)
secs
convfloat(centuries_in_millinium), milliniums : ---------------------------,
convfloat(sec_in_millinium)
millinium_int : floor(milliniums), centuries :
(milliniums - millinium_int) convfloat(centuries_in_millinium),
cent_int : floor(centuries), years : (centuries - cent_int)
convfloat(years_in_century), years_int : floor(years),
days : (years - years_int) convfloat(days_in_year), days_int : floor(days),
hours : (days - days_int) convfloat(hours_in_day), hours_int : floor(hours),
minutes : (hours - hours_int) convfloat(min_in_hour),
minutes_int : floor(minutes), seconds :
(minutes - minutes_int) convfloat(sec_in_minute), sec_int : floor(seconds),
if millinium_int > 0 then printf(true,
"= ~d Millinia ~d Centuries ~d Years ~d Days ~d Hours ~d Minutes ~d Seconds~%",
millinium_int, cent_int, years_int, days_int, hours_int, minutes_int, sec_int)
elseif cent_int > 0 then printf(true,
"= ~d Centuries ~d Years ~d Days ~d Hours ~d Minutes ~d Seconds~%", cent_int,
years_int, days_int, hours_int, minutes_int, sec_int) elseif years_int > 0
then printf(true, "= ~d Years ~d Days ~d Hours ~d Minutes ~d Seconds~%",
years_int, days_int, hours_int, minutes_int, sec_int) elseif days_int > 0
then printf(true, "= ~d Days ~d Hours ~d Minutes ~d Seconds~%", days_int,
hours_int, minutes_int, sec_int) elseif hours_int > 0
then printf(true, "= ~d Hours ~d Minutes ~d Seconds~%", hours_int,
minutes_int, sec_int) elseif minutes_int > 0
then printf(true, "= ~d Minutes ~d Seconds~%", minutes_int, sec_int)
else printf(true, "= ~d Seconds~%", sec_int)) else printf(true, " Unknown~%"))
(%i22) ats(mmm_ats, array_a, array_b, jjj_ats) :=
block([iii_ats, lll_ats, ma_ats, ret_ats], ret_ats : 0.0,
if jjj_ats <= mmm_ats then (ma_ats : 1 + mmm_ats, iii_ats : jjj_ats,
while iii_ats <= mmm_ats do (lll_ats : ma_ats - iii_ats,
ret_ats : array_a array_b + ret_ats, iii_ats : 1 + iii_ats)),
iii_ats lll_ats
ret_ats)
(%o22) ats(mmm_ats, array_a, array_b, jjj_ats) :=
block([iii_ats, lll_ats, ma_ats, ret_ats], ret_ats : 0.0,
if jjj_ats <= mmm_ats then (ma_ats : 1 + mmm_ats, iii_ats : jjj_ats,
while iii_ats <= mmm_ats do (lll_ats : ma_ats - iii_ats,
ret_ats : array_a array_b + ret_ats, iii_ats : 1 + iii_ats)),
iii_ats lll_ats
ret_ats)
(%i23) att(mmm_att, array_aa, array_bb, jjj_att) :=
block([al_att, iii_att, lll_att, ma_att, ret_att], ret_att : 0.0,
if jjj_att <= mmm_att then (ma_att : 2 + mmm_att, iii_att : jjj_att,
while iii_att <= mmm_att do (lll_att : ma_att - iii_att,
al_att : lll_att - 1, if lll_att <= glob_max_terms
then ret_att : array_aa array_bb convfp(al_att) + ret_att,
iii_att lll_att
ret_att
iii_att : 1 + iii_att), ret_att : ---------------), ret_att)
convfp(mmm_att)
(%o23) att(mmm_att, array_aa, array_bb, jjj_att) :=
block([al_att, iii_att, lll_att, ma_att, ret_att], ret_att : 0.0,
if jjj_att <= mmm_att then (ma_att : 2 + mmm_att, iii_att : jjj_att,
while iii_att <= mmm_att do (lll_att : ma_att - iii_att,
al_att : lll_att - 1, if lll_att <= glob_max_terms
then ret_att : array_aa array_bb convfp(al_att) + ret_att,
iii_att lll_att
ret_att
iii_att : 1 + iii_att), ret_att : ---------------), ret_att)
convfp(mmm_att)
(%i24) display_pole() := if (array_pole # glob_large_float)
1
and (array_pole > 0.0) and (array_pole # glob_large_float)
1 2
and (array_pole > 0.0) and glob_display_flag
2
then (omniout_float(ALWAYS, "Radius of convergence ", 4,
array_pole , 4, " "), omniout_float(ALWAYS,
1
"Order of pole ", 4, array_pole , 4, " "))
2
(%o24) display_pole() := if (array_pole # glob_large_float)
1
and (array_pole > 0.0) and (array_pole # glob_large_float)
1 2
and (array_pole > 0.0) and glob_display_flag
2
then (omniout_float(ALWAYS, "Radius of convergence ", 4,
array_pole , 4, " "), omniout_float(ALWAYS,
1
"Order of pole ", 4, array_pole , 4, " "))
2
(%i25) logditto(file) := (printf(file, ""), printf(file, "ditto"),
printf(file, " | "))
(%o25) logditto(file) := (printf(file, ""), printf(file, "ditto"),
printf(file, " | "))
(%i26) logitem_integer(file, n) := (printf(file, ""),
printf(file, "~d", n), printf(file, " | "))
(%o26) logitem_integer(file, n) := (printf(file, ""),
printf(file, "~d", n), printf(file, " | "))
(%i27) logitem_str(file, str) := (printf(file, ""), printf(file, str),
printf(file, " | "))
(%o27) logitem_str(file, str) := (printf(file, ""), printf(file, str),
printf(file, " | "))
(%i28) logitem_good_digits(file, rel_error) :=
block([good_digits], printf(file, ""),
if rel_error # - 1.0 then (if rel_error # 0.0
rel_error
then (good_digits : - floor(log10(---------)),
100.0
printf(file, "~d", good_digits)) else (good_digits : 16,
printf(file, "~d", good_digits))) else printf(file, "Unknown"),
printf(file, " | "))
(%o28) logitem_good_digits(file, rel_error) :=
block([good_digits], printf(file, ""),
if rel_error # - 1.0 then (if rel_error # 0.0
rel_error
then (good_digits : - floor(log10(---------)),
100.0
printf(file, "~d", good_digits)) else (good_digits : 16,
printf(file, "~d", good_digits))) else printf(file, "Unknown"),
printf(file, " | "))
(%i29) log_revs(file, revs) := printf(file, revs)
(%o29) log_revs(file, revs) := printf(file, revs)
(%i30) logitem_float(file, x) := (printf(file, ""), printf(file, "~g", x),
printf(file, " | "))
(%o30) logitem_float(file, x) := (printf(file, ""), printf(file, "~g", x),
printf(file, " | "))
(%i31) logitem_pole(file, pole) := (printf(file, ""),
if pole = 0 then printf(file, "NA") elseif pole = 1 then printf(file, "Real")
elseif pole = 2 then printf(file, "Complex") else printf(file, "No Pole"),
printf(file, " | "))
(%o31) logitem_pole(file, pole) := (printf(file, ""),
if pole = 0 then printf(file, "NA") elseif pole = 1 then printf(file, "Real")
elseif pole = 2 then printf(file, "Complex") else printf(file, "No Pole"),
printf(file, " | "))
(%i32) logstart(file) := printf(file, "")
(%o32) logstart(file) := printf(file, "
")
(%i33) logend(file) := printf(file, "
~%")
(%o33) logend(file) := printf(file, "~%")
(%i34) not_reached_end(x, x_end) := block([ret],
if (glob_neg_h and (x > x_end)) or ((not glob_neg_h) and (x < x_end))
then ret : true else ret : false, ret)
(%o34) not_reached_end(x, x_end) := block([ret],
if (glob_neg_h and (x > x_end)) or ((not glob_neg_h) and (x < x_end))
then ret : true else ret : false, ret)
(%i35) chk_data() := block([errflag], errflag : false,
if (glob_max_terms < 15) or (glob_max_terms > 512)
then (omniout_str(ALWAYS, "Illegal max_terms = -- Using 30"),
glob_max_terms : 30), if glob_max_iter < 2
then (omniout_str(ALWAYS, "Illegal max_iter"), errflag : true),
if errflag then quit())
(%o35) chk_data() := block([errflag], errflag : false,
if (glob_max_terms < 15) or (glob_max_terms > 512)
then (omniout_str(ALWAYS, "Illegal max_terms = -- Using 30"),
glob_max_terms : 30), if glob_max_iter < 2
then (omniout_str(ALWAYS, "Illegal max_iter"), errflag : true),
if errflag then quit())
(%i36) comp_expect_sec(t_end2, t_start2, t2, clock_sec2) :=
block([ms2, rrr, sec_left, sub1, sub2], ms2 : clock_sec2,
sub1 : t_end2 - t_start2, sub2 : t2 - t_start2,
if sub1 = 0.0 then sec_left : 0.0 else (if sub2 > 0.0
sub1
then (rrr : ----, sec_left : rrr ms2 - ms2) else sec_left : 0.0), sec_left)
sub2
(%o36) comp_expect_sec(t_end2, t_start2, t2, clock_sec2) :=
block([ms2, rrr, sec_left, sub1, sub2], ms2 : clock_sec2,
sub1 : t_end2 - t_start2, sub2 : t2 - t_start2,
if sub1 = 0.0 then sec_left : 0.0 else (if sub2 > 0.0
sub1
then (rrr : ----, sec_left : rrr ms2 - ms2) else sec_left : 0.0), sec_left)
sub2
(%i37) comp_percent(t_end2, t_start2, t2) :=
block([rrr, sub1, sub2], sub1 : t_end2 - t_start2, sub2 : t2 - t_start2,
100.0 sub2
if sub2 > glob_small_float then rrr : ---------- else rrr : 0.0, rrr)
sub1
(%o37) comp_percent(t_end2, t_start2, t2) :=
block([rrr, sub1, sub2], sub1 : t_end2 - t_start2, sub2 : t2 - t_start2,
100.0 sub2
if sub2 > glob_small_float then rrr : ---------- else rrr : 0.0, rrr)
sub1
(%i38) factorial_2(nnn) := block([ret], ret : nnn!)
(%o38) factorial_2(nnn) := block([ret], ret : nnn!)
(%i39) factorial_1(nnn) := block([ret],
if nnn <= glob_max_terms then (if array_fact_1 = 0
nnn
then (ret : factorial_2(nnn), array_fact_1 : ret)
nnn
else ret : array_fact_1 ) else ret : factorial_2(nnn), ret)
nnn
(%o39) factorial_1(nnn) := block([ret],
if nnn <= glob_max_terms then (if array_fact_1 = 0
nnn
then (ret : factorial_2(nnn), array_fact_1 : ret)
nnn
else ret : array_fact_1 ) else ret : factorial_2(nnn), ret)
nnn
(%i40) factorial_3(mmm, nnn) := block([ret],
if (nnn <= glob_max_terms) and (mmm <= glob_max_terms)
factorial_1(mmm)
then (if array_fact_2 = 0 then (ret : ----------------,
mmm, nnn factorial_1(nnn)
array_fact_2 : ret) else ret : array_fact_2 )
mmm, nnn mmm, nnn
factorial_2(mmm)
else ret : ----------------, ret)
factorial_2(nnn)
(%o40) factorial_3(mmm, nnn) := block([ret],
if (nnn <= glob_max_terms) and (mmm <= glob_max_terms)
factorial_1(mmm)
then (if array_fact_2 = 0 then (ret : ----------------,
mmm, nnn factorial_1(nnn)
array_fact_2 : ret) else ret : array_fact_2 )
mmm, nnn mmm, nnn
factorial_2(mmm)
else ret : ----------------, ret)
factorial_2(nnn)
(%i41) convfp(mmm) := mmm
(%o41) convfp(mmm) := mmm
(%i42) convfloat(mmm) := mmm
(%o42) convfloat(mmm) := mmm
(%i43) elapsed_time_seconds() := block([t], t : elapsed_real_time(), t)
(%o43) elapsed_time_seconds() := block([t], t : elapsed_real_time(), t)
(%i44) arcsin(x) := asin(x)
(%o44) arcsin(x) := asin(x)
(%i45) arccos(x) := acos(x)
(%o45) arccos(x) := acos(x)
(%i46) arctan(x) := atan(x)
(%o46) arctan(x) := atan(x)
(%i47) omniabs(x) := abs(x)
(%o47) omniabs(x) := abs(x)
y
(%i48) expt(x, y) := x
y
(%o48) expt(x, y) := x
(%i49) exact_soln_y(x) := 10.0 sqrt(1.0 - expt(0.2 + 0.1 x, 2))
+ 10.0 (0.2 + 0.1 x) arcsin(0.2 + 0.1 x)
(%o49) exact_soln_y(x) := 10.0 sqrt(1.0 - expt(0.2 + 0.1 x, 2))
+ 10.0 (0.2 + 0.1 x) arcsin(0.2 + 0.1 x)
(%i50) main() := block([d1, d2, d3, d4, est_err_2, niii, done_once, term, ord,
order_diff, term_no, html_log_file, iiif, jjjf, rows, r_order, sub_iter,
calc_term, iii, temp_sum, current_iter, x_start, x_end, it, log10norm,
max_terms, opt_iter, tmp, subiter], define_variable(INFO, 2, fixnum),
define_variable(glob_iolevel, 5, fixnum),
define_variable(DEBUGMASSIVE, 4, fixnum), define_variable(ALWAYS, 1, fixnum),
define_variable(glob_max_terms, 30, fixnum),
define_variable(DEBUGL, 3, fixnum), define_variable(glob_normmax, 0.0, float),
define_variable(glob_max_iter, 1000, fixnum),
define_variable(glob_dump_analytic, false, boolean),
define_variable(glob_warned2, false, boolean),
define_variable(glob_optimal_done, false, boolean),
define_variable(glob_dump, false, boolean),
define_variable(MAX_UNCHANGED, 10, fixnum),
define_variable(glob_abserr, 1.0E-11, float),
define_variable(glob_next_display, 0.0, float),
define_variable(glob_h, 0.1, float), define_variable(glob_not_yet_start_msg,
true, boolean), define_variable(years_in_century, 100, fixnum),
define_variable(min_in_hour, 60, fixnum),
define_variable(glob_log10relerr, 0.0, float),
define_variable(glob_max_rel_trunc_err, 1.0E-11, float),
define_variable(glob_max_hours, 0.0, float),
define_variable(glob_relerr, 1.0E-11, float),
define_variable(glob_last_good_h, 0.1, float),
define_variable(glob_reached_optimal_h, false, boolean),
define_variable(glob_subiter_method, 3, fixnum),
define_variable(glob_max_minutes, 0.0, float),
define_variable(glob_curr_iter_when_opt, 0, fixnum),
define_variable(glob_start, 0, fixnum),
define_variable(glob_no_eqs, 0, fixnum),
define_variable(glob_max_trunc_err, 1.0E-11, float),
define_variable(glob_look_poles, false, boolean),
define_variable(glob_hmin_init, 0.001, float),
define_variable(hours_in_day, 24, fixnum),
define_variable(glob_optimal_expect_sec, 0.1, float),
define_variable(glob_hmin, 1.0E-11, float),
define_variable(glob_clock_start_sec, 0.0, float),
define_variable(centuries_in_millinium, 10, fixnum),
define_variable(days_in_year, 365, fixnum),
define_variable(sec_in_minute, 60, fixnum),
define_variable(djd_debug2, true, boolean),
define_variable(glob_max_opt_iter, 10, fixnum),
define_variable(glob_html_log, true, boolean),
define_variable(glob_smallish_float, 1.0E-101, float),
define_variable(glob_log10_abserr, 1.0E-11, float),
define_variable(glob_neg_h, false, boolean),
define_variable(djd_debug, true, boolean),
define_variable(glob_orig_start_sec, 0.0, float),
define_variable(glob_max_sec, 10000.0, float),
define_variable(glob_display_interval, 0.0, float),
define_variable(glob_initial_pass, true, boolean),
define_variable(glob_log10normmin, 0.1, float),
define_variable(glob_unchanged_h_cnt, 0, fixnum),
define_variable(glob_small_float, 1.0E-51, float),
define_variable(glob_optimal_start, 0.0, float),
define_variable(glob_optimal_clock_start_sec, 0.0, float),
define_variable(glob_large_float, 9.0E+100, float),
define_variable(glob_hmax, 1.0, float),
define_variable(glob_percent_done, 0.0, float),
define_variable(glob_log10abserr, 0.0, float),
define_variable(glob_current_iter, 0, fixnum),
define_variable(glob_disp_incr, 0.1, float),
define_variable(glob_not_yet_finished, true, boolean),
define_variable(glob_almost_1, 0.999, float),
define_variable(glob_good_digits, 0, fixnum),
define_variable(glob_iter, 0, fixnum),
define_variable(glob_warned, false, boolean),
define_variable(glob_log10_relerr, 1.0E-11, float),
define_variable(glob_clock_sec, 0.0, float),
define_variable(glob_display_flag, true, boolean), ALWAYS : 1, INFO : 2,
DEBUGL : 3, DEBUGMASSIVE : 4, glob_iolevel : INFO,
glob_orig_start_sec : elapsed_time_seconds(), MAX_UNCHANGED : 10,
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/lin_arcsinpostode.ode#################"),
omniout_str(ALWAYS, "diff ( y , x , 1 ) = arcsin (0.1 * x + 0.2) ;"),
omniout_str(ALWAYS, "!"), omniout_str(ALWAYS,
"/* BEGIN FIRST INPUT BLOCK */"), omniout_str(ALWAYS, "max_terms : 30,"),
omniout_str(ALWAYS, "Digits : 32,"), omniout_str(ALWAYS, "!"),
omniout_str(ALWAYS, "/* END FIRST INPUT BLOCK */"),
omniout_str(ALWAYS, "/* BEGIN SECOND INPUT BLOCK */"),
omniout_str(ALWAYS, "x_start : -0.8,"), omniout_str(ALWAYS, "x_end : 0.8 ,"),
omniout_str(ALWAYS, "array_y_init[0 + 1] : exact_soln_y(x_start),"),
omniout_str(ALWAYS, "glob_h : 0.00001 ,"),
omniout_str(ALWAYS, "glob_look_poles : true,"),
omniout_str(ALWAYS, "glob_max_iter : 100,"),
omniout_str(ALWAYS, "/* END SECOND INPUT BLOCK */"),
omniout_str(ALWAYS, "/* BEGIN OVERRIDE BLOCK */"),
omniout_str(ALWAYS, "glob_h : 0.005 ,"),
omniout_str(ALWAYS, "glob_display_interval : 0.1,"),
omniout_str(ALWAYS, "glob_look_poles : true,"),
omniout_str(ALWAYS, "glob_max_iter : 10000,"),
omniout_str(ALWAYS, "glob_max_minutes : 10,"),
omniout_str(ALWAYS, "/* END OVERRIDE BLOCK */"), omniout_str(ALWAYS, "!"),
omniout_str(ALWAYS, "/* BEGIN USER DEF BLOCK */"),
omniout_str(ALWAYS, "exact_soln_y (x) := ("), omniout_str(ALWAYS, " (10.0 * (\
0.1 * x + 0.2) * arcsin(0.1 * x + 0.2 ) + 10.0 * sqrt(1.0 -"),
omniout_str(ALWAYS, "expt((0.1 * x + 0.2) , 2 ))) "),
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 : 1.0E-200, glob_smallish_float : 1.0E-64,
glob_large_float : 1.0E+100, glob_almost_1 : 0.99, glob_log10_abserr : - 8.0,
glob_log10_relerr : - 8.0, glob_hmax : 0.01, max_terms : 30, Digits : 32,
glob_max_terms : max_terms, glob_html_log : true,
array(array_y, 1 + max_terms), array(array_x, 1 + max_terms),
array(array_tmp3_a1, 1 + max_terms), array(array_norms, 1 + max_terms),
array(array_fact_1, 1 + max_terms), array(array_y_init, 1 + max_terms),
array(array_1st_rel_error, 1 + max_terms), array(array_m1, 1 + max_terms),
array(array_type_pole, 1 + max_terms), array(array_pole, 1 + max_terms),
array(array_last_rel_error, 1 + max_terms), array(array_tmp0, 1 + max_terms),
array(array_tmp1, 1 + max_terms), array(array_tmp2, 1 + max_terms),
array(array_tmp3, 1 + max_terms), array(array_tmp4, 1 + max_terms),
array(array_y_set_initial, 1 + 2, 1 + max_terms),
array(array_fact_2, 1 + max_terms, 1 + max_terms),
array(array_poles, 1 + 1, 1 + 3), array(array_y_higher, 1 + 2, 1 + max_terms),
array(array_complex_pole, 1 + 1, 1 + 3), array(array_real_pole, 1 + 1, 1 + 3),
array(array_y_higher_work2, 1 + 2, 1 + max_terms),
array(array_y_higher_work, 1 + 2, 1 + max_terms), term : 1,
while term <= max_terms do (array_y : 0.0, term : 1 + term), term : 1,
term
while term <= max_terms do (array_x : 0.0, term : 1 + term), term : 1,
term
while term <= max_terms do (array_tmp3_a1 : 0.0, term : 1 + term),
term
term : 1, while term <= max_terms do (array_norms : 0.0,
term
term : 1 + term), term : 1, while term <=
max_terms do (array_fact_1 : 0.0, term : 1 + term), term : 1,
term
while term <= max_terms do (array_y_init : 0.0, term : 1 + term),
term
term : 1, while term <= max_terms do (array_1st_rel_error : 0.0,
term
term : 1 + term), term : 1, while term <= max_terms do (array_m1 : 0.0,
term
term : 1 + term), term : 1, while term <=
max_terms do (array_type_pole : 0.0, term : 1 + term), term : 1,
term
while term <= max_terms do (array_pole : 0.0, term : 1 + term), term : 1,
term
while term <= max_terms do (array_last_rel_error : 0.0, term : 1 + term),
term
term : 1, while term <= max_terms do (array_tmp0 : 0.0, term : 1 + term),
term
term : 1, while term <= max_terms do (array_tmp1 : 0.0, term : 1 + term),
term
term : 1, while term <= max_terms do (array_tmp2 : 0.0, term : 1 + term),
term
term : 1, while term <= max_terms do (array_tmp3 : 0.0, term : 1 + term),
term
term : 1, while term <= max_terms do (array_tmp4 : 0.0, term : 1 + term),
term
ord : 1, while ord <= 2 do (term : 1,
while term <= max_terms do (array_y_set_initial : 0.0,
ord, term
term : 1 + term), ord : 1 + ord), ord : 1,
while ord <= max_terms do (term : 1, while term <=
max_terms do (array_fact_2 : 0.0, term : 1 + term), ord : 1 + ord),
ord, term
ord : 1, while ord <= 1 do (term : 1,
while term <= 3 do (array_poles : 0.0, term : 1 + term),
ord, term
ord : 1 + ord), ord : 1, while ord <= 2 do (term : 1,
while term <= max_terms do (array_y_higher : 0.0, term : 1 + term),
ord, term
ord : 1 + ord), ord : 1, while ord <= 1 do (term : 1,
while term <= 3 do (array_complex_pole : 0.0, term : 1 + term),
ord, term
ord : 1 + ord), ord : 1, while ord <= 1 do (term : 1,
while term <= 3 do (array_real_pole : 0.0, term : 1 + term),
ord, term
ord : 1 + ord), ord : 1, while ord <= 2 do (term : 1,
while term <= max_terms do (array_y_higher_work2 : 0.0,
ord, term
term : 1 + term), ord : 1 + ord), ord : 1,
while ord <= 2 do (term : 1, while term <=
max_terms do (array_y_higher_work : 0.0, term : 1 + term),
ord, term
ord : 1 + ord), array(array_tmp3_a1, 1 + 1 + max_terms), term : 1,
while term <= 1 + max_terms do (array_tmp3_a1 : 0.0, term : 1 + term),
term
array(array_x, 1 + 1 + max_terms), term : 1,
while term <= 1 + max_terms do (array_x : 0.0, term : 1 + term),
term
array(array_y, 1 + 1 + max_terms), term : 1,
while term <= 1 + max_terms do (array_y : 0.0, term : 1 + term),
term
array(array_tmp4, 1 + 1 + max_terms), term : 1,
while term <= 1 + max_terms do (array_tmp4 : 0.0, term : 1 + term),
term
array(array_tmp3, 1 + 1 + max_terms), term : 1,
while term <= 1 + max_terms do (array_tmp3 : 0.0, term : 1 + term),
term
array(array_tmp2, 1 + 1 + max_terms), term : 1,
while term <= 1 + max_terms do (array_tmp2 : 0.0, term : 1 + term),
term
array(array_tmp1, 1 + 1 + max_terms), term : 1,
while term <= 1 + max_terms do (array_tmp1 : 0.0, term : 1 + term),
term
array(array_tmp0, 1 + 1 + max_terms), term : 1,
while term <= 1 + max_terms do (array_tmp0 : 0.0, term : 1 + term),
term
array(array_const_0D2, 1 + 1 + max_terms), term : 1,
while term <= 1 + max_terms do (array_const_0D2 : 0.0, term : 1 + term),
term
array_const_0D2 : 0.2, array(array_const_0D1, 1 + 1 + max_terms), term : 1,
1
while term <= 1 + max_terms do (array_const_0D1 : 0.0, term : 1 + term),
term
array_const_0D1 : 0.1, array(array_const_0D0, 1 + 1 + max_terms), term : 1,
1
while term <= 1 + max_terms do (array_const_0D0 : 0.0, term : 1 + term),
term
array_const_0D0 : 0.0, array(array_const_1, 1 + 1 + max_terms), term : 1,
1
while term <= 1 + max_terms do (array_const_1 : 0.0, term : 1 + term),
term
array_const_1 : 1, array(array_m1, 1 + 1 + max_terms), term : 1,
1
while term <= max_terms do (array_m1 : 0.0, term : 1 + term),
term
array_m1 : - 1.0, iiif : 0, while iiif <= glob_max_terms do (jjjf : 0,
1
while jjjf <= glob_max_terms do (array_fact_1 : 0,
iiif
array_fact_2 : 0, jjjf : 1 + jjjf), iiif : 1 + iiif),
iiif, jjjf
x_start : - 0.8, x_end : 0.8, array_y_init : exact_soln_y(x_start),
1 + 0
glob_h : 1.0E-5, glob_look_poles : true, glob_max_iter : 100, glob_h : 0.005,
glob_display_interval : 0.1, glob_look_poles : true, glob_max_iter : 10000,
glob_max_minutes : 10, glob_last_good_h : glob_h, glob_max_terms : max_terms,
glob_max_sec : convfloat(3600.0) convfloat(glob_max_hours)
+ convfloat(60.0) convfloat(glob_max_minutes),
glob_abserr : expt(10.0, glob_log10_abserr),
glob_relerr : expt(10.0, glob_log10_relerr),
if glob_h > 0.0 then (glob_neg_h : false,
glob_display_interval : omniabs(glob_display_interval))
else (glob_neg_h : true, glob_display_interval :
- omniabs(glob_display_interval)), chk_data(), array_y_set_initial : true,
1, 1
array_y_set_initial : false, array_y_set_initial : false,
1, 2 1, 3
array_y_set_initial : false, array_y_set_initial : false,
1, 4 1, 5
array_y_set_initial : false, array_y_set_initial : false,
1, 6 1, 7
array_y_set_initial : false, array_y_set_initial : false,
1, 8 1, 9
array_y_set_initial : false, array_y_set_initial : false,
1, 10 1, 11
array_y_set_initial : false, array_y_set_initial : false,
1, 12 1, 13
array_y_set_initial : false, array_y_set_initial : false,
1, 14 1, 15
array_y_set_initial : false, array_y_set_initial : false,
1, 16 1, 17
array_y_set_initial : false, array_y_set_initial : false,
1, 18 1, 19
array_y_set_initial : false, array_y_set_initial : false,
1, 20 1, 21
array_y_set_initial : false, array_y_set_initial : false,
1, 22 1, 23
array_y_set_initial : false, array_y_set_initial : false,
1, 24 1, 25
array_y_set_initial : false, array_y_set_initial : false,
1, 26 1, 27
array_y_set_initial : false, array_y_set_initial : false,
1, 28 1, 29
array_y_set_initial : false, if glob_html_log
1, 30
then html_log_file : openw("html/entry.html"),
omniout_str(ALWAYS, "START of Soultion"), array_x : x_start,
1
array_x : glob_h, glob_next_display : x_start, order_diff : 1, term_no : 1,
2
while term_no <= order_diff do (array_y :
term_no
array_y_init expt(glob_h, term_no - 1)
term_no
---------------------------------------------, term_no : 1 + term_no),
factorial_1(term_no - 1)
rows : order_diff, r_order : 1, while r_order <= rows do (term_no : 1,
while term_no <= 1 - r_order + rows do (it : - 1 + r_order + term_no,
array_y_init expt(glob_h, term_no - 1)
it
array_y_higher : ----------------------------------------,
r_order, term_no factorial_1(term_no - 1)
term_no : 1 + term_no), r_order : 1 + r_order), current_iter : 1,
glob_clock_start_sec : elapsed_time_seconds(),
if omniabs(array_y_higher ) > glob_small_float
1, 1
then (tmp : omniabs(array_y_higher ), log10norm : log10(tmp),
1, 1
if log10norm < glob_log10normmin then glob_log10normmin : log10norm),
display_alot(current_iter), 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 not_reached_end(array_x , x_end) and (convfloat(glob_clock_sec) - convfloat(glob_orig_start_sec) <
1
convfloat(glob_max_sec)) do (if reached_interval
() then (omniout_str(INFO, " "), omniout_str(INFO, "TOP MAIN SOLVE Loop")),
glob_iter : 1 + glob_iter, glob_clock_sec : elapsed_time_seconds(),
glob_current_iter : 1 + glob_current_iter, atomall(),
if glob_look_poles then check_for_pole(),
if reached_interval() then glob_next_display :
glob_display_interval + glob_next_display, array_x : glob_h + array_x ,
1 1
array_x : glob_h, order_diff : 1, ord : 2, calc_term : 1,
2
iii : glob_max_terms, while iii >= calc_term do (array_y_higher_work :
2, iii
array_y_higher
2, iii
---------------------------
expt(glob_h, calc_term - 1)
-------------------------------------, iii : iii - 1), temp_sum : 0.0,
factorial_3(iii - calc_term, iii - 1)
ord : 2, calc_term : 1, iii : glob_max_terms,
while iii >= calc_term do (temp_sum : array_y_higher_work + temp_sum,
ord, iii
iii : iii - 1), array_y_higher_work2 :
ord, calc_term
temp_sum expt(glob_h, calc_term - 1)
------------------------------------, ord : 1, calc_term : 2,
factorial_1(calc_term - 1)
iii : glob_max_terms, while iii >= calc_term do (array_y_higher_work :
1, iii
array_y_higher
1, iii
---------------------------
expt(glob_h, calc_term - 1)
-------------------------------------, iii : iii - 1), temp_sum : 0.0,
factorial_3(iii - calc_term, iii - 1)
ord : 1, calc_term : 2, iii : glob_max_terms,
while iii >= calc_term do (temp_sum : array_y_higher_work + temp_sum,
ord, iii
iii : iii - 1), array_y_higher_work2 :
ord, calc_term
temp_sum expt(glob_h, calc_term - 1)
------------------------------------, ord : 1, calc_term : 1,
factorial_1(calc_term - 1)
iii : glob_max_terms, while iii >= calc_term do (array_y_higher_work :
1, iii
array_y_higher
1, iii
---------------------------
expt(glob_h, calc_term - 1)
-------------------------------------, iii : iii - 1), temp_sum : 0.0,
factorial_3(iii - calc_term, iii - 1)
ord : 1, calc_term : 1, iii : glob_max_terms,
while iii >= calc_term do (temp_sum : array_y_higher_work + temp_sum,
ord, iii
iii : iii - 1), array_y_higher_work2 :
ord, calc_term
temp_sum expt(glob_h, calc_term - 1)
------------------------------------, term_no : glob_max_terms,
factorial_1(calc_term - 1)
while term_no >= 1 do (array_y : array_y_higher_work2 ,
term_no 1, term_no
ord : 1, while ord <= order_diff do (array_y_higher :
ord, term_no
array_y_higher_work2 , ord : 1 + ord), term_no : term_no - 1),
ord, term_no
display_alot(current_iter)), omniout_str(ALWAYS, "Finished!"),
if glob_iter >= glob_max_iter then omniout_str(ALWAYS,
"Maximum Iterations Reached before Solution Completed!"),
if elapsed_time_seconds() - convfloat(glob_orig_start_sec) >=
convfloat(glob_max_sec) then omniout_str(ALWAYS,
"Maximum Time Reached before Solution Completed!"),
glob_clock_sec : elapsed_time_seconds(),
omniout_str(INFO, "diff ( y , x , 1 ) = arcsin (0.1 * x + 0.2) ;"),
omniout_int(INFO, "Iterations ", 32, glob_iter, 4, " "),
prog_report(x_start, x_end), if glob_html_log
then (logstart(html_log_file), logitem_str(html_log_file,
"2012-09-20T23:28:33-05:00"), logitem_str(html_log_file, "Maxima"),
logitem_str(html_log_file, "lin_arcsin"),
logitem_str(html_log_file, "diff ( y , x , 1 ) = arcsin (0.1 * x + 0.2) ;"),
logitem_float(html_log_file, x_start), logitem_float(html_log_file, x_end),
logitem_float(html_log_file, array_x ), logitem_float(html_log_file, glob_h),
1
logitem_str(html_log_file, "16"), logitem_good_digits(html_log_file,
array_last_rel_error ), logitem_integer(html_log_file, glob_max_terms),
1
logitem_float(html_log_file, array_1st_rel_error ),
1
logitem_float(html_log_file, array_last_rel_error ),
1
logitem_integer(html_log_file, glob_iter),
logitem_pole(html_log_file, array_type_pole ),
1
if (array_type_pole = 1) or (array_type_pole = 2)
1 1
then (logitem_float(html_log_file, array_pole ),
1
logitem_float(html_log_file, array_pole ), 0)
2
else (logitem_str(html_log_file, "NA"), logitem_str(html_log_file, "NA"), 0),
logitem_time(html_log_file, convfloat(glob_clock_sec)),
if glob_percent_done < 100.0 then (logitem_time(html_log_file,
convfloat(glob_optimal_expect_sec)), 0)
else (logitem_str(html_log_file, "Done"), 0),
log_revs(html_log_file, " 130 | "), logitem_str(html_log_file, "lin_arcsin diffeq.max"),
logitem_str(html_log_file,
"lin_arcsin maxima results"),
logitem_str(html_log_file, "c c++ Maple and Maxima"), logend(html_log_file)),
if glob_html_log then close(html_log_file))
(%o50) main() := block([d1, d2, d3, d4, est_err_2, niii, done_once, term, ord,
order_diff, term_no, html_log_file, iiif, jjjf, rows, r_order, sub_iter,
calc_term, iii, temp_sum, current_iter, x_start, x_end, it, log10norm,
max_terms, opt_iter, tmp, subiter], define_variable(INFO, 2, fixnum),
define_variable(glob_iolevel, 5, fixnum),
define_variable(DEBUGMASSIVE, 4, fixnum), define_variable(ALWAYS, 1, fixnum),
define_variable(glob_max_terms, 30, fixnum),
define_variable(DEBUGL, 3, fixnum), define_variable(glob_normmax, 0.0, float),
define_variable(glob_max_iter, 1000, fixnum),
define_variable(glob_dump_analytic, false, boolean),
define_variable(glob_warned2, false, boolean),
define_variable(glob_optimal_done, false, boolean),
define_variable(glob_dump, false, boolean),
define_variable(MAX_UNCHANGED, 10, fixnum),
define_variable(glob_abserr, 1.0E-11, float),
define_variable(glob_next_display, 0.0, float),
define_variable(glob_h, 0.1, float), define_variable(glob_not_yet_start_msg,
true, boolean), define_variable(years_in_century, 100, fixnum),
define_variable(min_in_hour, 60, fixnum),
define_variable(glob_log10relerr, 0.0, float),
define_variable(glob_max_rel_trunc_err, 1.0E-11, float),
define_variable(glob_max_hours, 0.0, float),
define_variable(glob_relerr, 1.0E-11, float),
define_variable(glob_last_good_h, 0.1, float),
define_variable(glob_reached_optimal_h, false, boolean),
define_variable(glob_subiter_method, 3, fixnum),
define_variable(glob_max_minutes, 0.0, float),
define_variable(glob_curr_iter_when_opt, 0, fixnum),
define_variable(glob_start, 0, fixnum),
define_variable(glob_no_eqs, 0, fixnum),
define_variable(glob_max_trunc_err, 1.0E-11, float),
define_variable(glob_look_poles, false, boolean),
define_variable(glob_hmin_init, 0.001, float),
define_variable(hours_in_day, 24, fixnum),
define_variable(glob_optimal_expect_sec, 0.1, float),
define_variable(glob_hmin, 1.0E-11, float),
define_variable(glob_clock_start_sec, 0.0, float),
define_variable(centuries_in_millinium, 10, fixnum),
define_variable(days_in_year, 365, fixnum),
define_variable(sec_in_minute, 60, fixnum),
define_variable(djd_debug2, true, boolean),
define_variable(glob_max_opt_iter, 10, fixnum),
define_variable(glob_html_log, true, boolean),
define_variable(glob_smallish_float, 1.0E-101, float),
define_variable(glob_log10_abserr, 1.0E-11, float),
define_variable(glob_neg_h, false, boolean),
define_variable(djd_debug, true, boolean),
define_variable(glob_orig_start_sec, 0.0, float),
define_variable(glob_max_sec, 10000.0, float),
define_variable(glob_display_interval, 0.0, float),
define_variable(glob_initial_pass, true, boolean),
define_variable(glob_log10normmin, 0.1, float),
define_variable(glob_unchanged_h_cnt, 0, fixnum),
define_variable(glob_small_float, 1.0E-51, float),
define_variable(glob_optimal_start, 0.0, float),
define_variable(glob_optimal_clock_start_sec, 0.0, float),
define_variable(glob_large_float, 9.0E+100, float),
define_variable(glob_hmax, 1.0, float),
define_variable(glob_percent_done, 0.0, float),
define_variable(glob_log10abserr, 0.0, float),
define_variable(glob_current_iter, 0, fixnum),
define_variable(glob_disp_incr, 0.1, float),
define_variable(glob_not_yet_finished, true, boolean),
define_variable(glob_almost_1, 0.999, float),
define_variable(glob_good_digits, 0, fixnum),
define_variable(glob_iter, 0, fixnum),
define_variable(glob_warned, false, boolean),
define_variable(glob_log10_relerr, 1.0E-11, float),
define_variable(glob_clock_sec, 0.0, float),
define_variable(glob_display_flag, true, boolean), ALWAYS : 1, INFO : 2,
DEBUGL : 3, DEBUGMASSIVE : 4, glob_iolevel : INFO,
glob_orig_start_sec : elapsed_time_seconds(), MAX_UNCHANGED : 10,
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/lin_arcsinpostode.ode#################"),
omniout_str(ALWAYS, "diff ( y , x , 1 ) = arcsin (0.1 * x + 0.2) ;"),
omniout_str(ALWAYS, "!"), omniout_str(ALWAYS,
"/* BEGIN FIRST INPUT BLOCK */"), omniout_str(ALWAYS, "max_terms : 30,"),
omniout_str(ALWAYS, "Digits : 32,"), omniout_str(ALWAYS, "!"),
omniout_str(ALWAYS, "/* END FIRST INPUT BLOCK */"),
omniout_str(ALWAYS, "/* BEGIN SECOND INPUT BLOCK */"),
omniout_str(ALWAYS, "x_start : -0.8,"), omniout_str(ALWAYS, "x_end : 0.8 ,"),
omniout_str(ALWAYS, "array_y_init[0 + 1] : exact_soln_y(x_start),"),
omniout_str(ALWAYS, "glob_h : 0.00001 ,"),
omniout_str(ALWAYS, "glob_look_poles : true,"),
omniout_str(ALWAYS, "glob_max_iter : 100,"),
omniout_str(ALWAYS, "/* END SECOND INPUT BLOCK */"),
omniout_str(ALWAYS, "/* BEGIN OVERRIDE BLOCK */"),
omniout_str(ALWAYS, "glob_h : 0.005 ,"),
omniout_str(ALWAYS, "glob_display_interval : 0.1,"),
omniout_str(ALWAYS, "glob_look_poles : true,"),
omniout_str(ALWAYS, "glob_max_iter : 10000,"),
omniout_str(ALWAYS, "glob_max_minutes : 10,"),
omniout_str(ALWAYS, "/* END OVERRIDE BLOCK */"), omniout_str(ALWAYS, "!"),
omniout_str(ALWAYS, "/* BEGIN USER DEF BLOCK */"),
omniout_str(ALWAYS, "exact_soln_y (x) := ("), omniout_str(ALWAYS, " (10.0 * (\
0.1 * x + 0.2) * arcsin(0.1 * x + 0.2 ) + 10.0 * sqrt(1.0 -"),
omniout_str(ALWAYS, "expt((0.1 * x + 0.2) , 2 ))) "),
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 : 1.0E-200, glob_smallish_float : 1.0E-64,
glob_large_float : 1.0E+100, glob_almost_1 : 0.99, glob_log10_abserr : - 8.0,
glob_log10_relerr : - 8.0, glob_hmax : 0.01, max_terms : 30, Digits : 32,
glob_max_terms : max_terms, glob_html_log : true,
array(array_y, 1 + max_terms), array(array_x, 1 + max_terms),
array(array_tmp3_a1, 1 + max_terms), array(array_norms, 1 + max_terms),
array(array_fact_1, 1 + max_terms), array(array_y_init, 1 + max_terms),
array(array_1st_rel_error, 1 + max_terms), array(array_m1, 1 + max_terms),
array(array_type_pole, 1 + max_terms), array(array_pole, 1 + max_terms),
array(array_last_rel_error, 1 + max_terms), array(array_tmp0, 1 + max_terms),
array(array_tmp1, 1 + max_terms), array(array_tmp2, 1 + max_terms),
array(array_tmp3, 1 + max_terms), array(array_tmp4, 1 + max_terms),
array(array_y_set_initial, 1 + 2, 1 + max_terms),
array(array_fact_2, 1 + max_terms, 1 + max_terms),
array(array_poles, 1 + 1, 1 + 3), array(array_y_higher, 1 + 2, 1 + max_terms),
array(array_complex_pole, 1 + 1, 1 + 3), array(array_real_pole, 1 + 1, 1 + 3),
array(array_y_higher_work2, 1 + 2, 1 + max_terms),
array(array_y_higher_work, 1 + 2, 1 + max_terms), term : 1,
while term <= max_terms do (array_y : 0.0, term : 1 + term), term : 1,
term
while term <= max_terms do (array_x : 0.0, term : 1 + term), term : 1,
term
while term <= max_terms do (array_tmp3_a1 : 0.0, term : 1 + term),
term
term : 1, while term <= max_terms do (array_norms : 0.0,
term
term : 1 + term), term : 1, while term <=
max_terms do (array_fact_1 : 0.0, term : 1 + term), term : 1,
term
while term <= max_terms do (array_y_init : 0.0, term : 1 + term),
term
term : 1, while term <= max_terms do (array_1st_rel_error : 0.0,
term
term : 1 + term), term : 1, while term <= max_terms do (array_m1 : 0.0,
term
term : 1 + term), term : 1, while term <=
max_terms do (array_type_pole : 0.0, term : 1 + term), term : 1,
term
while term <= max_terms do (array_pole : 0.0, term : 1 + term), term : 1,
term
while term <= max_terms do (array_last_rel_error : 0.0, term : 1 + term),
term
term : 1, while term <= max_terms do (array_tmp0 : 0.0, term : 1 + term),
term
term : 1, while term <= max_terms do (array_tmp1 : 0.0, term : 1 + term),
term
term : 1, while term <= max_terms do (array_tmp2 : 0.0, term : 1 + term),
term
term : 1, while term <= max_terms do (array_tmp3 : 0.0, term : 1 + term),
term
term : 1, while term <= max_terms do (array_tmp4 : 0.0, term : 1 + term),
term
ord : 1, while ord <= 2 do (term : 1,
while term <= max_terms do (array_y_set_initial : 0.0,
ord, term
term : 1 + term), ord : 1 + ord), ord : 1,
while ord <= max_terms do (term : 1, while term <=
max_terms do (array_fact_2 : 0.0, term : 1 + term), ord : 1 + ord),
ord, term
ord : 1, while ord <= 1 do (term : 1,
while term <= 3 do (array_poles : 0.0, term : 1 + term),
ord, term
ord : 1 + ord), ord : 1, while ord <= 2 do (term : 1,
while term <= max_terms do (array_y_higher : 0.0, term : 1 + term),
ord, term
ord : 1 + ord), ord : 1, while ord <= 1 do (term : 1,
while term <= 3 do (array_complex_pole : 0.0, term : 1 + term),
ord, term
ord : 1 + ord), ord : 1, while ord <= 1 do (term : 1,
while term <= 3 do (array_real_pole : 0.0, term : 1 + term),
ord, term
ord : 1 + ord), ord : 1, while ord <= 2 do (term : 1,
while term <= max_terms do (array_y_higher_work2 : 0.0,
ord, term
term : 1 + term), ord : 1 + ord), ord : 1,
while ord <= 2 do (term : 1, while term <=
max_terms do (array_y_higher_work : 0.0, term : 1 + term),
ord, term
ord : 1 + ord), array(array_tmp3_a1, 1 + 1 + max_terms), term : 1,
while term <= 1 + max_terms do (array_tmp3_a1 : 0.0, term : 1 + term),
term
array(array_x, 1 + 1 + max_terms), term : 1,
while term <= 1 + max_terms do (array_x : 0.0, term : 1 + term),
term
array(array_y, 1 + 1 + max_terms), term : 1,
while term <= 1 + max_terms do (array_y : 0.0, term : 1 + term),
term
array(array_tmp4, 1 + 1 + max_terms), term : 1,
while term <= 1 + max_terms do (array_tmp4 : 0.0, term : 1 + term),
term
array(array_tmp3, 1 + 1 + max_terms), term : 1,
while term <= 1 + max_terms do (array_tmp3 : 0.0, term : 1 + term),
term
array(array_tmp2, 1 + 1 + max_terms), term : 1,
while term <= 1 + max_terms do (array_tmp2 : 0.0, term : 1 + term),
term
array(array_tmp1, 1 + 1 + max_terms), term : 1,
while term <= 1 + max_terms do (array_tmp1 : 0.0, term : 1 + term),
term
array(array_tmp0, 1 + 1 + max_terms), term : 1,
while term <= 1 + max_terms do (array_tmp0 : 0.0, term : 1 + term),
term
array(array_const_0D2, 1 + 1 + max_terms), term : 1,
while term <= 1 + max_terms do (array_const_0D2 : 0.0, term : 1 + term),
term
array_const_0D2 : 0.2, array(array_const_0D1, 1 + 1 + max_terms), term : 1,
1
while term <= 1 + max_terms do (array_const_0D1 : 0.0, term : 1 + term),
term
array_const_0D1 : 0.1, array(array_const_0D0, 1 + 1 + max_terms), term : 1,
1
while term <= 1 + max_terms do (array_const_0D0 : 0.0, term : 1 + term),
term
array_const_0D0 : 0.0, array(array_const_1, 1 + 1 + max_terms), term : 1,
1
while term <= 1 + max_terms do (array_const_1 : 0.0, term : 1 + term),
term
array_const_1 : 1, array(array_m1, 1 + 1 + max_terms), term : 1,
1
while term <= max_terms do (array_m1 : 0.0, term : 1 + term),
term
array_m1 : - 1.0, iiif : 0, while iiif <= glob_max_terms do (jjjf : 0,
1
while jjjf <= glob_max_terms do (array_fact_1 : 0,
iiif
array_fact_2 : 0, jjjf : 1 + jjjf), iiif : 1 + iiif),
iiif, jjjf
x_start : - 0.8, x_end : 0.8, array_y_init : exact_soln_y(x_start),
1 + 0
glob_h : 1.0E-5, glob_look_poles : true, glob_max_iter : 100, glob_h : 0.005,
glob_display_interval : 0.1, glob_look_poles : true, glob_max_iter : 10000,
glob_max_minutes : 10, glob_last_good_h : glob_h, glob_max_terms : max_terms,
glob_max_sec : convfloat(3600.0) convfloat(glob_max_hours)
+ convfloat(60.0) convfloat(glob_max_minutes),
glob_abserr : expt(10.0, glob_log10_abserr),
glob_relerr : expt(10.0, glob_log10_relerr),
if glob_h > 0.0 then (glob_neg_h : false,
glob_display_interval : omniabs(glob_display_interval))
else (glob_neg_h : true, glob_display_interval :
- omniabs(glob_display_interval)), chk_data(), array_y_set_initial : true,
1, 1
array_y_set_initial : false, array_y_set_initial : false,
1, 2 1, 3
array_y_set_initial : false, array_y_set_initial : false,
1, 4 1, 5
array_y_set_initial : false, array_y_set_initial : false,
1, 6 1, 7
array_y_set_initial : false, array_y_set_initial : false,
1, 8 1, 9
array_y_set_initial : false, array_y_set_initial : false,
1, 10 1, 11
array_y_set_initial : false, array_y_set_initial : false,
1, 12 1, 13
array_y_set_initial : false, array_y_set_initial : false,
1, 14 1, 15
array_y_set_initial : false, array_y_set_initial : false,
1, 16 1, 17
array_y_set_initial : false, array_y_set_initial : false,
1, 18 1, 19
array_y_set_initial : false, array_y_set_initial : false,
1, 20 1, 21
array_y_set_initial : false, array_y_set_initial : false,
1, 22 1, 23
array_y_set_initial : false, array_y_set_initial : false,
1, 24 1, 25
array_y_set_initial : false, array_y_set_initial : false,
1, 26 1, 27
array_y_set_initial : false, array_y_set_initial : false,
1, 28 1, 29
array_y_set_initial : false, if glob_html_log
1, 30
then html_log_file : openw("html/entry.html"),
omniout_str(ALWAYS, "START of Soultion"), array_x : x_start,
1
array_x : glob_h, glob_next_display : x_start, order_diff : 1, term_no : 1,
2
while term_no <= order_diff do (array_y :
term_no
array_y_init expt(glob_h, term_no - 1)
term_no
---------------------------------------------, term_no : 1 + term_no),
factorial_1(term_no - 1)
rows : order_diff, r_order : 1, while r_order <= rows do (term_no : 1,
while term_no <= 1 - r_order + rows do (it : - 1 + r_order + term_no,
array_y_init expt(glob_h, term_no - 1)
it
array_y_higher : ----------------------------------------,
r_order, term_no factorial_1(term_no - 1)
term_no : 1 + term_no), r_order : 1 + r_order), current_iter : 1,
glob_clock_start_sec : elapsed_time_seconds(),
if omniabs(array_y_higher ) > glob_small_float
1, 1
then (tmp : omniabs(array_y_higher ), log10norm : log10(tmp),
1, 1
if log10norm < glob_log10normmin then glob_log10normmin : log10norm),
display_alot(current_iter), 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 not_reached_end(array_x , x_end) and (convfloat(glob_clock_sec) - convfloat(glob_orig_start_sec) <
1
convfloat(glob_max_sec)) do (if reached_interval
() then (omniout_str(INFO, " "), omniout_str(INFO, "TOP MAIN SOLVE Loop")),
glob_iter : 1 + glob_iter, glob_clock_sec : elapsed_time_seconds(),
glob_current_iter : 1 + glob_current_iter, atomall(),
if glob_look_poles then check_for_pole(),
if reached_interval() then glob_next_display :
glob_display_interval + glob_next_display, array_x : glob_h + array_x ,
1 1
array_x : glob_h, order_diff : 1, ord : 2, calc_term : 1,
2
iii : glob_max_terms, while iii >= calc_term do (array_y_higher_work :
2, iii
array_y_higher
2, iii
---------------------------
expt(glob_h, calc_term - 1)
-------------------------------------, iii : iii - 1), temp_sum : 0.0,
factorial_3(iii - calc_term, iii - 1)
ord : 2, calc_term : 1, iii : glob_max_terms,
while iii >= calc_term do (temp_sum : array_y_higher_work + temp_sum,
ord, iii
iii : iii - 1), array_y_higher_work2 :
ord, calc_term
temp_sum expt(glob_h, calc_term - 1)
------------------------------------, ord : 1, calc_term : 2,
factorial_1(calc_term - 1)
iii : glob_max_terms, while iii >= calc_term do (array_y_higher_work :
1, iii
array_y_higher
1, iii
---------------------------
expt(glob_h, calc_term - 1)
-------------------------------------, iii : iii - 1), temp_sum : 0.0,
factorial_3(iii - calc_term, iii - 1)
ord : 1, calc_term : 2, iii : glob_max_terms,
while iii >= calc_term do (temp_sum : array_y_higher_work + temp_sum,
ord, iii
iii : iii - 1), array_y_higher_work2 :
ord, calc_term
temp_sum expt(glob_h, calc_term - 1)
------------------------------------, ord : 1, calc_term : 1,
factorial_1(calc_term - 1)
iii : glob_max_terms, while iii >= calc_term do (array_y_higher_work :
1, iii
array_y_higher
1, iii
---------------------------
expt(glob_h, calc_term - 1)
-------------------------------------, iii : iii - 1), temp_sum : 0.0,
factorial_3(iii - calc_term, iii - 1)
ord : 1, calc_term : 1, iii : glob_max_terms,
while iii >= calc_term do (temp_sum : array_y_higher_work + temp_sum,
ord, iii
iii : iii - 1), array_y_higher_work2 :
ord, calc_term
temp_sum expt(glob_h, calc_term - 1)
------------------------------------, term_no : glob_max_terms,
factorial_1(calc_term - 1)
while term_no >= 1 do (array_y : array_y_higher_work2 ,
term_no 1, term_no
ord : 1, while ord <= order_diff do (array_y_higher :
ord, term_no
array_y_higher_work2 , ord : 1 + ord), term_no : term_no - 1),
ord, term_no
display_alot(current_iter)), omniout_str(ALWAYS, "Finished!"),
if glob_iter >= glob_max_iter then omniout_str(ALWAYS,
"Maximum Iterations Reached before Solution Completed!"),
if elapsed_time_seconds() - convfloat(glob_orig_start_sec) >=
convfloat(glob_max_sec) then omniout_str(ALWAYS,
"Maximum Time Reached before Solution Completed!"),
glob_clock_sec : elapsed_time_seconds(),
omniout_str(INFO, "diff ( y , x , 1 ) = arcsin (0.1 * x + 0.2) ;"),
omniout_int(INFO, "Iterations ", 32, glob_iter, 4, " "),
prog_report(x_start, x_end), if glob_html_log
then (logstart(html_log_file), logitem_str(html_log_file,
"2012-09-20T23:28:33-05:00"), logitem_str(html_log_file, "Maxima"),
logitem_str(html_log_file, "lin_arcsin"),
logitem_str(html_log_file, "diff ( y , x , 1 ) = arcsin (0.1 * x + 0.2) ;"),
logitem_float(html_log_file, x_start), logitem_float(html_log_file, x_end),
logitem_float(html_log_file, array_x ), logitem_float(html_log_file, glob_h),
1
logitem_str(html_log_file, "16"), logitem_good_digits(html_log_file,
array_last_rel_error ), logitem_integer(html_log_file, glob_max_terms),
1
logitem_float(html_log_file, array_1st_rel_error ),
1
logitem_float(html_log_file, array_last_rel_error ),
1
logitem_integer(html_log_file, glob_iter),
logitem_pole(html_log_file, array_type_pole ),
1
if (array_type_pole = 1) or (array_type_pole = 2)
1 1
then (logitem_float(html_log_file, array_pole ),
1
logitem_float(html_log_file, array_pole ), 0)
2
else (logitem_str(html_log_file, "NA"), logitem_str(html_log_file, "NA"), 0),
logitem_time(html_log_file, convfloat(glob_clock_sec)),
if glob_percent_done < 100.0 then (logitem_time(html_log_file,
convfloat(glob_optimal_expect_sec)), 0)
else (logitem_str(html_log_file, "Done"), 0),
log_revs(html_log_file, " 130 | "), logitem_str(html_log_file, "lin_arcsin diffeq.max"),
logitem_str(html_log_file,
"lin_arcsin maxima results"),
logitem_str(html_log_file, "c c++ Maple and Maxima"), logend(html_log_file)),
if glob_html_log then close(html_log_file))
(%i51) main()
"##############ECHO OF PROBLEM#################"
"##############temp/lin_arcsinpostode.ode#################"
"diff ( y , x , 1 ) = arcsin (0.1 * x + 0.2) ;"
"!"
"/* BEGIN FIRST INPUT BLOCK */"
"max_terms : 30,"
"Digits : 32,"
"!"
"/* END FIRST INPUT BLOCK */"
"/* BEGIN SECOND INPUT BLOCK */"
"x_start : -0.8,"
"x_end : 0.8 ,"
"array_y_init[0 + 1] : exact_soln_y(x_start),"
"glob_h : 0.00001 ,"
"glob_look_poles : true,"
"glob_max_iter : 100,"
"/* END SECOND INPUT BLOCK */"
"/* BEGIN OVERRIDE BLOCK */"
"glob_h : 0.005 ,"
"glob_display_interval : 0.1,"
"glob_look_poles : true,"
"glob_max_iter : 10000,"
"glob_max_minutes : 10,"
"/* END OVERRIDE BLOCK */"
"!"
"/* BEGIN USER DEF BLOCK */"
"exact_soln_y (x) := ("
" (10.0 * (0.1 * x + 0.2) * arcsin(0.1 * x + 0.2 ) + 10.0 * sqrt(1.0 -"
"expt((0.1 * x + 0.2) , 2 ))) "
");"
""
"/* END USER DEF BLOCK */"
"#######END OF ECHO OF PROBLEM#################"
"START of Soultion"
x[1] = -0.8 " "
y[1] (analytic) = 10.072086775666431 " "
y[1] (numeric) = 10.072086775666431 " "
absolute error = 0.0 " "
relative error = 0.0 "%"
Correct digits = 16
h = 5.000E-3 " "
" "
"TOP MAIN SOLVE Loop"
"Real estimate of pole used"
Radius of convergence = 12.255215200502816 " "
Order of pole = 10.623650523505965 " "
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
x[1] = -0.7 " "
y[1] (analytic) = 10.084619612112185 " "
y[1] (numeric) = 10.084619612112183 " "
absolute error = 1.7763568394002505000000000000000E-15 " "
relative error = 1.76145150508874720000000000000E-14 "%"
Correct digits = 16
h = 5.000E-3 " "
" "
"TOP MAIN SOLVE Loop"
"Real estimate of pole used"
Radius of convergence = 10.488750597380736 " "
Order of pole = 5.766043057418958 " "
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
x[1] = -0.5999999999999999 " "
y[1] (analytic) = 10.098161016183049 " "
y[1] (numeric) = 10.098161016183049 " "
absolute error = 0.0 " "
relative error = 0.0 "%"
Correct digits = 16
h = 5.000E-3 " "
" "
"TOP MAIN SOLVE Loop"
"Real estimate of pole used"
Radius of convergence = 9.582994709360252 " "
Order of pole = 3.3944454757555533 " "
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
x[1] = -0.4999999999999998 " "
y[1] (analytic) = 10.112712375807623 " "
y[1] (numeric) = 10.112712375807623 " "
absolute error = 0.0 " "
relative error = 0.0 "%"
Correct digits = 16
h = 5.000E-3 " "
" "
"TOP MAIN SOLVE Loop"
"Real estimate of pole used"
Radius of convergence = 9.053607765010025 " "
Order of pole = 2.1169813372728647 " "
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
x[1] = -0.3999999999999997 " "
y[1] (analytic) = 10.128275188125508 " "
y[1] (numeric) = 10.128275188125508 " "
absolute error = 0.0 " "
relative error = 0.0 "%"
Correct digits = 16
h = 5.000E-3 " "
" "
"TOP MAIN SOLVE Loop"
"Real estimate of pole used"
Radius of convergence = 8.712945884359558 " "
Order of pole = 1.3926523258995793 " "
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
x[1] = -0.2999999999999996 " "
y[1] (analytic) = 10.144851060913583 " "
y[1] (numeric) = 10.14485106091358 " "
absolute error = 3.552713678800501000000000000000E-15 " "
relative error = 3.50198702520977730000000000000E-14 "%"
Correct digits = 16
h = 5.000E-3 " "
" "
"TOP MAIN SOLVE Loop"
"Real estimate of pole used"
Radius of convergence = 8.474305263290459 " "
Order of pole = 0.9701726615291051 " "
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
x[1] = -0.1999999999999995 " "
y[1] (analytic) = 10.162441714130136 " "
y[1] (numeric) = 10.162441714130132 " "
absolute error = 3.552713678800501000000000000000E-15 " "
relative error = 3.495925269476046000000000000000E-14 "%"
Correct digits = 16
h = 5.000E-3 " "
" "
"TOP MAIN SOLVE Loop"
"Real estimate of pole used"
Radius of convergence = 8.293237785411849 " "
Order of pole = 0.7198065219319787 " "
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
x[1] = -9.99999999999994200E-2 " "
y[1] (analytic) = 10.181048981581155 " "
y[1] (numeric) = 10.181048981581153 " "
absolute error = 1.7763568394002505000000000000000E-15 " "
relative error = 1.7447679925849602000000000000E-14 "%"
Correct digits = 16
h = 5.000E-3 " "
" "
"TOP MAIN SOLVE Loop"
"Real estimate of pole used"
Radius of convergence = 8.145478805520412 " "
Order of pole = 0.5701169205180037 " "
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
x[1] = 5.9847959921199840000000000000000E-16 " "
y[1] (analytic) = 10.200674812713373 " "
y[1] (numeric) = 10.20067481271337 " "
absolute error = 3.552713678800501000000000000000E-15 " "
relative error = 3.4828222093431100000000000000E-14 "%"
Correct digits = 16
h = 5.000E-3 " "
" "
"TOP MAIN SOLVE Loop"
"Real estimate of pole used"
Radius of convergence = 8.017267579690262 " "
Order of pole = 0.4801930144607738 " "
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
x[1] = 0.10000000000000062 " "
y[1] (analytic) = 10.22132127453915 " "
y[1] (numeric) = 10.221321274539141 " "
absolute error = 8.881784197001252000000000000000E-15 " "
relative error = 8.68946778840165800000000000000E-14 "%"
Correct digits = 16
h = 5.000E-3 " "
" "
"TOP MAIN SOLVE Loop"
"Real estimate of pole used"
Radius of convergence = 7.900619984102356 " "
Order of pole = 0.42604437101103443 " "
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
x[1] = 0.2000000000000007 " "
y[1] (analytic) = 10.242990553698707 " "
y[1] (numeric) = 10.242990553698702 " "
absolute error = 5.329070518200751000000000000000E-15 " "
relative error = 5.20265101316181900000000000000E-14 "%"
Correct digits = 16
h = 5.000E-3 " "
" "
"TOP MAIN SOLVE Loop"
"Real estimate of pole used"
Radius of convergence = 7.790841118790463 " "
Order of pole = 0.39340453242241225 " "
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
x[1] = 0.30000000000000077 " "
y[1] (analytic) = 10.265684958665728 " "
y[1] (numeric) = 10.26568495866572 " "
absolute error = 8.881784197001252000000000000000E-15 " "
relative error = 8.65191580762834200000000000000E-14 "%"
Correct digits = 16
h = 5.000E-3 " "
" "
"TOP MAIN SOLVE Loop"
"Real estimate of pole used"
Radius of convergence = 7.685149365166723 " "
Order of pole = 0.37372162876729575 " "
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
x[1] = 0.40000000000000085 " "
y[1] (analytic) = 10.28940692210279 " "
y[1] (numeric) = 10.289406922102781 " "
absolute error = 8.881784197001252000000000000000E-15 " "
relative error = 8.63196903790654100000000000000E-14 "%"
Correct digits = 16
h = 5.000E-3 " "
" "
"TOP MAIN SOLVE Loop"
"Real estimate of pole used"
Radius of convergence = 7.581890233717073 " "
Order of pole = 0.36184751824461614 " "
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
x[1] = 0.5000000000000009 " "
y[1] (analytic) = 10.314159003373739 " "
y[1] (numeric) = 10.314159003373728 " "
absolute error = 1.065814103640150300000000000000E-14 " "
relative error = 1.03335046831401850000000000000E-13 "%"
Correct digits = 15
h = 5.000E-3 " "
" "
"TOP MAIN SOLVE Loop"
"Real estimate of pole used"
Radius of convergence = 7.480078031028707 " "
Order of pole = 0.35467712479997004 " "
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
x[1] = 0.600000000000001 " "
y[1] (analytic) = 10.339943891220667 " "
y[1] (numeric) = 10.339943891220658 " "
absolute error = 8.881784197001252000000000000000E-15 " "
relative error = 8.58977987737680600000000000000E-14 "%"
Correct digits = 16
h = 5.000E-3 " "
" "
"TOP MAIN SOLVE Loop"
"Real estimate of pole used"
Radius of convergence = 7.379125389009116 " "
Order of pole = 0.35033679812638496 " "
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
x[1] = 0.7000000000000011 " "
y[1] (analytic) = 10.3667644066138 " "
y[1] (numeric) = 10.36676440661379 " "
absolute error = 1.065814103640150300000000000000E-14 " "
relative error = 1.0281068053983951000000000000E-13 "%"
Correct digits = 15
h = 5.000E-3 " "
" "
"TOP MAIN SOLVE Loop"
"Real estimate of pole used"
Radius of convergence = 7.278682547766079 " "
Order of pole = 0.3476965077618175 " "
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
"Real estimate of pole used"
x[1] = 0.8000000000000012 " "
y[1] (analytic) = 10.394623505783319 " "
y[1] (numeric) = 10.394623505783308 " "
absolute error = 1.065814103640150300000000000000E-14 " "
relative error = 1.02535132999012120000000000000E-13 "%"
Correct digits = 15
h = 5.000E-3 " "
"Finished!"
"diff ( y , x , 1 ) = arcsin (0.1 * x + 0.2) ;"
Iterations = 320
"Total Elapsed Time "= 4 Minutes 47 Seconds
"Elapsed Time(since restart) "= 4 Minutes 46 Seconds
"Time to Timeout "= 5 Minutes 12 Seconds
Percent Done = 100.31250000000009 "%"
(%o51) true
(%o51) diffeq.max