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
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 个)

此问题已关闭。

产品


版本

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by