matlab用解析法求二自由度阻尼系统的自由振动(先求系统状态方程

56 篇文章 20 订阅
%spring2.m-用解析法求二自由度阻尼系统的自由振动(先求系统状态方程组)
m1=1;m2=9;k1=4;k2=2; 
c1=input('c1=');c2=input('c2=');  %输入阻尼系数 
x0=[1;0];xd0=[0;-1];  %初始条件
tf=50;dt=0.1;  %时间向量
M=[m1,0;0,m2];K=[k1+k2,-k2;-k2,k2];  %二阶参数矩阵
C=[c1+c2,-c2;-c2,c2];
A=[zeros(2,2),eye(2);-M\K,-M\C];  %四阶参数矩阵
y0=[x0;xd0];  %四元变量的初始条件
for  i=1:round(tf/dt)+1   %设定计算点,作循环计算
    t(i)=dt*(i-1);
    y(:,i)=expm(A*t(i))*y0;   %循环计算矩阵指数
end
subplot(2,1,1),plot(t,y(1,:)),grid
subplot(2,1,2),plot(t,y(2,:)),grid
  • 7
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是针对您的问题的 MATLAB 代码,它可以求解自由度弹簧阻尼系统自由振动的运动微分方程。 首先,我们需要定义系统的一些参数,如质量,初始条件,弹簧和阻尼系数等。 m1 = 1; % 质量1 m2 = 1; % 质量2 k1 = 1; % 弹簧系数1 k2 = 1; % 弹簧系数2 c1 = 0.2; % 阻尼系数1 c2 = 0.1; % 阻尼系数2 x10 = 0; % 位置1的初始值 x20 = 1; % 位置2的初始值 xdot10 = 0; % 速度1的初始值 xdot20 = 0; % 速度2的初始值 接下来,我们可以使用ODE45函数求解运动微分方程。具体地说,我们需要定义一个函数,该函数返回速度和加速度分别为输入位置和速度的函数。 function [dxdt] = SpringMass2(t, x) m1 = 1; % 质量1 m2 = 1; % 质量2 k1 = 1; % 弹簧系数1 k2 = 1; % 弹簧系数2 c1 = 0.2; % 阻尼系数1 c2 = 0.1; % 阻尼系数2 x1 = x(1); % 位置1 x2 = x(2); % 位置2 xdot1 = x(3); % 速度1 xdot2 = x(4); % 速度2 % 计算加速度 ddx1 = (-c1*xdot1-k1*(x1-x2))/m1; ddx2 = (-c2*xdot2-k2*x2)/m2; dxdt = [xdot1; xdot2; ddx1; ddx2]; 然后我们可以定义初始条件和时间范围,并使用ODE45函数求解微分方程。 tspan = [0 10]; % 时间范围 x0 = [x10; x20; xdot10; xdot20]; % 初始条件 [t,x] = ode45(@SpringMass2, tspan, x0); % 使用ODE45求解微分方程 最后,我们可以绘制出位置随时间变化的图像。 figure subplot(2,1,1) plot(t, x(:,1)) hold on plot(t, x(:,2)) xlabel('时间') ylabel('位置') legend('质点1位置', '质点2位置') title('位置随时间变化') subplot(2,1,2) plot(x(:,1), x(:,3)) hold on plot(x(:,2), x(:,4)) xlabel('位置') ylabel('速度') legend('质点1速度', '质点2速度') title('速度随位置变化')

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值