声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3878|回复: 22

[结构振动] kelvin弹性梁的matlab

[复制链接]
发表于 2011-12-26 10:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
最近用matlab编写kelvin弹性梁仿真程序。里面总是存在小bug,计算到一定时间段就会发生跳跃。不知道有没有做过这方面的,求指导!
回复
分享到:

使用道具 举报

发表于 2011-12-29 09:19 | 显示全部楼层
什么是kelvin弹性梁?LZ能否普及一下知识。
 楼主| 发表于 2011-12-29 14:19 | 显示全部楼层
回复 2 # 凌绝顶 的帖子

我不知道怎么样上传图片。你可以百度一下。kelvin粘弹性梁。
 楼主| 发表于 2011-12-29 22:02 | 显示全部楼层
回复 2 # 凌绝顶 的帖子

粘弹性梁
发表于 2011-12-31 16:48 | 显示全部楼层
.
   可以展开介绍一下粘弹性梁和一般梁的区别...
 楼主| 发表于 2012-1-1 17:07 | 显示全部楼层
本帖最后由 伤痕累累 于 2012-1-1 17:15 编辑

我给我的差分程序弄上来给大家看看。主要是不会上传文件个图片。
function nextsolv3
%%差分的转化没有问题,但是为什么会出这样的结果呢,欢迎高手给予指导!!!
%我的邮箱:caitylnbug@126.com
%论文里给的时间和空间的步长分别是 dt=1e-6,h=1e-3,做出了倍周期和混沌,运行的时间是700s
clear all
clc
%kelvin弹性梁数学模型,由Hamilton原理推导,经无量纲后方程如下(D表示微分):
%D^2v(x,t)/Dt^2+2*r*D^2v(x,t)/DtDx+(r^2-1)*D^2v(x,t)/Dx^2+...
%vf^2**D^4v(x,t)/Dx^4+a*D^5v(x,t)/Dx^4*Dt=3/2*k1^2*(Dv(x,t)/Dx)^2*D^2v(x,t)/Dx^2
%初始条件v(0,t)=v(1,t)=0,D^2v(0,t)/Dx^2=D^2v(1,t)/Dx^2=0
%边界条件v(x,0)=K*x*(1-x);Dv(x,0)/Dt=0;K=0.001
%参数下面有给出
reltol=1e-7;
dt=0.01;h=0.1;%时间步长dt,空间步长h
T=0.2;L=1;
x=0:h:L;
y=0:dt:T;%时间点
n=length(x)%空间离散结点个数
m=length(y)%时间离散节点个数
a=0.001;k1=2000;r0=3;w=3.5;r1=0.4;vf=0.8;
D=0.001;
v=zeros(n+4,m+3);%初始化
for j=3:n+2
    for i=3:m+1
        v(n+2,i)=0;%右边界
        v(3,i)=0;%左边界
        r(i)=r0+r1*sin(w*y(i-1));%轴向梁运动速度
        dr(i)=r1*w*cos(w*y(i-1));%轴向速度的导数
        v(j,2)=D*x(j-2)*(1-x(j-2));%下边界
        v(n+3,i)=2*v(n+2,i)-v(n+1,i);%边界有限差分的处理
        v(2,i)=2*v(3,i)-v(4,i);%边界有限差分的处理
        c0=2/dt^2+2*(r(i)^2-1)/h^2-6*vf^2/h^4;c1=1/dt^2;c2=2*r(i)/(4*h*dt);c3=dr(i)/(2*h);c4=(r(i)^2-1)/h^2;c5=vf^2/h^4;c6=a/(2*dt*h^4);c7=1.5*k1^2/(4*h^4);
        v(j,i)=1/c0*(c1*(v(j,i+1)+v(j,i-1))+c2*(v(j+1,i+1)-v(j-1,i+1)-v(j+1,i-1)+v(j-1,i-1))+c3*(v(j+1,i)-v(j-1,i))+c4*(v(j+1,i)+v(j-1,i))+c5*(v(j-2,i)-4*v(j-1,i)-4*v(j+1,i)+v(j+2,i))+...
            c6*(v(j+2,i+1)-4*v(j+1,i+1)+6*v(j,i+1)-4*v(j-1,i+1)+v(j-2,i+1)-v(j+2,i-1)+4*v(j+1,i-1)-6*v(j,i-1)+4*v(j-1,i-1)-v(j-2,i-1))-c7*(v(j+1,i)-v(j-1,i))^2*(v(j+1,i)-2*v(j,i)+v(j-1,i)));
    end
end
V=v(3:n+2,2:m+1)
plot(y,V((n+1)/2,:),'b-')%v(0.5,t)点的振幅
figure
plot(y,V)end
V=v(3:n+2,2:m+1)
plot(y,V((n+1)/2,:),'b-')%v(0.5,t)点的振幅
figure
plot(y,V)
发表于 2012-1-2 00:27 | 显示全部楼层
本帖最后由 凌绝顶 于 2012-1-2 00:41 编辑

回复 6 # 伤痕累累 的帖子

我根据你上面提供的代码将你的模型敲进Mathtype里,然后截图上传如下:
Kelvin beam.jpg
不知道我输入的对不对。我有个问题,就是你的程序中为什么会出现r0,r1和w呢?另外,请将你自己遇到的问题讲清楚一点。
发表于 2012-1-2 00:46 | 显示全部楼层
检查一下你的数值方法是不是有奇异点
 楼主| 发表于 2012-1-2 10:21 | 显示全部楼层
回复 7 # 凌绝顶 的帖子

首先要谢谢你。
r=r0+r1*sin(w*t),这是变化的轴向速度。
dr是r的一阶导数。
现在就是里面的程序问题。经过无量转化之后,matlab里,取不了原论文里那么大的步长,否则
v=zeros(n+4,m+3);%初始化     会显示超出矩阵的最大维数(当然我也借用过矩阵维数令v=sparse(1e-8,1e-8),还是不行)。我后来想,作者应该不是用matlab做的程序,应该是VC或者FROTRAN做的。
 楼主| 发表于 2012-1-2 10:22 | 显示全部楼层
回复 8 # 凌绝顶 的帖子

奇异点在计算的过程中应该怎么检查呢?
发表于 2012-1-2 12:09 | 显示全部楼层
本帖最后由 凌绝顶 于 2012-1-2 12:15 编辑

回复 9 # 伤痕累累 的帖子

应该不至于超出矩阵的最大维数的限制吧。你按照文献中离散得到的矩阵有多大啊?是不是出现了Index exceeds matrix dimensions的提示??这并不是超过了matlab允许的最大的矩阵维数的意思,你应该检查一下你的矩阵操作过程是不是有问题。
发表于 2012-1-2 12:11 | 显示全部楼层
回复 10 # 伤痕累累 的帖子

就是看看计算过程中会不会出现在数学上没有意义的点,比如分母为零啊等。
发表于 2012-1-2 12:39 | 显示全部楼层
动力学方程中vf、a、k1以及初始条件中的k,它们有什么物理意义?
 楼主| 发表于 2012-1-2 14:15 | 显示全部楼层
回复 13 # 凌绝顶 的帖子

给你的邮箱留下我发给你看看。站内信
发表于 2012-1-2 16:38 | 显示全部楼层
回复 14 # 伤痕累累 的帖子

我的邮箱见站内信
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-16 08:25 , Processed in 0.069548 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表