3
3
import java .util .ArrayList ;
4
4
import java .util .List ;
5
5
import javacalculus .core .CALC ;
6
- import javacalculus .core .CalcParser ;
7
6
import javacalculus .core .DeepCopy ;
8
7
import javacalculus .evaluator .extend .CalcFunctionEvaluator ;
9
- import javacalculus .exception .CalcSyntaxException ;
10
8
import javacalculus .exception .CalcWrongParametersException ;
11
9
import javacalculus .struct .*;
12
10
@@ -37,7 +35,7 @@ public CalcObject evaluate(CalcFunction function) {
37
35
}
38
36
39
37
public CalcObject integrate (CalcObject object , CalcSymbol var ) {
40
- //// System.out.println("ATTEMPTING TO INTEGRATE " + object.toString());
38
+ //System.out.println("ATTEMPTING TO INTEGRATE " + object.toString());
41
39
CalcObject obj = object ;
42
40
if (obj instanceof CalcFunction ) { //input f(x..xn)
43
41
////////System.out.println("FINNA EVAL THAT OBJ");
@@ -66,7 +64,7 @@ public CalcObject integrate(CalcObject object, CalcSymbol var) {
66
64
CalcFunction functionB = new CalcFunction (CALC .ADD , function , 1 , function .size ());
67
65
return CALC .ADD .createFunction (integrate (function .get (0 ), var ), integrate (functionB , var ));
68
66
}
69
- if (obj .getHeader ().equals (CALC .MULTIPLY )) { //INT(c*f(x),x) = c*INT(f(x),x)
67
+ if (obj .getHeader ().equals (CALC .MULTIPLY ) || obj . getHeader (). equals ( CALC . POWER ) && (( CalcFunction ) obj ). get ( 0 ). getHeader (). equals ( CALC . LN ) ) { //INT(c*f(x),x) = c*INT(f(x),x)
70
68
////////System.out.println("INTEGRATING MULTIPLY");
71
69
CalcFunction function = new CalcFunction (CALC .MULTIPLY );
72
70
function .addAll ((CalcFunction ) obj );
@@ -80,22 +78,22 @@ public CalcObject integrate(CalcObject object, CalcSymbol var) {
80
78
//SEC(x)*TAN(x) => SEC(x)
81
79
//CSC(x)*COT(x) => -CSC(x)
82
80
//CalcObject tempx = (CalcObject) DeepCopy.copy(obj);
83
-
81
+
84
82
//WHAT THE FUCK IS THIS
85
-
86
- CalcObject wtf ;
87
- CalcParser p = new CalcParser ();
88
- try {
89
- wtf = p .parse (obj .toString ());
90
- } catch (CalcSyntaxException ex ) {
91
- return CALC .ERROR ;
92
- }
93
- CalcObject expanded = CALC .SYM_EVAL (CALC .EXPAND .createFunction (wtf ));
83
+ /*CalcObject wtf;
84
+ CalcParser p = new CalcParser();
85
+ try {
86
+ wtf = p.parse(obj.toString());
87
+ } catch (CalcSyntaxException ex) {
88
+ return CALC.ERROR;
89
+ }*/
90
+ //CalcObject expanded = CALC.SYM_EVAL(CALC.EXPAND.createFunction(wtf));
91
+ //System.out.println("LETS EXPAND " + obj);
92
+ CalcObject expanded = CALC .SYM_EVAL (CALC .EXPAND .createFunction (obj ));
94
93
//System.out.println(wtf);
95
94
//System.out.println("IN MULTIPLICATION, " + obj + " AND EXPANDED " + expanded);
96
-
95
+
97
96
//LIKE WHAT THE ACTUAL FUCK
98
-
99
97
if (obj .equals (expanded )) {
100
98
//System.out.println("NOT EXPANSION BRANCH");
101
99
if (CALC .full_integrate_mode && recDepth < CALC .max_recursion_depth ) {
@@ -127,6 +125,17 @@ public CalcObject integrate(CalcObject object, CalcSymbol var) {
127
125
}
128
126
}
129
127
}
128
+ //try parts here instead NO
129
+ /*{
130
+ System.out.println("WE ARE HERE");
131
+ if (CALC.full_integrate_mode && recDepth < CALC.max_recursion_depth) {
132
+ CalcObject temp = CALC.SYM_EVAL(new CalcINTBYPARTS(recDepth + 1).integrate(object, var));
133
+ System.out.println("GOING HARD MODE");
134
+ if (temp != null && !temp.equals(CALC.ERROR)) {
135
+ return temp;
136
+ }
137
+ }
138
+ }*/
130
139
if (obj .getHeader ().equals (CALC .POWER )) { //this part is probably trickiest (form f(x)^g(x)). A lot of integrals here does not evaluate into elementary functions
131
140
////////System.out.println("INTEGRATING POWER");
132
141
CalcFunction function = (CalcFunction ) obj ;
@@ -353,10 +362,10 @@ private CalcObject excecuteSub(CalcObject input, CalcSymbol var) //First bucket
353
362
return CALC .ERROR ;
354
363
}
355
364
ArrayList <CalcObject > toIntegrate = new ArrayList <>();
356
- CalcINT subIntegrator = new CalcINT (recDepth );
357
365
CalcObject [] sub = doUSub (input , var );
358
366
if (sub != null ) {
359
- //System.out.println("Sub did not fail for " + sub[1]);
367
+ //System.out.println("uSub Func: " + sub[0] + " Sub: " + sub[1]);
368
+ CalcINT subIntegrator = new CalcINT (recDepth + 1 );
360
369
CalcObject intResult = CALC .SYM_EVAL (subIntegrator .integrate (sub [0 ], var ));
361
370
intResult = substitute (intResult , var , sub [1 ]);
362
371
//System.out.println("INT RESULT: " + intResult);
@@ -370,16 +379,17 @@ private CalcObject excecuteSub(CalcObject input, CalcSymbol var) //First bucket
370
379
CalcINT trigIntegrator = new CalcINT (recDepth + 1 );
371
380
CalcObject answer = CALC .SYM_EVAL (trigIntegrator .integrate ((CalcObject ) DeepCopy .copy (trigSubbed ), var ));
372
381
if (!answer .equals (CALC .ERROR )) {
373
- //System.out.println("NO ERROR IN TRIG SUB : " + answer);
382
+ //System.out.println("Trig Func: " + trigSubbed + " Int : " + answer);
374
383
return answer ;
375
384
}
376
385
}
377
386
//System.out.println("TRig sub failed, attempting u-trig mix");
378
387
for (CalcObject test : toIntegrate ) {
379
388
sub = doUSub (test , var );
380
389
if (sub != null ) {
381
- //System.out.println("TRIG -uSub did not fail");
382
- CalcObject intResult = CALC .SYM_EVAL (subIntegrator .integrate (sub [0 ], var ));
390
+ //System.out.println("Trig-uSub Func: " + sub[0] + " Sub: " + sub[1]);
391
+ CalcINT trigIntegrator = new CalcINT (recDepth + 1 );
392
+ CalcObject intResult = CALC .SYM_EVAL (trigIntegrator .integrate (sub [0 ], var ));
383
393
intResult = substitute (intResult , var , sub [1 ]);
384
394
//System.out.println("INT RESULT: " + intResult);
385
395
return intResult ;
0 commit comments