Info
이 질문은 마감되었습니다. 편집하거나 답변을 올리려면 질문을 다시 여십시오.
Need help debugging code. Will not plot data
조회 수: 5 (최근 30일)
이전 댓글 표시
Main File
%% define parameters related to road shape
road_params.b = 2.0;
road_params.c = 0.3;
road_params.d = 1.5;
road_params.e = 1.0;
%% define parameters related to car
car_params.mb = 1200.0;
car_params.mt = 15.0;
car_params.ks = 30000.0;
car_params.kt = 100000.0;
car_params.cs = 3000.0;
car_params.v = 5.0;
%% generate the time interval of solution
t = linspace(0, 4.0, 1000);
%% solve the system using ode45
x_init = [0, 0, 0, 0]';
[t, x] = ode45(@(t, x)half_car_system(t, x, road_params, car_params), t, x_init);
%% plot the solution
road = [];
for i=1:1:1000
road = [road, road_shape(t(i), road_params, car_params.v)];
end
%road = road_shape(t, road_params, car_params.v);
plot(t, road, 'b-;road;', 'linewidth', 2, t, x(:,1), 'k-;xt;', 'linewidth', 1.5, t, x(:, 3), 'g-;xb;', 'linewidth', 1.5);
xlabel('time (s)');
ylabel('response (m)');
title('half car system response');
Output function
function [dxdt] = half_car_system(t, x, road_params, car_params)
y = road_shape(t, road_params, car_params.v);
dxdt = zeros(4,1);
dxdt(1,1) = x(2);
dxdt(2,1) = -x(1) + y;
dxdt(2,1) = dxdt(2,1)*car_params.kt/car_params.mt;
dxdt(3,1) = x(4);
dxdt(4,1) = (x(1) - x(3))*car_params.ks + (x(2) - x(4))*car_params.cs;
dxdt(4,1) = dxdt(4,1)/car_params.mb;
end
Input function
function [y] = road_shape(t,road_params,v)
if (t >= 0 && t < road_params.e/v)
y = 0;
%end
elseif (t >= road_params.e/v && t < (road_params.e + road_params.d)/v)
y = road_params.c*sin(pi*v*(t - road_params.e/v)/road_params.d);
%end
elseif (t >= (road_params.e + road_params.d)/v && t < (road_params.e + road_params.d + road_params.b)/v)
y = 0;
%end
elseif (t >= (road_params.e + road_params.d + road_params.b)/v && t < (road_params.e + 2*road_params.d + road_params.b)/v)
y = road_params.c*sin(pi*v*(t - (road_params.e + road_params.d + road_params.b)/v)/road_params.d);
else
y = 0;
end
% z1 = ones(size(t));
% z1(~(t >= road_params.e/v || t < (road_params.e + road_params.d)/v)) = 0.0;
% z2 = t;
% z2(~(z2 >= (road_params.e + road_params.d + road_params.b)/v | z2 < (road_params.e + 2*road_params.d + road_params.b)/v)) = 0.0;
% y = road_params.c*(sin(pi*v*z1/road_params.d) + sin(pi*v*z2/road_params.d));
end
I am receiving this error:
ME171ProjectODE
Error using plot
Invalid data argument.
Error in ME171ProjectODE (line 25)
plot(t, road, 'b-;road;', 'linewidth', 2, t, x(:,1), 'k-;xt;', 'linewidth', 1.5, t, x(:,
3), 'g-;xb;', 'linewidth', 1.5);
I have all 3 files in same folder not sure why it is giving me an error message on the plotting portion of this.
댓글 수: 1
Walter Roberson
2019년 4월 17일
What do you intend your plot argument 'b-;road' to mean ? What are you intending the 'k-;xt;' argument to mean?
My guess would be that you are trying so specify legend entries for the plots. You cannot do that as part of a linespec argument. There is a 'DisplayName' option for plot(), but only one of them will be paid attention to in any one call to plot()
답변 (0개)
이 질문은 마감되었습니다.
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!