# int of symbolic function not returning the integral

38 visualizaciones (últimos 30 días)
Liam Callaghan el 18 de Jun. de 2021
Comentada: Liam Callaghan el 23 de Jun. de 2021
I am trying to get the respective x-axis values for equal spacing along a function by calculating the limits of the integral that outputs the arc length, where the integral output is known (spacing increment). However, the int function is outputting:
int((((5204138152017503*a^5)/140737488355328 - (2930562179140953*a^4)/70368744177664 + (3626385061401385*a^3)/140737488355328 - (1491432682786067*a^2)/140737488355328 + (515258452258509*a)/140737488355328 - 3771558310026235/4503599627370496)^2 + 1)^(1/2), a)
opposed to the actual integral.
Relevant script:
%xu and yu are just x and y values for the function
f1 = polyfit(xu,yu,6);
p1 = polyval(f1,xu);
q = diff(f1);
syms a
f0 = ((q(1)*a^5)+(q(2)*a^4)+(q(3)*a^3)+(q(4)*a^2)+(q(5)*a)+q(6));
g0 = sqrt(1 + f0^2);
F = int(g0,a);
How do I get the actual integral out in a useful form?
##### 0 comentariosMostrar -1 comentarios más antiguosOcultar -1 comentarios más antiguos

Iniciar sesión para comentar.

Divija Aleti el 21 de Jun. de 2021
Hi Liam,
The "int" function cannot solve all integrals since symbolic integration is such a complicated task. It is also possible in this case that no analytic or elementary closed-form solution exists.
Hope this helps!
Regards,
Divija
##### 0 comentariosMostrar -1 comentarios más antiguosOcultar -1 comentarios más antiguos

Iniciar sesión para comentar.

### Más respuestas (1)

Walter Roberson el 21 de Jun. de 2021
It looks to me as if you are defining an arc length. However, for an arc length, f0 would have to be the derivative of a function. Which function?
f0 = ((q(1)*a^5)+(q(2)*a^4)+(q(3)*a^3)+(q(4)*a^2)+(q(5)*a)+q(6));
It is not the derivative of the function expressed through the q coefficients, at least not at that stage. Let's look further back
q = diff(f1);
well, that certainly looks like it might be a derivative. But is it?
f1 = polyfit(xu,yu,6);
No! The output of polyfit() is numeric, and diff() applied to a numeric vector is the finite difference operator, not the derivative. You are computing
q = f1(2:end) - f1(1:end-1)
not taking the derivative of a polynomial implied by f1.
I suspect that you should be doing
syms a
f1 = polyfit(xu,yu,6); %f1 is numeric
f0 = poly2sym(f1, a); %symbolic
g0 = sqrt(1 + diff(f0,a)^2);
F = int(g0, a)
You are unlikely to get a closed form solution. Closed form solutions might be possible in terms of the Elliptic Integral if diff(f0,a)^2 was degree no more than 4 (which would require that diff(f0,a) be of degree no more than 2, which would be for the case of fitting a cubic)
##### 1 comentarioMostrar NingunoOcultar Ninguno
Liam Callaghan el 23 de Jun. de 2021
Thank you!

Iniciar sesión para comentar.

### Categorías

Más información sobre Calculus en Help Center y File Exchange.

R2020b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by