Hello, I have divided first order differential equations into 6 systems over respective time span, I am getting result as Inputs must be floats, namely single or double. I have tried to correct but not happening. Please help

3 次查看(过去 30 天)
t1span=[0:0.5:pi]
t2span=[ pi:0.5:2*pi];
t3span=[ 2*pi:0.5:3*pi];
t4span=[3* pi:0.5:4*pi];
t5span=[4* pi:0.5:5*pi];
t6span=[5* pi:0.5:6*pi];
t=linspace(0,0.5,50)
Axis=[-30 100 -30 50]
x=linspace(-30,100,50)
x1= linspace(5.5,10.5,50)
x2= linspace(10,14,50)
t1span=[0:0.5:pi]
t2span=[ pi:0.5:2*pi];
t3span=[ 2*pi:0.5:3*pi];
t4span=[3* pi:0.5:4*pi];
t5span=[4* pi:0.5:5*pi];
t6span=[5* pi:0.5:6*pi];
t=linspace(0,0.5,50)
k1=2; k2=7; xT=44;yT=32;
xt=[ 2 7.18 12.77 17.53 20.87 28.68 ] ;
yt=[ 8 11.42 13.61 15.41 17.78 21.28 ];
q1=[q11;q21;q31]
q10=[2; 8 ;0]
%q20=[xt2 yt2 atan2(yt2-yt1,xt2-xt1)]
% q20=[xt2 yt2 0.5826]
q20=[ 7.1892; 11.4189 ;0.5826]
q2=[q12 ;q22; q32] ;
% q30=[xt3 yt3 atan2(yt3-yt2,xt3-xt2)]
% q30=[xt3 yt3 0.3750]
q30=[ 12.7734; 13.6167 ;0.3750]
q3=[q13; q23 ;q33];
% q40=[xt4 yt4 atan2(yt4-yt3,xt4-xt3)]
%q40=[xt4 yt4 0.3620]
q40=[17.522; 15.4147 ;0.3620]
q4=[q14; q24; q34];
%q50=[xt5 yt5 atan2(yt5-yt4,xt5-xt4)]
% q50=[xt5 yt5 0.5988]
q50=[21; 17.78; 0.5988]
q5=[q15; q25; q35];
%q60=[ xt6 yt6 atan2(yt6-yt5,xt6-xt5)]
%q60=[ xt6 yt6 0.4264]
q6=[q16; q26 ;q36];
q60= [28.6819 ; 21.2781 ;0.4264]
etheta31=atan2(32-8,44-2);
etheta32=atan2(32-11.42,44-7.18);
etheta33=atan2(32-13.61,44-12.77);
etheta34=atan2(32-15.41,44-17.52);
etheta35=atan2(32-17.78,44-21);
etheta36=atan2(32-21.28,44-28.68);
v11= -k1*(44-2)
v12= -k1*(44-7.18)
v13= -k1*(44-12.77)
v14= -k1*(44-17.53)
v15= -k1*(xT-20.87)
v16= -k1*(xT-28.86)
v21=-k2*(atan2(32-8,44-2)+0.2)+(32-8)*sin(t1)
v22=-k2*(atan2(32-11.42,44-7.18)-0.2)+(32-11.42)*sin(t2)
v23=-k2*(atan2(32-13.61,44-12.77)-0.2)+(32-13.61)*sin(t3)
v24=-k2*(atan2(32-15.41,44-17.52)-0.2)+(32-15.41)*sin(t4)
v25=-k2*(atan2(32-17.78,44-21)-0.2)+(32-17.78)*sin(t5)
v26=-k2*(atan2(32-21.28,44-28.68))+(32-21.28)*sin(t6)
dq11dt1=v11*cos(q31);
dq12dt2=v12*cos(q32);
dq13dt3=v13*cos(q33);
dq14dt4=v14*cos(q34);
dq15dt5=v15*cos(q35);
dq16dt6=v16*cos(q36);
dq21dt1= v11*sin(q31);
dq22dt2=v12*sin(q32);
dq23dt3=v13*sin(q33);
dq24dt4=v14*sin(q34);
dq25dt5=v15*sin(q35);
dq26dt6=v16*sin(q36);
dq31dt1= v21;
dq32dt2= v22;
dq33dt3= v23;
dq34dt4= v24;
dq35dt5= v25;
dq36dt6= v26;
t1span=[0:0.5:pi];
q1=[q11 q21 q31];
q10=[2 8 0];
F1=@(t1,q1)(vpa ([v11+v21*(32-8);-v21*(32-8);v21]));
[t1,q1] = ode45(F1,t1span,q10);
Plot (q11,q21)
hold on;
q2=[q12 q22 q32];
q20=[ 7.1892; 11.4189 ;0.5826]
t2span=[ pi:0.5:2*pi];
F2=@(t2,q2)(vpa([v12+v22*(32-11.42);-v22*(32-11.42);v22]));
[t2,q2] = ode45(F2,t2span,q20);
plot(q12,q22)
hold on;
q3=[q13 q23 q33];
q30=[ 12.7734; 13.6167 ;0.3750];
t3span=[2*pi:0.5:3*pi];
F3=@(t3,q3)(vpa([v13+v23*(32-13.61);-v23*(32-13.61);v23]));
[t3,q3] = ode45(F3,t3span,q30);
plot(q13,q23)
hold on;
q4=[q14 q24 q34];
q40=[17.522; 15.4147 ;0.3620];
t4span=[3*pi:0.5:4*pi];
[t4,q4] = ode45(F4,t4span,q40);
F4=@(t4,q4)(vpa([v14+v24*(32-15.41);-v24*(32-15.41);v24]));
plot(q14,q24)
hold on;
q5=[q15 q25 q35];
q50=[21; 17.78; 0.5988];
t5span=[4*pi:0.5:5*pi];
F5=@(t5,q5)(vpa([v15+v25*(32-17.78);-v25*(32-17.78);v25]));
[t5,q5] = ode45(F5,t5span,q50);
plot(q15,q25)
hold on;
q6=[q16 q26 q36];
q60= [28.6819 ; 21.2781 ;0.4264]
t6span=[5*pi:0.5:6*pi];
F6=@(t6,q6)(vpa([v16+v26*(32-21.28);-v22*(32-21.28);v26]));
[t6,q6] = ode45(F6,t6span,q60);
plot(q16,q26)
hold off;
end

回答(1 个)

Walter Roberson
Walter Roberson 2018-8-27
Several of your variables are undefined, especially your t* and q* variables.
You have
F1=@(t1,q1)(vpa ([v11+v21*(32-8);-v21*(32-8);v21]));
vpa() returns a symbolic value even if the inputs are numeric. ode45() cannot work with symbolic values.
I suspect you have defined the q* variables and t* variables as symbolic. Please note that when you have equations along the line of
syms x
y = x^2;
F = @(x) y
then when F is evaluated, there is no connection made between the x of the input argument and the x that appears in the formula for y.
You should probably be creating your F1 by using
F1 = matlabFunction([v11+v21*(32-8);-v21*(32-8);v21], 'vars', [t1, q1])

类别

Help CenterFile Exchange 中查找有关 Programming 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by