I have prepared MATLAB code using ODE45 for calling function. Its giving error as "input argument 'z' is undefined. zp(1) = z(2); "

조회 수: 7 (최근 30일)
%apple solver code
x0=1e-6; %initial position
xp0=0; %initial velocity
y0=1e-6; %initial position
yp0=0; %initial velocity
tspan=[0 1e-4 0.296];
z0 = [1e-6; 0; 1e-6; 0];
[t,z] = ode45('apple',tspan,z0);
plot(t,z(:,1));
grid on
%%function for solver
function zp = apple(t,z)
m = 20; %%mass of shaft in Newton
k = 170e6; %%stiffness of bearing (k^inner = k^outer)
Pd = 20e-6; %%diametral clearance of ball bearing
tp = 0.296; %%time period
s=13; %%Number of balls
wc = 21.26; %%speed of bearing cage in rad/sec for 500rpm
si = 0; %%angular location of defect on race of bearing
phi0 = 0; %%initial position of ith ball
for t =0 : 1e-2: tp %time increment
for i = 1:1:s; %%ball increment
phi(i) = 2*pi*i/s + wc * t + phi0; %%calculation of ith ball angle
c = Pd/2 * (1 - cos(phi(i))); %%calculation of radial clearance
if phi(i) == si %%condition for ball in region of defect
b = 1;
delta = 1.0586e-2; %%additional deflection of ball when it passes through defect
else
b = 0; %%non-defective region
end
%solving Equation of motion for specified time period using
%Runge Kutta method (ode45)
%converting higher order equations into first order
zp=zeros(4,1);
zp(1)=z(2);
zp(2)=(k*cos(phi(i))/m) * ((z(1)*cos(phi(i)) + z(3)*sin(phi(i)) - b*delta - c)^(3/2) - (z(1)*cos(phi(i)) + z(3)*sin(phi(i)) - b*delta)^(3/2)); %%((a - c)^(3/2) - (a)^(3/2)
zp(3)=z(4);
zp(4)=(k*sin(phi(i))/m) * ((z(1)*cos(phi(i)) + z(3)*sin(phi(i)) - b*delta - c)^(3/2) - (z(1)*cos(phi(i)) + z(3)*sin(phi(i)) - b*delta)^(3/2));
end
end
end

답변 (1개)

Walter Roberson
Walter Roberson 2016년 4월 13일
Try changing to
[t,z] = ode45(@apple,tspan,z0);
and remember that you need to run apple_solver rather than apple
  댓글 수: 2
ANIKET KADAM
ANIKET KADAM 2016년 4월 13일
Thank you for your reply Sir. I ran apple_solver. and also '@apple' still same error
Walter Roberson
Walter Roberson 2016년 4월 13일
Your code only defines delta when phi(i) == si .
The filename you used when you attached was apple[1].m . The filename would have to be apple.m for MATLAB to be able to find the code. You might find you already have a different apple.m that is being invoked.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Numerical Integration and Differential Equations에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by