Why doesn't it work? - Different size between Left side and Right side
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
% 변수 정의
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 Kommentare
Antworten (2)
KALYAN ACHARJYA
am 4 Jun. 2023
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
am 4 Jun. 2023
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 Kommentare
Siehe auch
Kategorien
Mehr zu Data Types finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!