symbolic integration depends on different equivalent forms of function
Show older comments
I performed the following equaivalent symbolic integrations:
syms x y
A = int(x+y,x);
A_ = expand(A); % just expanded (equaivalent) form of A
B = expand(int(A,y))
B_ = expand(int(A_,y))
with the following results:
A =
(x*(x + 2*y))/2
A_ =
x^2/2 + y*x
B =
x^3/8 + (x^2*y)/2 + (x*y^2)/2
B_ =
(x^2*y)/2 + (x*y^2)/2
I expect B equal to B_, but there is a misterious additional term x^3/8 at B ??!!
Is that a bug???
Answers (2)
The difference is a usual "constant of integration".
If you differentiate both B and B_ with respect to y and then with respect to x, you'll arrive at the expression x+y in both cases:
syms x y
B_ = (x^2*y)/2 + (x*y^2)/2;
B = x^3/8 + (x^2*y)/2 + (x*y^2)/2;
A_ = diff(B_,y);
A = diff(B,y);
expr1 = diff(A_,x)
expr2 = diff(A,x)
7 Comments
Torsten
on 15 Jul 2022
Because deep in the MATLAB rules for symbolic integration, the sum of two polynomial expressions (x^2/2 + y*x) is integrated differently from a single product polynomial ( (x*(x + 2*y))/2 ).
In short: Only the developers know the answer.
Michal
on 15 Jul 2022
The fact that backward double differentiation produces the same result is irrelevant.
No. You try to determine a function for which
d/dx (d/dy(f(x,y)) = x+y.
There are infinitely many functions for which this is true.
E.g. if you want to determine a function with d/dx (d/dy (f(x,y)) = 0, every function of the form
f(x,y) = f1(x) + f2(y)
is "correct" .
If you want to make the result of integration unique, you must fix f(x,y) on a 1d-curve in the x-y-plane (which is not parallel to one of the coordinate axes, I guess).
I'm not surprised that
int((x*(x + 2*y))/2,y)
gives a result different from
int(x^2/2 + y*x,y).
See
syms x
int((x-1)^2,x)
compared to
int(x^2-2*x+1,x)
I'm not surprised either. I've seen cases where int() couldn't find a solution unless the integrand was manipulated using simplify, expand, etc. Here is an example from this Question
syms t
assume(t, "real")
f1 = 3*t-t*t*t;
f2 = 3*t*t;
f = [f1, f2];
df = diff(f, t);
a = 0;
b = 1;
normDf = sqrt(df(1)*df(1)+df(2)*df(2));
int(normDf,t,a,b) % no solution
normDf = simplify(normDf)
int(normDf, t, a, b) % easy
4 Comments
Torsten
on 16 Jul 2022
This assumes that you want a special antiderivative F of f, namely the antiderivative with F(0) = 0. As I wrote, if in 1d, you fix the antiderivative in one point and in 2d, you fix the antiderivative on a curve, you get a unique solution for d/dx (d/dy (f(x,y))) = x+y.
Michal
on 16 Jul 2022
syms x y
A1 = int(sin(x)+sin(y),x,0,x);
B1 = int(A1,y,0,y)
simplify(B1)
A2 = int(sin(x)+sin(y),x);
B2 = int(A2,y)
You see, the integration constant of your method is x+y.
All I want to say is:
Each integration gives its individual integration constant. For the differential equation
d/dx (d/dy(F(x,y))) = x+y
e.g., the "integration constants" are functions of the form
G(x,y) = g1(x) + g2(y)
unless you fix F on a curve in the (x,y) plane (not parallel to one of he coordiante axes).
Some integration constants look more plausible, others less.
And now I will be quiet and you can have "the last word", if you want.
Michal
on 17 Jul 2022
Categories
Find more on Calculus in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
