我有一个四分之一的汽车模型,它是一个带有阻尼器和弹簧的 2 自由度系统,带有以下代码和图表;
function dx = ode_2dof(t,x)
m1=500;
c1=1200;
k1=25000;
k2=15000;
m2=50;
dx=zeros(4,1);
dx(1)=x(2)
dx(2)=-(c1/m1)*(x(2)-x(4))-(k1/m1)*(x(1)-x(3))
dx(3)=x(4)
dx(4)=(c1/m2)*(x(2)-x(4))+(k1/m2)*(x(1)-x(3))-k2*x(3)
end
在这里,我尝试将输入作为道路条件。首先,我将步长输入设置为 0.5 秒后 0.01 米的高度,因此我将函数 dx(4) 更改为如下更改函数文件;
dx(4)=(c1/m2)*(x(2)-x(4))+(k1/m2)*(x(1)-x(3))-k2*(x(3)-y)
添加;
if y>0.5
y=0.01
elseif
y=0
在代码 dx=zeros(4,1) 和 dx(1)=x(2) 之间。
回想一下这个函数,我可以绘制 x1 和 x2(即汽车和轮胎)位移的图形,如下所示;
[t x] = ode45(@ode_2dof,[0 3],[0.7 0 0.35 0]) %initial position of the car and the tyre
x1_position=x(:,1);
x2_position=x(:,3);
figure
plot(t,x1_position,t,x2_position);
grid on
legend('x1 position','x2 position');
问题1,我有一个图表
但这不是我想要的图表,我怎样才能得到 x1 稳定在 0.7 和 x2 分别在 0.35 作为初始条件的图表,而不是 0?
此外,我尝试更改 x1、k1 和 k2 值,以查看它如何通过分别更改函数文件中的 x1、k1 和 k2 值并单独保存来影响位移。
function dx = ode_2dof2700(t,x)
c1=2700
function dx = ode_2dof40000(t,x)
k1=40000
function dx = ode_2dof30000(t,x)
k2=30000
function dx = ode_2dofmix(t,x)
c1=2700
k1=40000
k2=30000
问题 2,我尝试在不同的图中同时绘制所有 x1 和 x2 的图形,如下所示;
[t x] = ode45(@ode_2dof,[0 5],[0.7 0 0.35 0])
x1_position=x(:,1);
x2_position=x(:,3);
[t x] = ode45(@ode_2dof2700,[0 5],[0.7 0 0.35 0])
x1_position_2700=x(:,1);
x2_position_2700=x(:,3);
[t x] = ode45(@ode_2dof40000,[0 5],[0.7 0 0.35 0])
x1_position_40000=x(:,1);
x2_position_40000=x(:,3);
[t x] = ode45(@ode_2dof30000,[0 5],[0.7 0 0.35 0])
x1_position_30000=x(:,1);
x2_position_30000=x(:,3);
[t x] = ode45(@ode_2dofmix,[0 5],[0.7 0 0.35 0])
x1_position_mix=x(:,1);
x2_position_mix=x(:,3);
figure
plot(t,x1_position,t,x1_position_2700,t,x1_position_40000,t,x1_position_30000,t,x1_position_mix);
grid on
但我有一个错误,向量数组必须匹配。它实际上是不同的,因为 x1_position 是 1361x1 而 x2_position_2700 是 1041x1 等。如何更改代码以匹配数组?
问题 3,如果我想设置一个幅度为 0.01 米的正弦输入,我应该如何更改输入?
谢谢