Effacer les filtres
Effacer les filtres

Problem with creating matrix

1 vue (au cours des 30 derniers jours)
Maria Sarcos
Maria Sarcos le 27 Nov 2020
Commenté : dpb le 27 Nov 2020
I'm trying to create a 36x36 matrix where each column has two 18x1 vectors stacked. The vectors correspond to deflections in both the y and z direction and were calculated by setting the loads in the y direction (1st potition) as a 1x18 vector where the first value is 1 and others zero ([1 0 0 0 0 ..]), the loads in the z direction were set all to zero with the same vector length.
For the second column of the matrix, the deflection in the y and z direction must be calculated by setting the loads in the z direction(still 1st position) as [0 1 0 0 0 ..] with the same 1x18 length, and the loads in the y direction were all zero.
The deflections in y and z are inside a for loop with 18 positions.
For the third column of the matrix, I need the deflections in y and z but setting the loads in the y direction(now 2nd position) to [0 0 1 0 0 ...] and the loads in z as zero. The forth column would correspond to the loads in the z directions as [0 0 0 1 0 0 ..] and loads in y zero.
Is there a way I could create this matrix with a for loop that changes where the value of "1" in the vectors for the loads is located? I'm trying to solve a vibrations problem involving a flexibility matrix
  5 commentaires
Maria Sarcos
Maria Sarcos le 27 Nov 2020
%FIRST COLUM OF MATRIX, WHERE UX1 AND UY1 ARE COMBINED
pz = zeros(length(r_vec),1);
p1y = zeros(length(r_vec),1);
p1y(1) = 1;
for i = N:-1:2
Ty1(i-1) = Ty1(i) + 0.5*(p1y(i-1) + p1y(i)*(x(i) - x(i-1)));
Tz1(i-1) = Tz1(i) + 0.5*(pz(i-1) + pz(i)*(x(i) - x(i-1)));
My1(i-1) = My1(i) - Tz1(i)*(x(i) - x(i-1)) - (((1/6)*(pz(i-1))) + (((1/3)*(pz(i))))*((x(i) - x(i-1))^2));
Mz1(i-1) = Mz1(i) + Ty1(i)*(x(i) - x(i-1)) + (((1/6)*(p1y(i-1))) + (((1/3)*(p1y(i))))*((x(i) - x(i-1))^2));
end
for i = 1:N
M11(i) = (My1(i)*cosd(twist_vec(i) + pitch)) - (Mz1(i)*sind(twist_vec(i) + pitch));
M21(i) = (My1(i)*sind(twist_vec(i) + pitch)) + (Mz1(i)*cosd(twist_vec(i) + pitch));
k11(i) = M11(i)/EI1(i);
k21(i) = M21(i)/EI2(i);
kz1(i) = (-k11(i)*sind(twist_vec(i) + pitch)) + (k21(i)*cosd(twist_vec(i) + pitch));
ky1(i) = (k11(i)*cosd(twist_vec(i) + pitch)) + (k21(i)*sind(twist_vec(i) + pitch));
end
for i = 1:N-1
thetay1(i+1) = thetay1(i) + (0.5*(ky1(i+1) + ky1(i))*(x(i+1) - x(i)));
thetaz1(i+1) = thetaz1(i) + (0.5*(kz1(i+1) + kz1(i))*(x(i+1) - x(i)));
uy1(i+1) = uy1(i) + (thetaz1(i)*(x(i+1) - x(i))) + ((1/6*kz1(i+1)) + (1/3*kz1(i)))*(x(i+1) - x(i))^2;
uz1(i+1) = uz1(i) - (thetay1(i)*(x(i+1) - x(i))) - ((1/6*ky1(i+1)) + (1/3*ky1(i)))*(x(i+1) - x(i))^2;
end
%SECOND COLUMN OF MATRIX
p1z = zeros(length(r_vec),1);
p1z(2) = 1;
py = zeros(length(r_vec),1);
%SAME LOOPS TO GET TO UY AND UZ
I would like to do this without setting the values for the pz and py vectors every time
dpb
dpb le 27 Nov 2020
What's so hard to just show a small example???
Is the following the pattern you for a 4-element case instead of 18?
M=[1 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1];
?
It's two identity matrices except with alternate 0 columns in the two halves?

Connectez-vous pour commenter.

Réponses (0)

Catégories

En savoir plus sur Startup and Shutdown dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by