В настоящее время я занимаюсь практикой проблем с MatLab, и я застрял в этой проблеме, которая включает в себя мост фермы Он просит меня прибавить вес в грузовике, припаркованном в узле 9, с шагом 0,1, начиная с веса w9 = 13000 и увеличивая до некоторого большого веса, пока мост не рухнет. Каждый луч может выдержать 20000 ньютонов силы (положительного или отрицательного). Следовательно, мост рухнет, когда какая-либо одна сила будет больше, чем 20000 по величине, или эквивалентно, когда
максимум абсолютных значений всех сил больше или равен 20000.
Я использую цикл for для перебора весов W9 = 13000.0, 13000.1, 13000.2,. , , и так далее, чтобы решить
Система Ax = b многократно для сил внутри моста, пока сила, по крайней мере, на одной из балок не превысит точку разрыва. Я использую разложение LU для эффективного решения системы.
A = [-0.5 1 0 0 0 0 0 0 0 0.5 0 0 0 0 0;
-sqrt(3)/2 0 0 0 0 0 0 0 0 -sqrt(3)/2 0 0 0 0 0;
0 -1 1 0 0 0 0 0 0 0 -0.5 0.5 0 0 0;
0 0 0 0 0 0 0 0 0 0 -sqrt(3)/2 -sqrt(3)/2 0 0 0;
0 0 -1 1 0 0 0 0 0 0 0 0 -0.5 0.5 0;
0 0 0 0 0 0 0 0 0 0 0 0 -sqrt(3)/2 -sqrt(3)/2 0;
0 0 0 -1 0.5 0 0 0 0 0 0 0 0 0 -0.5;
0 0 0 0 -sqrt(3)/2 0 0 0 0 0 0 0 0 0 -sqrt(3)/2;
0 0 0 0 -0.5 -1 0 0 0 0 0 0 0 0 -0.5;
0 0 0 0 0 1 -1 0 0 0 0 0 0 -0.5 0.5;
0 0 0 0 0 0 0 0 0 0 0 0 0 sqrt(3)/2 sqrt(3)/2;
0 0 0 0 0 0 1 -1 0 0 0 -0.5 0.5 0 0;
0 0 0 0 0 0 0 0 0 0 0 sqrt(3)/2 sqrt(3)/2 0 0;
0 0 0 0 0 0 0 1 -1 -0.5 0.5 0 0 0 0;
0 0 0 0 0 0 0 0 0 sqrt(3)/2 sqrt(3)/2 0 0 0 0];
w7 = 800;
w8 = 900;
w9 = 13000;
W = [0; 0; 0; 0; 0; 0; 0; 0; 0; 0; w7; 0; w8; 0; w9];
for kk = w9:0.1:20000
for jj = 1:15
[L,U,P] = lu(A);
Y = L\(P*W);
X = U\Y;
if abs(X(jj,1)) > 20000
break
end
end
end
save('A.dat','w9','-ascii')
save('B.dat','X','-ascii')
Когда я запустил его, w9 вообще не изменился, и у меня получился тот же вектор X. Я ожидал, что он будет повторяться некоторое время, прежде чем цикл действительно прервется, но в итоге он этого не сделает. Может кто-нибудь помочь мне решить эту проблему?