Undefined function 'matlabFunction' for input arguments of type 'double'.

1 Ansicht (letzte 30 Tage)
I wrote a following code. If I remove H4_b, the code runs otherwise not. Rest all are ok.
dbstop if error
clear all
clc
format longEng
syms y1 y2 x y q
phi=(pi/180)*39;
delta=(2*phi)/3;
gma=18.4;
a=[2.5;0.532];
% kh=0.3;
Q=linspace(0,100,6);
h=4;
lam=0.2;
% q=50;
nq=2*q/(gma*(h+x));
A=lam*nq/(1+nq);
kh=0.3;
kv=kh;
psi=atan(kh/(1-kv));
beta=1.3;
alfa=1.3;
R1=-1;
R3=-(alfa*(y2))^0.5;
R2=3*(beta*(1-y1))^0.5;
R4=3*(alfa*(y2))^0.5;
delm1=0.5*(1-R1)*delta;
delm3=-0.5*(1-R3)*delta;
% delm2=0.5*(R2-1)*delta;
% delm4=0.5*(R4-1)*delta;
m=phi+delm1;
b=phi-psi;
c=psi+delm1;
alphac=atan((sin(m)*sin(b)+(sin(m)^2*sin(b)^2+sin(m)*cos(m)*sin(b)*cos(b)+A*cos(c)*cos(m)*sin(b))^0.5)/(A*cos(c)+sin(m)*cos(b)));
kg=(tan(alphac-phi)+(kh/(1-kv)))/(tan(alphac)*(cos(delm1)+sin(delm1)*tan(alphac-phi)));
r=1-lam*tan(alphac);
kq=r*kg;
pg=0.5*gma*(1-kv)*kg*(h+x)^2*cos(delm1);
pq=(1-kv)*q*kq*(h+x);
k3=(2*cos(phi-psi)^2)/(cos(phi-psi)^2*(1+R3)+cos(psi)*cos(delm3+psi)*(1-R3)*(1+sqrt((sin(phi+delm3)*sin(phi-psi))/cos(delm3+psi)))^2);
for R2=0:0.1:3
if (R2>=0 && R2<=1)
delm2=0.5*(1-R2)*delta;
k2=(2*cos(phi-psi)^2)/(cos(phi-psi)^2*(1+R2)+cos(psi)*cos(delm2+psi)*(1-R2)*(1+sqrt((sin(phi+delm2)*sin(phi-psi))/cos(delm2+psi)))^2);
else
delm2=0.5*(R2-1)*delta;
k2=1+0.5*(R2-1)*((cos(phi-psi)^2/(cos(psi)*(cos(delm2+psi)*(-sqrt((sin(phi+delm2)*sin(phi-psi))/(cos(delm2+psi)))+1)^2)))-1);
end
end
for R4=0:0.1:3
if (R4>=0 && R4<=1)
delm4=0.5*(1-R4)*delta;
k4=(2*cos(phi-psi)^2)/(cos(phi-psi)^2*(1+R4)+cos(psi)*cos(delm4+psi)*(1-R4)*(1+sqrt((sin(phi+delm4)*sin(phi-psi))/cos(delm4+psi)))^2);
else
delm4=0.5*(R4-1)*delta;
k4=1+0.5*(R4-1)*((cos(phi-psi)^2/(cos(psi)*(cos(delm4+psi)*(-sqrt((sin(phi+delm4)*sin(phi-psi))/(cos(delm4+psi)))+1)^2)))-1);
end
end
%For horizontal forces
H2=matlabFunction(k2*y1*cos(delm2));
h2=gma*x^2*integral(H2,0,1);
H4_a=matlabFunction(k4*y2*cos(delm4));
H4_b=matlabFunction(cos(delm4)*k4);
h4=gma*y^2*integral(H4_a,0,1)+gma*(x+h)*y*integral(H4_b,0,1);
H3_a=matlabFunction(k3*y2*cos(delm3));
H3_b=matlabFunction(k3*cos(delm3));
h3=gma*y^2*integral(H3_a,0,1)+gma*x*y*integral(H3_b,0,1);
HF=h2-h4+h3-pg-pq;
%
M2=matlabFunction(k2*y1*cos(delm2)*(1-y1));
m2=gma*x^3*integral(M2,0,1);
M4_a=matlabFunction(k4*y2^2*cos(delm4));
M4_b=matlabFunction(k4*y2*cos(delm4));
m4=gma*y^3*integral(M4_a,0,1)+gma*(x+h)*y^2*integral(M4_b,0,1);
M3_a=matlabFunction(k3*y2^2*cos(delm3));
M3_b=matlabFunction(k3*y2*cos(delm3));
m3=gma*y^3*integral(M3_a,0,1)+gma*x*y^2*integral(M3_b,0,1);
MF=m2+m4-m3-pg*(h+x)*(1/3)-0.5*pq*(h+x);
% The Newton-Raphson iterations starts here
del=1;
indx=0;
g=[HF; MF];
J=jacobian([HF, MF], [x, y]);
Z=zeros(2,numel(Q));
for i=1:numel(Q)
del=1;
indx=0;
while del>1e-6
gnum = vpa(subs(g,[x,y,q],[a(1),a(2),Q(i)]));
Jnum = vpa(subs(J,[x,y,q],[a(1),a(2),Q(i)]));
delx = -Jnum\gnum;
a = a + delx;
del = max(abs(gnum));
indx = indx + 1;
end
Z(:,i)=double(a)
end
% 'NEWTON-RAPHSON SOLUTION CONVERGES IN ITERATIONS',indx,
% 'FINAL VALUES OF a ARE';a,

Akzeptierte Antwort

Star Strider
Star Strider am 31 Mai 2019
The argument in ‘H4_b’ is not a function of anything.
Inserting this line just before the ‘H4_b’ assignment:
H4_b_query = cos(delm4)*k4
produces:
H4_b_query =
9.32591844224377e+000

Weitere Antworten (1)

Geoff Hayes
Geoff Hayes am 31 Mai 2019
Akshay - what can you tell us about the signature for the matlabFunction? You say that Undefined function 'matlabFunction' for input arguments of type 'double'. which works for all calls (to it) except for H4_b. If we look at
H4_a=matlabFunction(k4*y2*cos(delm4));
H4_b=matlabFunction(cos(delm4)*k4);
the only difference to the input (into this function) is the y2 factor. Note that y2 has been defined as a sym
syms y1 y2 x y q
which suggests (along with the error message) that matlabFunction is expecting a symbolic input data type and not a double input data type. Perhaps your equation for k4 is incorrect or you will need to update matlabFunction to accept non-symbolic inputs.
  1 Kommentar
Steven Lord
Steven Lord am 31 Mai 2019
The matlabFunction function is part of Symbolic Math Toolbox, and at least the first input to that function must be a symbolic object.
Both delm4 and k4 are double scalars, which means the result of that expression is also a double scalar.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Symbolic Math Toolbox finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by