MATLAB Answers

Input function must return 'double' or 'single' values. Found 'sym'.

35 views (last 30 days)
dear all
when i using integral command although i define z i get the following error
clc
clear all
E2=10;
E1=20;
lE=E2/E1;
n=1;
h=2;
v1=30;
v2=40;
lv=v2/v1;
sym z
Eb=1+(((2*z+h)/2*h)^n)*(lE-1)
vb=1+(((2*z+h)/2*h)^n)*(lv-1)
fun=@(z) Eb/((1-(v1^2)*(vb^2))*h)
A11=integral(fun,-1/2,1/2)
and the error :
Undefined function or variable 'z'.
Error in first (line 13)
Eb=1+(((2*z+h)/2*h)^n)*(lE-1)
and also when i use syms z instead of sym z i get the following one :
fun =
function_handle with value:
@(z)Eb/((1-(v1^2)*(vb^2))*h)
Error using integralCalc/finalInputChecks (line 511)
Input function must return 'double' or 'single' values. Found 'sym'.
Error in integralCalc/iterateScalarValued (line 315)
finalInputChecks(x,fx);
Error in integralCalc/vadapt (line 132)
[q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
Error in integralCalc (line 75)
[q,errbnd] = vadapt(@AtoBInvTransform,interval);
Error in integral (line 88)
Q = integralCalc(fun,a,b,opstruct);
Error in first (line 18)
A11=integral(fun,-1/2,1/2)
i really appreciated if someone could help me with this

  0 Comments

Sign in to comment.

Accepted Answer

Ameer Hamza
Ameer Hamza on 8 Apr 2020
Correct syntax is to use 'syms', not 'sym'. Also you should use matlabFunction to convert symbolic equation to numeric
clc
clear all
E2=10;
E1=20;
lE=E2/E1;
n=1;
h=2;
v1=30;
v2=40;
lv=v2/v1;
syms z
Eb=1+(((2*z+h)/2*h)^n)*(lE-1)
vb=1+(((2*z+h)/2*h)^n)*(lv-1)
fun= matlabFunction(Eb/((1-(v1^2)*(vb^2))*h))
A11=integral(fun,-1/2,1/2)

  12 Comments

Show 9 older comments
Ameer Hamza
Ameer Hamza on 8 Apr 2020
Your solution is correct. You can also use this to avoid if-else block
d=10;
E2=30;
E1=10;
lE=E2/E1;
n=1;
h=2;
v1=40;
v2=40;
lv=v2/v1;
l1=30;
l2=30;
ll=l2/l1;
i=2;
syms z
Eb=(1+(((2*z+h)/2*h)^n)*(lE-1))
vb=(1+(((2*z+h)/2*h)^n)*(lv-1))
lb=(1+(((2*z+h)/2*h)^n)*(ll-1))
sum_fun(z) = Eb/((1-(v1^2)*(vb^2))*h); % this lines forces it to act as a function of z, even if the value is constant
fun = matlabFunction(sum_fun)
A11=integral(fun,-1/2,1/2, 'ArrayValued', 1)

Sign in to comment.

More Answers (0)

Products


Release

R2017a

Community Treasure Hunt

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

Start Hunting!