본문 바로 가기

학습 Q&A

강의 내용 궁금증! 교수님이 직접 답변 드립니다.

  • 홈
  • 교수소개
  • 공학계열
  • 권준표 교수님
  • 학습 Q&A

Q&A 메뉴.png

※ 유의사항
강의에 나오지 않는 내용에 대한 풀이나 해설은 답변을 드릴 수가 없습니다.
학습과 무관한 내용 및 비방/욕설 등 게시판 성격과 무관한 내용은 사전 고지없이 삭제됩니다.
답변 완료된 게시글은 수정 및 삭제 불가합니다.

kwonjunpyo_03.png

게시판 글보기
제목 답변완료 22~23강 matlab
질문유형 강좌내용 교수님 권준표
과목 진동학 강좌명
작성자 정*호 (r******0) 등록일 2021-07-25 15:46
첨부파일

코드는 교수님 강의자료에 첨부된 코드를 참고했습니다.

 

close ALL

clear

clc

%% Mass

m=[4 4 4];

k=[4 4 4];

W=[1 0];

M=diag(m);

x0=[1;0;0];

v0=[0;0;0];

t=0:0.01:10;

%% Global Stiffness Matrix

elem=size(k,2);

nodes=elem+1;

K=zeros(nodes);

% Connectivity Matrix

for i=1:elem

 con(i,1:2)=[i i+1];

end

for i=1:elem

 ke=k(i)*[ 1 -1;

 -1 1];

 node1=con(i,1);

 node2=con(i,2);

 K(node1,node1)=K(node1,node1)+ke(1,1);

 K(node1,node2)=K(node1,node2)+ke(1,2);

 K(node2,node1)=K(node2,node1)+ke(2,1);

 K(node2,node2)=K(node2,node2)+ke(2,2);

end

if W(1)==1 && W(2)==0

 K=K(2:end,2:end);

elseif W(1)==0 && W(2)==1

 K=K(1:end-1,1:end-1);

elseif W(1)==1 && W(2)==1

 K=K(2:end-1,2:end-1);

else

 K=K;

end

%% Calcaultions

L=sqrt(M);

Kmn=inv(L)*K*inv(L);

[v,lamda]=eig(Kmn);

P=v; % check P`*P=I

S=inv(L)*P;

r0=inv(S)*x0;

rdot0=inv(S)*v0;

w=diag(sqrt(lamda));

for i=1:size(m,2)

 r(i,:)=sqrt(r0(i)^2+rdot0(i)^2/w(i)^2)*cos(w(i)*t); % atan값이 pi/2이므로 cos(w(i)*t)로 입력

end

x=S*r;

%% Plot

figure(1)

plot(t,x(1,:),`linewidth`,2)

hold on

plot(t,x(2,:),`linewidth`,1)

plot(t,x(3,:),`linewidth`,1)

legend_entries={`x1(t)`,`x2(t)`,`x3(t)`};

legend(legend_entries,``,`northeast`);

grid on

xlabel(`Time (s)`)

ylabel(`Displacement (m)`)

title(`Three-Degree-of-Freedom Model (Undamped)`)  

 

49번째 줄 r(i,:)=sqrt(r0(i)^2+rdot0(i)^2/w(i)^2)*sin(w(i)*t+atan(w(i)*r0(i)/rdot0(i))); 에서

r(i,:)=sqrt(r0(i)^2+rdot0(i)^2/w(i)^2)*cos(w(i)*t); 로 바꿔서 진행했습니다.

그 결과 산출된 그래프도 같이 첨부했습니다.

 

데스크탑으로 돌려도 원하는 그래프가 나오지 않아서 sqrt(r0(i)^2+rdot0(i)^2/w(i)^2) 를 r0(i)로 바꿨더니 올바른 답이 나왔습니다.

그래서 이 부분에 오류가 있다고 생각했습니다.

 

제가 잘못 생각한 부분이 있으면 어디서 생긴 문제인지 알려주세요.

 

감사합니다.  

답변 완료된 질문과 답변은 수정 및 삭제가 불가합니다.

댓글
0
정*호

안녕하세요.

제가 확인해본 결과,
우리가 계산할 때는
atan = 1/pi 가 되어서
위상차에 의해

sin(w(i)*t+atan(w(i)*r0(i)/rdot0(i))) = cos(w(i)*t)
이겠지만,

실제 매트랩에서는 아래와 같이
부호가 반대로 계산되는 것 같습니다.

아마 MATLAB 계산 default가
-1/pi 또는 1/pi 중에 하나로 되어서
부호가 반대로 나타나는 것 같습니다.

코드 자체에는 큰 문제가 없이
잘 구현되는 것 같습니다.

좋은 질문해주셔서 감사합니다.

Screen-Shot-2021-08-07-at-4.48.19-PM.png 

 

 

완성된 plot

Vibration.jpg

 

 

  • 2021-08-08
  • 2024-12-12 수정