Subversion Repositories wimsdev

Rev

Rev 7210 | Rev 16135 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
20 reyssat 1
!set methtit=Direct change of variable
2
!set methenv=ZZ QQ RR
3
!set methparmtype=parm function integrate, function
4
!set methhelp=This method applies the change of variable on an indefinite\
5
integral.
6
 
7
!if $wims_read_parm iswordof form check
8
 !goto $wims_read_parm
9
!endif
10
 
11
!exit
12
:form
16120 bpr 13
!set N=!linecnt $mtobj1
14
!if $N>1 and $methsubstep=1
20 reyssat 15
  :first
16
  !set methsubstep=2
17
  Apply a change of variable for: <p>
18
  !read deduc/methparm.phtml 1
16120 bpr 19
!else
20 reyssat 20
  !bound methparm1 between integer 0 and $N default 1
21
  !if $methparm1=0 or $error!=$empty
22
   !goto first
23
  !endif
7210 bpr 24
  <input type="hidden" name="methparm1" value="$methparm1" />
20 reyssat 25
  !set methsubstep=1
26
  !set l=!line $methparm1 of $mtobj1
27
  !set l=!item 2 to -1 of $l
28
  !set k=!mathsubst integrate= in $l
29
  !set k=!declosing $k
30
  !set v=!item 2 of $k
31
  !set nvar=!item 1 of $newvariables
32
  Change of variable:
5763 bpr 33
   <div class="wimscenter">
20 reyssat 34
 	\($l = integrate(f($v),$v) = integrate(f(h($nvar))h'($nvar),$nvar)) ,
5763 bpr 35
  </div>
20 reyssat 36
  with
37
  \($v = h($nvar) = )
38
  !read deduc/methparm.phtml 2,36
39
.
16120 bpr 40
!endif
20 reyssat 41
!exit
42
:check
16120 bpr 43
ker=!item 2 of $methparmobj1
44
ker=!mathsubst integrate= in $ker
45
ker=!trim $ker
46
ker=!declosing $ker
47
!distribute items $ker into iker,ivar
48
vartest=!varlist $ivar
49
!if $ivar != $vartest
20 reyssat 50
  error=Fail
51
  !exit
16120 bpr 52
!endif
20 reyssat 53
 
16120 bpr 54
newvar=!item 1 of $newvariables
55
vv=!varlist nofn $methparm2
56
vtest=!listcomplement $newvar,e,pi,euler in $vv
57
!if $vtest!=$empty
20 reyssat 58
  error=\($methparm2) must be a function of \($newvar) only.
59
  !exit
16120 bpr 60
!endif
61
diff=!exec maxima diff($methparm2,$newvar);
62
!if $diff=$empty
20 reyssat 63
  :bad_data
64
  error=bad_data
65
  !exit
16120 bpr 66
!endif
67
inv=!exec maxima solve($ivar=$methparm2,$newvar);
68
inv=!declosing $inv
69
n=!itemcnt $inv
70
inv2=!nospace $inv
71
eq==
72
!if $n!=1 or +++**$newvar$eq notin +++**$inv2
20 reyssat 73
  error=Impossible to find the inverse function of $methparm2, which is\
74
 	necessary for future substitution:\
75
	use the reverse change of variable.
76
  !exit
16120 bpr 77
!endif
20 reyssat 78
 substed=!mathsubst $ivar=($methparm2) in $iker
79
 !read deduc/sub/checkzero diff(($substed)*($diff),$newvar)
80
 difftest=$out
81
 !read deduc/sub/simplify ($substed)*($diff)\
82
	($substed)*($diff)*$newvar
16120 bpr 83
!distribute lines $out into newker,ktest
84
!if $newker=$empty or $ktest=$empty or $difftest=$empty
20 reyssat 85
  !goto bad_data
16120 bpr 86
!endif
87
 
88
!if strictintegrate iswordof $m_options and $difftest=yes
20 reyssat 89
  error=This change of variable is not allowed for this environment.\
90
	Please change the method.
91
  !exit
16120 bpr 92
!endif
20 reyssat 93
 
16120 bpr 94
!if $difftest=yes
20 reyssat 95
  newobject1=$ktest
16120 bpr 96
!else
20 reyssat 97
  newobject1=integrate($newker,$newvar)
16120 bpr 98
!endif
99
newobject0=$inv
100
oldobject=0,1
101
methexp=\($ivar=$methparm2)
102
variables=$variables,$newvar
20 reyssat 103
!exit