Azzera filtri
Azzera filtri

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

2 visualizzazioni (ultimi 30 giorni)
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,

Risposta accettata

Star Strider
Star Strider il 31 Mag 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

Più risposte (1)

Geoff Hayes
Geoff Hayes il 31 Mag 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 Commento
Steven Lord
Steven Lord il 31 Mag 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.

Accedi per commentare.

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by