はじめに
前回、メタマテリアルの記事を紹介する際に下記のツイートをしました。
質量m、バネkが連続する無限自由度では、共振の数は無限です
では、共振周波数の最大値は?
最大値も無限と思った方は、おそらくメタマテリアルの理解に苦しみます
備忘録用にメタマテリアルや周期構造についてまとめる予定です
興味のある方の参考になると幸いですhttps://t.co/0Nhffoc7Mw
— MATLABパイセン (@MATLAB33761100) July 5, 2021
ツイートをした後に、「あれ?これって正しいのかな?」と疑心暗鬼になりました。
そこで、本日は上記ツイートを検証したいと思います。
バネマス系での検証
1原子1次元格子
図1のような質量mとバネkが連続するモデルで、自由度を増やしていって共振周波数がサチるかを検証したいと思います。(なお、片端は拘束しました。)
図1
検証結果は以下になりました。
サチってますね。片端拘束なので、ωn=√(2k/m)、fn=ω/(2π)よりも最大共振周波数が高くなっていますが、ご了承ください。
clear all close all clc dof=2.^(2:12); figure for ii1=1:length(dof) m_vec=ones(1,dof(ii1)); [M]=eval_Mmatrix(m_vec); k_vec=ones(1,dof(ii1))*10^3; [K]=eval_Kmatrix(k_vec); % [V,D]=eigs(K,M); [V,D]=eigs(K,M,dof(ii1)); % [V,D]=eigs(K,M,dof(ii1),'LM'); fn=sqrt(diag(D))/(2*pi); fnmax=max(fn); semilogx(dof(ii1),fnmax,'o') hold on end
MATLABのコード
functionファイル
function [K]=eval_Kmatrix(k_vec) K=sparse(length(k_vec),length(k_vec)); % K=zeros(length(k_vec)); for ii1=1:length(k_vec) if ii1==1 K(ii1,ii1)=k_vec(ii1); else K(ii1-1:ii1,ii1-1:ii1)=K(ii1-1:ii1,ii1-1:ii1)+[1 -1;-1 1]*k_vec(ii1); end end end
function [M]=eval_Mmatrix(m_vec) % M=sparse(length(m_vec),length(m_vec)); M=sparse( diag(m_vec) ); end
コメント