Newmark数值分析法matlab程序

clc
clear
M=[1,2,3,4];
m=diag(M); %质量对角线矩阵
k=[ 800 -800 0 0 ;
-800 2400 -1600 0 ;
0 -1600 4800 -3200 ;
0 0 -3200 8000 ]; %计算刚度矩阵
c=0.05m+0.02k;%c=2m0.05*sqrt(k/m) ;
f0= 100;
t1=5; %力的作用时间
nt=2000; %分2000步完成
dt=0.01; %时间步长
alfa=0.25; %γ=0.25
beta=0.5; %β=0.5

a0=1/alfa/dt/dt; %
a1=beta/alfa/dt; %
a2=1/alfa/dt; %
a3=1/2/alfa-1; %
a4=beta/alfa-1; %
a5=dt/2*(beta/alfa-2); %
a6=dt*(1-beta); %
a7=dtbeta; %
d=zeros(4,nt); %初位移为0
v=zeros(4,nt); % 初速度为0
a=zeros(4,nt); % 初加速度为0
for i=2:nt
t=(i-1)dt;
if (t<t1),
f=[f0
sin(4
pit/t1);0;0;0]; %f=[300sin(6pit)-50cos(3pit);0;0;0]; %力作用时间内对结构进行加载
else
f=[0;0;0;0]; %力作用时间外结构不受力
end
ke=k+a0
m+a1c; % 有效刚度矩阵
fe=f+m
(a0d(:,i-1)+a2v(:,i-1)+a3a(:,i-1))+c(a1d(:,i-1)+a4v(:,i-1)+a5a(:,i-1));
% t+dt时刻的有效荷载
d(:,i)=ke\fe;%d(:,i)=inv(ke)fe; %求解t+dt时刻的位移
a(:,i)=a0
(d(:,i)-d(:,i-1))-a2
v(:,i-1)-a3a(:,i-1); %计算t+dt时刻的加速度
v(:,i)=v(:,i-1)+a6
a(:,i-1)+a7*a(:,i); %计算t+dt时刻的速度
end

T=(0:dt:19.99); %离散系统dt为采样周期 19.99为终端时间
close all

figure %控制窗口数量
plot(T,d(1,:)) %绘制位移函数图像
title(‘各质点位移总图’) %添加标题为各质点位移总图
xlabel(‘s’) %对x轴进行标注为时间(s)
ylabel(‘m’) %对y轴进行标注为位移(m)
grid %显示画图中的个网线

figure
plot(T,a) %绘制加速度函数图像
title(‘加速度总图’) %添加标题为各质点加速度总图
legend(‘a1’,‘a2’,‘a3’,‘a4’)
xlabel(‘s’) %对x轴进行标注为时间(s)
ylabel(‘m/s^2’) %对y轴进行标注为加速度(m/s2)
grid

figure
plot(T,v) %绘制速度函数图像
title(‘速度总图’) %添加标题为各质点速度总图
legend(‘v1’,‘v2’,‘v3’,‘v4’)
xlabel(‘s’) %对x轴进行标注为时间(s)
ylabel(‘m/s)’) %对y轴进行标注为加速度(m/s)
grid

Newmark-Beta 法是一种数值积分方法,常用于结构动力学分析中解决波动问题,包括无阻尼自由振动。在MATLAB中编写这个程序涉及到时间步长控制、加速度计算以及线性方程组的求解。下面是一个简单的示例程序,假设我们有一个二阶微分方程(代表自由振动系统的运动方程): ```Matlab function [time, displacement, acceleration] = NewmarkBetaMethod(K, M, initial_displacement, initial_velocity, dt, beta, gamma) % 参数定义 N_steps = ceil(max_time/dt); % 总时间步数,max_time为最大模拟时间 time = zeros(1, N_steps + 1); % 时间数组 displacement = zeros(1, N_steps + 1); % 位移数组 acceleration = zeros(1, N_steps + 1); % 加速度数组 % 初始条件 displacement(1) = initial_displacement; acceleration(1) = initial_velocity; % Newmark-Beta积分公式 alpha = (1 - gamma)/2; % 新马克系数 for i = 2:N_steps acceleration_new = alpha * acceleration(i-1) + (1 - alpha) * K*displacement(i-1)/M; % 根据加速度更新新位移 displacement(i) = displacement(i-1) + dt * acceleration_new; % 更新位移 acceleration(i) = (1 - beta)*acceleration_new + beta*K*displacement(i)/M; % 更新加速度 time(i) = time(i-1) + dt; % 更新时间 end end ``` 在这个函数中, - `K` 和 `M` 分别是系统刚度矩阵和质量矩阵。 - `initial_displacement` 和 `initial_velocity` 是初始状态的位移和速度。 - `dt` 是时间步长,`beta` 和 `gamma` 是Newmark方法的参数,通常取值0.5和0.25。 使用该函数的基本步骤如下: ```Matlab % 示例 [K, M] = ...; % 初始化结构的动力学模型 initial_displacement = ...; % 初始位移 initial_velocity = ...; % 初始速度 dt = ...; % 时间步长 beta = 0.5; % 新马克参数 gamma = 0.25; [max_time, sol] = NewmarkBetaMethod(K, M, initial_displacement, initial_velocity, dt, beta, gamma); ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_1352120589

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值