int of symbolic function not returning the integral
조회 수: 16 (최근 30일)
이전 댓글 표시
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
채택된 답변
Divija Aleti
2021년 6월 21일
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.
For more information, have a look at the 'Tips' section of the following link:
Hope this helps!
Regards,
Divija
댓글 수: 0
추가 답변 (1개)
Walter Roberson
2021년 6월 21일
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)
참고 항목
카테고리
Help Center 및 File Exchange에서 Calculus에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!