Why doesn't it work? - Different size between Left side and Right side
조회 수: 2 (최근 30일)
이전 댓글 표시
% 변수 정의
m = [1100, 200, 70, 17, 7, 1624]; % 질량
k = [25, 400, 6, 330, 290, 25]; % 강성
% 감쇠 계수
alpha = 0.01;
beta = 0.01;
% 초기 조건
x0 = [0; 0; 0; 0; 0; 0]; % 초기 변위 (0으로 설정)
v0 = [10; 10; 10; 10; 10; 10]; % 초기 속도 (10m/s로 설정)
% 감쇠 행렬
C = alpha * diag(m) + beta * diag(k);
% 강제진동 방정식의 특수해 함수
F = @(t) sin(2*pi*10*t); % 예시로 sin(2*pi*10*t) 가진력 사용
% 시간 범위 정의
t = 0:0.001:10; % 0부터 10까지 0.1 단위로 증가하는 시간 벡터
% 모드감쇠 비례감쇠 계수
zeta = [alpha/m(1), alpha/m(2), alpha/m(3), alpha/m(4), alpha/m(5), alpha/m(6)];
% 모드합성법을 위한 모드해 계산
[V, D] = eig(k - 1i*C);
% 각 모드해의 고유진동수와 진동형상 계산
omega = sqrt(diag(D));
phi = V;
% 중첩된 모드해들의 합을 위한 초기화
x_p = zeros(size(phi, 2), length(t));
for i = 1:length(t)
for j = 1:size(phi, 2)
x_p(j, i) = phi(:, j)' * F(t(i)) / ((omega(j)^2) - (2*zeta(j)*omega(j)*1i) - (omega(j)^2));
end
end
% 전체 해 계산 (중첩된 모드해들의 합)
x = real(phi * x_p.' + exp(-zeta(1)*omega(1)*t) * (phi(:, 1)'*x0 + phi(:, 1)'*v0/(omega(1)*sqrt(1 - zeta(1)^2))));
% 결과 그래프 출력
figure;
plot(t, x); % 시간 응답 그래프 출력
xlabel('Time');
ylabel('Displacement');
title('Response of the system');
% At the 37th line, They don't work
댓글 수: 0
답변 (2개)
KALYAN ACHARJYA
2023년 6월 4일
phi(:, j)' * F(t(i)) / ((omega(j)^2) - (2*zeta(j)*omega(j)*1i) - (omega(j)^2));
The result of the above statement is vector, not scalar (single digit), example
>> phi(:, j)' * F(t(i)) / ((omega(j)^2) - (2*zeta(j)*omega(j)*1i) - (omega(j)^2))
ans =
1.0e-10 *
0.0269 - 0.0270i 0.0773 - 0.0774i -0.0894 + 0.0895i 0.7741 - 0.7753i -0.9901 + 0.9901i 0.0163 - 0.0163i
To store vector data, you need to consider the cell array instead of the normal array, please see the description of the cell array here with curly bracket { }
The later step of the code will change, if you consider working with a cell array (specifically *operation).
x_p = cell(size(phi, 2), length(t));
for i = 1:length(t)
for j = 1:size(phi, 2)
disp('kalyan')
x_p{j, i} = phi(:, j)' * F(t(i)) / ((omega(j)^2) - (2*zeta(j)*omega(j)*1i) - (omega(j)^2));
end
Hope it helps!
Atsushi Ueno
2023년 6월 4일
It's just like below.
a = 0;
a(1,1) = [1 2 3 4 5 6]
You should make left-hand variable to ...
- 3 dimension array
- cell array
- other type like struct
댓글 수: 0
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!