intergration of function failed to calculate

1 vue (au cours des 30 derniers jours)
inzamam shoukat
inzamam shoukat le 21 Mar 2024
Commenté : inzamam shoukat le 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'.''

Réponse acceptée

Torsten
Torsten le 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)
y1Approx = 
y2Approx = diff(y1Approx,X1)
y2Approx = 
ISE = EI/2*int(y2Approx^2,X1,0,L)
ISE = 
ISE_num = subs(ISE,L,6)
ISE_num = 

Plus de réponses (1)

Aditya
Aditya le 21 Mar 2024
Modifié(e) : Aditya le 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!

Catégories

En savoir plus sur Symbolic Math Toolbox dans Help Center et File Exchange

Produits


Version

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by