intergration of function failed to calculate
1 view (last 30 days)
Show older comments
inzamam shoukat
on 21 Mar 2024
Commented: inzamam shoukat
on 21 Mar 2024
yApprox = a0 + a1.*(X1) + a2.*(X1).^2 + a3.*(X1).^3+ a4.*(X1).^4 + a5.*(X1).^5 + a6.*(X1).^6;
y1Approx= diff(yApprox,X1)
y2Approx=@(X1)diff(y1Approx,X1)
ISE = (EI/2).*(integral((y2Approx).^2,0,L))
where L=6
% I am getting this error.............." Operator '.^' is not supported for operands of type 'function_handle'.''
0 Comments
Accepted Answer
Torsten
on 21 Mar 2024
syms X1 a0 a1 a2 a3 a4 a5 a6 L EI
yApprox = a0 + a1*X1 + a2*X1^2 + a3*X1^3+ a4*X1^4 + a5*X1^5 + a6*X1^6;
y1Approx= diff(yApprox,X1)
y2Approx = diff(y1Approx,X1)
ISE = EI/2*int(y2Approx^2,X1,0,L)
ISE_num = subs(ISE,L,6)
More Answers (1)
Aditya
on 21 Mar 2024
Edited: Aditya
on 21 Mar 2024
Hi Inzamam,
I understand that you are getting the error "Operator '.^' is not supported for operands of type 'function_handle'." This occurs because you're trying to use the element-wise power operator '.^' on a function handle ('y2Approx') instead of numeric arrays within the 'integral' function. The 'integral' function expects a function handle that can operate on numeric inputs directly, but the operations inside that function handle must be defined correctly to handle numeric operations.
To tackle this error, you need to ensure that the function handle you're passing to 'integral' is correctly set up to perform numeric calculations. This often involves converting any symbolic expressions to numeric function handles if you're working with symbolic differentiation. Here's how you can do it:
% Initialize constants
a0 = 1; a1 = 1; a2 = 1; a3 = 1; a4 = 1; a5 = 1; a6 = 1; % Example coefficients
EI = 1; % Example EI value
L = 6; % Length
% Define symbolic variable
syms X1
% Define yApprox as a symbolic expression
yApprox = a0 + a1.*X1 + a2.*X1.^2 + a3.*X1.^3 + a4.*X1.^4 + a5.*X1.^5 + a6.*X1.^6;
% First derivative of yApprox with respect to X1
y1Approx = diff(yApprox, X1);
% Second derivative of yApprox with respect to X1
y2Approx = diff(y1Approx, X1);
% Convert the symbolic expression of the second derivative to a function handle for numerical integration
y2ApproxNumeric = matlabFunction(y2Approx);
% Calculate ISE using the integral of y2Approx squared from 0 to L
ISE = (EI/2) * integral(@(X1) y2ApproxNumeric(X1).^2, 0, L);
% Display the result
disp('ISE = ');
disp(ISE);
This code first defines the polynomial expression and its derivatives symbolically, then converts the second derivative into a numeric function handle suitable for integration. This approach ensures that all operations within the function passed to `integral` are numeric and compatible with the '.^' operator and other numeric operations.
To read more about Integration with Symbolic expressions, refer to the below MATLAB documentation:
I hope it helps!
See Also
Categories
Find more on Symbolic Math Toolbox 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!