matlab有限元结构动力学分析与工程应用的源程序怎么用
基于有限元和MATLAB软件的结构动力学计算和它在工程数值仿真中的应用,包括有限元的基本方法和步骤、结构的动力特性和响应分析、单元的质量矩阵和刚度矩阵的建立及典型结构的动力学分析、工程应用和数值仿真等内容。
ADAMS与Matlab的联合仿真不是单一的输入输出,ADAMS/Controls和控制程序Matlab/Simulink通过相互传递状态变量进行数据交换。\x0d\x0a所以关联的是机械动力学模型的输入/输出变量和Adams中定义的一组状态变量,\x0d\x0a也就是说输入Adams模型中的力是变化的,动态的,然后Adams再将处理的速度加速度等反馈给Matlab进行调整,类似于一个闭环的控制过程。\x0d\x0a要说仿真的原理应该是Adams有强大的建模,仿真环境,而且能进行动力学和运动学分析,而Matlab具有强大的计算功能,极高的编程效率及模块化的建模方式,把这两个软件结合起来仿真,可以发挥二者的优势,实现机电一体化的联合仿真。
1、数据
x=[。。。]y=[。。。]
2、自定义模型函数(如动力学方程的一般表达式)
func=@(x) 函数表达式
3、初定x0的初值,如x0=[0,0]
4、对于拟合函数是非线性函数,一般用lsqcurvefit()或 nlinfit()函数来拟合其方程的系数,对于拟合函数是线性函数,一般用regress()函数来拟合其方程的系数
5、当原数据与拟合数据的相关系数R²≈1时,你可以认为得到的拟合方程是合理的。
如你具体的数据和动力学的一般方程,最好能贴出来,可以帮你分析。也可以通过私信交流。
clcclear allclose all
t = linspace(0, 2*pi)
y1 = cos(t)
y2 = abs(fft(y1))
figure
subplot(1, 2, 1)plot(t, y1)title('时域曲线')
subplot(1, 2, 2)plot(t, y2)title('频域曲线')
R为rectangle(矩形),R5(N)就是为长度是5的矩形序列,当N=0,1,2,3,4时,R5(N)=1,N为其他情况是R5(N)=0
数字信号处理,英文:Digital Signal Processing,缩写为DSP,是面向电子信息学科的专业基础课,它的基本概念、基本分析方法已经渗透到了信息与通信工程,电路与系统,集成电路工程,生物医学工程,物理电子学,导航、制导与控制,电磁场与微波技术,水声工程,电气工程,动力工程,航空工程,环境工程等领域。
数字信号处理问题无处不在,信息科学已渗透到所有现代自然科学和社会科学领域。学生应熟练地掌握本课程所讲述的基本概念、基本理论和基本分析方法,并利用这些经典理论分析、解释和计算信号、系统及其相互之间约束关系的问题。
信号(signal)是信息的物理体现形式,或是传递信息的函数,而信息则是信号的具体内容。
模拟信号(analog signal):指时间连续、幅度连续的信号。
数字信号(digital signal):时间和幅度上都是离散(量化)的信号。
数字信号可用一序列的数表示,而每个数又可表示为二制码的形式,适合计算机处理。
一维(1-D)信号: 一个自变量的函数。
二维(2-D)信号: 两个自变量的函数。
多维(M-D)信号: 多个自变量的函数。
系统:处理信号的物理设备。或者说,凡是能将信号加以变换以达到人们要求的各种设备。模拟系统与数字系统。
信号处理的内容:滤波、变换、检测、谱分析、估计、压缩、识别等一系列的加工处理。
多数科学和工程中遇到的是模拟信号。以前都是研究模拟信号处理的理论和实现。
模拟信号处理缺点:难以做到高精度,受环境影响较大,可靠性差,且不灵活等。
数字系统的优点:体积小、功耗低、精度高、可靠性高、灵活性大、易于大规模集成、可进行二维与多维处理
随着大规模集成电路以及数字计算机的飞速发展,加之从60年代末以来数字信号处理理论和技术的成熟和完善,用数字方法来处理信号,即数字信号处理,已逐渐取代模拟信号处理。
随着信息时代、数字世界的到来,数字信号处理已成为一门极其重要的学科和技术领域。
说几点看法,供参考:
1、楼主最好把相关条件说的明确一点,包括:
(1)问题的规模:系统阵A的阶次,系统的输入、输出个数(不可能也都是几千上万吧)?
(2)楼主用的MATLAB版本以及操作系统(尤其是否64位?),硬件配置如何(尤其内存)?
2、楼上有人建议自己编,个人认为不是很可行。在涉及矩阵基础算法方面,个人编写的代码无论效率还是可靠性,恐怕都会差很远。
3、问题的规模影响肯定很大。例如,矩阵A阶次大10倍,需要的内存就会大100倍。一个10000x10000的矩阵就需要大约800M内存,而描述一个系统需要多个矩阵,计算过程中存储中间变量也需要额外的内存。除了存储需求,计算时间也随着问题规模的增大而大幅度增加。你确定自己电脑的配置足以应付那么大规模的问题吗?
4、就我在自己电脑上实测的情况看,取系统阵A为500x500,2输入,3输出(矩阵均为随机生成),计算并没有问题。取n=1000时,转换为tf模型失败,但转换为zpk模型却可以成功:
>> tic,n=500p=2q=3A=rand(n,n)B=rand(n,p)C=rand(q,n)D=0sys=ss(A,B,C,D)systf=tf(sys)tocelapsed_time =
29.2500
>> tic,n=1000p=2q=3A=rand(n,n)B=rand(n,p)C=rand(q,n)D=0sys=ss(A,B,C,D)systf=tf(sys)toc
??? Error using ==> ss/tf
Overflow in conversion to transfer function (TF) form.
>> tic,n=1000p=2q=3A=rand(n,n)B=rand(n,p)C=rand(q,n)D=0sys=ss(A,B,C,D)systf=zpk(sys)toc
elapsed_time =
322.0830
这也许不能说明什么问题,但可供参考。
你好
如果你想求时域内的结果推荐用状态空间的方法求解,当然也可以采用龙哥库塔法求解。
如果是频域,则需要通过傅里叶变换,则需要有这方面的基础知识。
用状态空间方法求解时域响应,请看实例文章“基于Matlab_Simulink的多自由度机械振动系统仿真”,百度一下就能下载找到,介绍很详细。
例如这个例子,如下图:
启动Matlab/Simulink之后,新建一模型文件打开一空白的编辑窗口.采用Continuous库中的State—Space模块进行建模,选择信号源模块组中的正弦信号模块为输入信号。搭建模型如下:
状态方程系数ABCD参数如下:
m1=100m2=100m3=100m4=100
k1=50k2=50k3=50k4=50
C1=100C2=150C3=100C4=150
M=[m1 0 0 00 m2 0 00 0 m3 00 0 0 m4]
C=[C1+C2 -C2 0 0-C2 C2+C3 -C3 00 -C3 C3+C4 -C40 0 -C4 C4]
K=[k1+k2 -k2 0 0-k2 k2+k3 -k3 00 -k3 k3+k4 -k40 0 -k4 k4]
A=cat(1,cat(2,zeros(4,4),eye(4)),cat(2,-inv(M)*K,-inv(M)*C))
G=eye(4)B=cat(1,zeros(4,4),-inv(M)*G)
C0=cat(2,eye(4),zeros(4,4))D=zeros(4,4)
双击正弦输入模块,在弹出的对话框中输入:振幅设置为向量[10 15 20 25],输入频率为10,其余采用默认值.双击State—space模块,设置参数:A为A、B为B、C为Co、D为D.初始条件设为0.
仿真就可以得到x1至x4
希望对你有帮助