symbolic integration depends on different equivalent forms of function
Ältere Kommentare anzeigen
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???
Antworten (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 Kommentare
Torsten
am 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
am 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 Kommentare
Torsten
am 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
am 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
am 17 Jul. 2022
Kategorien
Mehr zu Number Theory finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

