error in Modal Analysis code from MATLAB
2 次查看(过去 30 天)
显示 更早的评论
Hi everyone,
I found this MATLAB code in their directory to help me get the frequencies and modes of a MDOF structure. I've inputted all my values into the function but it gives me an error for NM and get an error that says local function must be different than script name. Has anyone used this script before and I'm not sure what I'm doing wrong. Below is the code I'm using:
%% Newmark Function; NM
clear all
clc
load('SineSweep.mat')
g=386.4;
M=[4.3 0 0;0 4.3 0; 0 0 4.3];
K=[4494.6375 -2247.32 0;-2247.32 4494.6375 -2247.32; 0 -2247.32 2247.32];
F=g*M;
ft=AccTopFSW*g;
zet=0;
[phi,omega2]=eig(K,M);
function [disp,EF]=NM(n,nom,dt,F,ft,M,K,zet,omega2,phi)
%% By Newmark Linear Method
Mn=phi'*M*phi;
Kn=phi'*K*phi;
Ln=zeros(nom);
for i=1:nom
Ln(i,i)=(phi(:,i))'*F/Mn(i,i); % Load Contribution Facor
end
u=zeros(length(ft),nom);
v=zeros(length(ft),nom);
ac=zeros(length(ft),nom);
ft(end+1)=0;
for j=1:nom % equation of motion(Newmark linear method)
m=Mn(j,j);
k=Kn(j,j);
c=2*m*(omega2(j,j))^.5*zet/100;
K=k+3*c/dt+6*m/(dt)^2;
a=6*m/dt+3*c;
b=3*m+dt*c/2;
for i=1:length(u)-1
u(1,j)=0; %initial conditions
v(1,j)=0;
ac(1,j)=0;
df=Ln(j,j)*Mn(j,j)*(ft(i+1)-ft(i))+a*v(i,j)+b*ac(i,j); % delta Force
du=df/K;
dv=3*du/dt-3*v(i,j)-dt*ac(i,j)/2;
dac=6*(du-dt*v(i,j))/(dt)^2-3*ac(i,j);
u(i+1,j)=u(i,j)+du;
v(i+1,j)=v(i,j)+dv;
ac(i+1,j)=ac(i,j)+dac;
end
end
ft(end)=[];
%% Combine Modes Then Develop Story Responses
disp=zeros(size(u,1),n); % Story displacement
acc=zeros(size(ac,1),n); % story acceleration
EF=zeros(size(u,1),n); % Story force
for st=1:n % st is story
for j=1:nom % j is mode
disp2=zeros(size(u,1),n);
accel=zeros(size(ac,1),n);
EF1=zeros(size(u,1),n);
disp2(:,st)=phi(st,j)*u(:,j); % Chopra, pp 438; Disp=phi*U
accel(:,st)=phi(st,j)*ac(:,j);
EF1(:,st)=omega2(j,j)*M(st,st)*phi(st,j)*u(:,j); % Chopra, pp 438
disp=disp2+disp; % Displacement of Stories
acc=accel+acc; % Acceleration of Stories
EF=EF1+EF; % Seismic Force of Stories
end
end
end
I'm loading a Sinesweep acceleration data and I;ve inputted most of the values. n=3, nom=3, dt=0.002.
Please and Thank you.
0 个评论
回答(1 个)
Manoj Mirge
2023-5-17
In MATLAB scripts the names of local functions and name of script in which local functions are defined must be different. If you have script named “main.mlx” then you cannot define local function named “main” in that script.
It seems like you have script named “NM” and you have defined local function named “NM” in that script and that is causing the error.
You can either change the function name or script name depending upon the use case.
You can read more about local function in below attached link:
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Signal Generation and Preprocessing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!