123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- %**********************************************************************
- module crackinit$
- %**********************************************************************
- % Initialisation
- % Author: Andreas Brand 1993, continued by Thomas Wolf
- %
- % $Id: crinit.red,v 1.22 1998/06/25 18:18:27 tw Exp tw $
- %
- symbolic fluid '(REDUCEFUNCTIONS_
- cont_ odesolve_ print_ print_more print_all
- facint_ potint_ freeint_ level_ poly_only safeint_ solvealg_
- logoprint_ independence_ tr_gensep tr_decouple homogen_
- tr_genint tr_main contradiction_ stop_ fname_ nfct_ fnew_
- ftem_ genint_ gensep_ new_gensep ineq_ time_ adjust_fnc
- subst_0 subst_1 subst_2 subst_3 subst_4 cost_limit5
- pdelimit_0 pdelimit_1 pdelimit_2 pdelimit_3 pdelimit_4
- length_inc tr_redlength proc_list_ full_proc_list_ to_do_list
- !*batch_mode printmenu_ expert_mode repeat_mode
- dec_hist dec_hist_list depl_copy_
- nequ_ eqname_ allflags_ prop_list maxalgsys_ stepcounter_
- batchcount_ crackrules_ userrules_ rulelist_ history_
- explog_ trig1_ trig2_ trig3_ trig4_ trig5_ trig6_ trig7_ trig8_
- max_red_len max_factor orderings_ tr_orderings simple_orderings
- lex_ collect_sol)$
- switch batch_mode$
- symbolic operator setcrackflags$
- symbolic procedure setcrackflags$
- <<REDUCEFUNCTIONS_:= '(ABS ACOS ACOSD ACOSH ACOT ACOTD ACOTH ACSC ACSCD
- ACSCH ASEC ASECD ASECH ASIN ASIND ASINH ATAN
- ATAND ATANH ATAN2 ATAN2D CBRT COS COSD COSH COT
- COTD COTH CSC CSCD CSCH EXP FACTORIAL HYPOT LN
- LOG LOGB LOG10 SEC SECD SECH SIN SIND SINH SQRT
- TAN TAND TANH PLUS DIFFERENCE DF MINUS TIMES
- QUOTIENT EXPT INT)$
- crackrules_:=nil$
- userrules_:=nil$
- to_do_list:=nil$
- allflags_:='(to_eval to_int to_sep to_gensep to_decoup to_diff)$
- prop_list:='(val fcts vars nvars level derivs fcteval_lin fcteval_nca
- fcteval_nli printlength length rational nonrational
- allvarfcts starde dec_with dec_with_rl dec_info rl_with
- terms orderings)$
- full_proc_list_:='(
- to_do
- subst_level_0
- subst_level_05
- subst_level_45
- separation
- quick_integration
- factorization
- subst_derivative
- length_reduction_1
- subst_level_1
- subst_level_3
- full_integration
- integration
- gen_separation
- subst_level_5
- subst_level_2
- subst_level_33
- subst_level_35
- subst_level_4
- add_differentiated_pdes
- length_reduction_2
- decoupling
- add_diff_star_pdes
- multintfac
- alg_solve_deriv
- alg_solve_system
- undo_subst_derivative
- stop_batch
- )$
- proc_list_:=setdiff(full_proc_list_,
- '(add_differentiated_pdes
- multintfac
- subst_level_45
- subst_level_5
- alg_solve_system
- stop_batch
- length_reduction_1))$
- %stepcounter_:=0$ % counter for solving steps
- !*batch_mode:=t$ % running crack in batchmode
- printmenu_:=nil$ % print interactive mode menu
- expert_mode:=nil$ % "half automatic" when running crack in non batch mode
- repeat_mode:=nil$ % "repeat mode" when running crack in non batch mode
- if not fixp nfct_ then
- nfct_:=1$ % index of new functions and constants initialized
- level_:=nil$ % actual level of crack recursion
- cont_:=nil$ % interactive user control for integration or
- % substitution oflarge expressions is disabled
- independence_:=nil$% interactive control of linear independence disabled
- genint_:=15$ % if =nil then generalized integration disabled
- % else the maximal number of new functions and extra
- % equations due to generalized integration
- facint_:=1000$ % =nil then no search for integrating factors
- % otherwise max product terms*kernels for investigation
- potint_:=t$ % allowing `potential integration'
- safeint_:=t$ % uses only solutions of ODEs with non-vanishing denom.
- freeint_:=t$ % Do only integrations if expl. part is integrable
- odesolve_:=10$ % maximal length of a de (number of terms) to be
- % integrated as ode
- max_factor:=400$ % maximal number of terms to be factorized
- gensep_:=1000$ % max. size of expressions to separate in a
- % generalized way
- new_gensep:=nil$ % whether or not a new form of gensep should be used
- subst_0:=2$ % maximal length of an expression to be substituted
- subst_1:=8$ %
- subst_2:=100$ %
- subst_3:=20$ %
- subst_4:=10^3$ %
- cost_limit5:=100$ % maximal number of extra terms generated by a subst.
- max_red_len:=50000$% maximal product of lengths of two equ.s to be
- % combined with length-reducing decoupling
- pdelimit_0:=nil$ % maximal product length(pde)*length(subst_expr)
- pdelimit_1:=10^3$ % nil=no length limit
- pdelimit_2:=10^4$ %
- pdelimit_3:=10^3$ %
- pdelimit_4:=10^5$ %
- %same_length:=2$ %
- %same_fcts:=10$ %
- %same_derivs:=10$ %
- length_inc:=1.0$ % factor by which the length of an expression may
- % grow during decoupling
- tr_main:=t$ % Trace main procedure
- tr_gensep:=nil$ % Trace generalized separation
- tr_genint:=nil$ % Trace generalized integration
- tr_decouple:=nil$ % Trace decoupling process
- tr_redlength:=nil$ % Trace length reduction
- tr_orderings:=nil$ % Trace orderings stuff
- homogen_:=nil$ % Test for homogeneity of each equation (for debugging)
- solvealg_:=nil$ % Use SOLVE for algebraic equations
- print_more:=t$ % Print more informations about the pdes
- print_all:=nil$ % Print all informations about the pdes
- fname_:='c_$ % name of new functions and constants (integration)
- nequ_:=1$ % index of new equations initialized
- eqname_:='e$ % name of new equations
- logoprint_:=t$ % print logo for crack call
- poly_only:=nil$ % all equations are polynomials only
- time_:=nil$ % print the time needed for running crack
- print_:=12$ % maximal length of an expression to be printed
- dec_hist:=0$ % length of pde history list during decoupling
- maxalgsys_:=20$ % max. number of equations to be solved in specialsol
- adjust_fnc:=nil$ % if t then free constants/functions are scaled and
- % redundant ones are droped to simplify the result
- orderings_:=nil$ % Stores the orderings list, nil initially
- simple_orderings:=t$ % Turn off orderings support except for trivial case
- lex_:=nil$ % if t then use lexicographic instead of tot. degree
- collect_sol:=t$ % whether solutions found shall be collected and
- % returned together at the end or not (to save memory)
- put('to_do,'description,
- list("To do list"))$
- put('subst_level_0,'description,
- list("Substitution:",
- if subst_0 then " subst. expr.<=",subst_0,
- if pdelimit_0 then ", pde<=",pdelimit_0,
- ", fcts. of less vars."))$
- put('subst_level_05,'description,
- list("Substitution:",
- if subst_0 then " subst. expr.<=",subst_0,
- if pdelimit_0 then ", pde<=",pdelimit_0,
- ", alg. expressions."))$
- put('subst_level_1,'description,
- list("Substitution:",
- if subst_1 then " subst. expr.<=",subst_1,
- if pdelimit_1 then ", pde<=",pdelimit_1,
- ", fcts. of less vars."))$
- put('subst_level_2,'description,
- list("Substitution:",
- if subst_2 then " subst. expr.<=",subst_2,
- if pdelimit_2 then ", pde<=",pdelimit_2,
- ", fcts. of less vars."))$
- put('subst_level_3,'description,
- list("Substitution:",
- if subst_3 then " subst. expr.<=",subst_3,
- if pdelimit_3 then ", pde<=",pdelimit_3))$
- put('subst_level_33,'description,
- list("Substitution:",
- if subst_4 then " subst. expr.<=",subst_4,
- if pdelimit_4 then ", pde<=",pdelimit_4,
- " no cases, f-indep. coeff."))$
- put('subst_level_35,'description,
- list("Substitution:",
- if subst_4 then " subst. expr.<=",subst_4,
- if pdelimit_4 then ", pde<=",pdelimit_4," no cases"))$
- put('subst_level_4,'description,
- list("Substitution:",
- if subst_4 then " subst. expr.<=",subst_4,
- if pdelimit_4 then ", pde<=",pdelimit_4))$
- put('subst_level_45,'description,
- list("Substitution of zero minimal growth, no cases"))$
- put('subst_level_5,'description,
- list("Unlimited substitution of minimal growth"))$
- put('subst_derivative,'description,
- list("Substitution of derivatives by new functions"))$
- put('undo_subst_derivative,'description,
- list("Undo Substitutions of derivatives by new functions"))$
- put('factorization,'description,
- list("Factorization",
- " and investigation of resulting subcases"))$
- put('separation,'description,
- list("Direct separation"))$
- put('quick_integration,'description,
- list("Integration of a first order de with at",
- " most two terms."))$
- put('full_integration,'description,
- list("Integration of a pde such that",
- " a function can be subst."))$
- put('integration,'description,
- list("Integration"))$
- put('multintfac,'description,
- list("Find an integrating factor for a set of pde's"))$
- put('length_reduction_2,'description,
- list("Length reducing decoupling steps"))$
- put('decoupling,'description,
- list("Do one decoupling step"))$
- put('gen_separation,'description,
- list("Indirect separation"))$
- put('add_differentiated_pdes,'description,
- list("Differentiate pdes with nonlinear leading derivs"))$
- put('add_diff_star_pde,'description,
- list("Differentiate star - pdes"))$
- put('length_reduction_1,'description,
- list("Length reducing algebraic combinations of equations"))$
- put('alg_solve_deriv,'description,
- list("Solving an algebraic equation."))$
- put('alg_solve_system,'description,
- list("Solving equations for fnct.s or deriv.s algebraically"))$
- put('stop_batch,'description,
- list("Stop batch mode"))$
- ini_let_rules()
- >>$
- algebraic procedure ini_let_rules$
- begin
- explog_:= {
- cot(~x) => 1/tan(x),
- e**(~x+~y) => e**x*e**y,
- sqrt(e)**(~x+~y) => sqrt(e)**x*sqrt(e)**y,
- e**((~x+~y)/~z) => e**(x/z)*e**(y/z),
- sqrt(e)**((~x+~y)/~z) => sqrt(e)**(x/z)*sqrt(e)**(y/z),
- sqrt(e)**(log(~y)/~x) => y**(1/x/2),
- sqrt(e)**(-log(~y)/~x) => y**(-1/x/2),
- sqrt(e)**(~x*log(~y)/~z) => y**(x/z/2),
- sqrt(e)**(-~x*log(~y)/~z) => y**(-x/z/2),
- sqrt(e)**((~x*log(~y))/~z) => y**(x/z/2),
- e**(log(~y)/~x) => y**(1/x),
- e**(~x*log(~y)/~z) => y**(x/z),
- e**((~x*log(~y))/~z) => y**(x/z),
- int(df(~y,~x)/~y,~x) => log(y) } $
- trig1_:={sin(~x)**2 => 1-cos(x)**2}$
- trig2_:={cosh(~x)**2 => (sinh(x)**2 + 1)}$
- trig3_:={tan(~x/2) => (1-cos(x))/sin(x)}$
- trig4_:={cot(~x/2) => (1+cos(x))/sin(x)}$
- trig5_:={cos(2*~x) => 1-2*sin(x)**2}$
- trig6_:={sin(2*~x) => 2*cos(x)*sin(x)}$
- trig7_:={sinh(2*~x) => 2*sinh(x)*cosh(x)}$
- trig8_:={cosh(2*~x) => 2*cosh(x)**2-1}$
- end$
- endmodule$
- end$
|