Написание скрипта, который рассчитывает изгибающий момент консольной балки в Matlab - PullRequest
1 голос
/ 22 апреля 2020

У меня есть массив

ssmat= [   10   9   7   6   3   2   1   0;
            0  20   5   0   0  15  10   0;
            0  10   0   0  15   0   0   0;
           10   0  10  10  10   0   0   0]

ssmatl = логический (ssmat)

ssmatl=[    1   1   1   1   1   1   1   0;
            0   1   1   0   0   1   1   0;
            0   1   0   0   1   0   0   0;
            1   0   1   1   1   0   0   0] 

Первая строка ssmat указывает расстояние от источника. И четвертая строка, с которой в настоящее время ведется работа, сообщает размер равномерно распределенной нагрузки.

Например: если смотреть слева направо, так как ssmat (4,1) ~ = 0, это означает, что ssmat ( 1,1) - это точка, в которой начинается нагрузка, а ближайшая ненулевая величина в четвертом ряду - это место, где она заканчивается (ssmat (4,3)), фактическим значением является величина нагрузки (10). В этом случае есть две равномерно распределенные нагрузки от ssmat (4,1) до ssmat (4,3) и от ssmat (4,4) до ssmat (4,5).

См. Изображение

Я пытаюсь вычислить изгибающий момент, вызванный этими силами в разных частях балки. В этом случае есть 14 точек (Pp = 14), Pp = 2 * (длина (ssmat) -2).

Точки расположены так:

см. Изображение

см. Изображение

Изгибающий момент в точке P рассчитывается следующим образом:

см. Схему расчета

M = величина силы * l * (l / 2 + d)

В точке P, где имеется несколько нагрузок:

см. Схему расчета

M = величина силы1 * l1 * (l1 / 2 + d1) + величина силы2 * l2 * (l2 / 2 + d2).

Если точка P было между началом и концом нагрузки:

см. схему расчета

M = величина силы1 * l1 * (l1 / 2) + величина force2 * l2 * (l2 / 2 + d2).

Мне удалось написать скрипт, который работает до пятой точки, после чего он становится сложнее и в настоящее время просто разваливается. Любые советы и предложения будут с благодарностью.

Надеюсь, мне удалось четко объяснить ситуацию. Не стесняйтесь задавать любые вопросы.

Ссылка на MatLab ответы на пост с изображениями

if Pp==14
for i=1
        if sum(ssmatl(4,1:2))==0
            mg1=0;
            mg2=0;
            mg3=0;
        elseif sum(ssmatl(4,1:2))==1 && ssmat(4,i)==0
            mg1=0;
            mg2=0;
            mg3=mg2;
        elseif sum(ssmatl(4,1:2))==1 && ssmat(4,i)~=0
            mg1=0;
            mg2=ssmat(4,1)*abs(ssmat(1,2)-ssmat(1,1))*abs((ssmat(1,2)-ssmat(1,1))/2);
            mg3=mg2;
        elseif sum(ssmatl(4,1:2))==2
            mg1=0;
            mg2=ssmat(4,1)*abs(ssmat(1,2)-ssmat(1,1))*abs((ssmat(1,2)-ssmat(1,1))/2);
            mg3=mg2;
        end
end
for i=3:-1:1
    for j=2:-1:1
        if sum(ssmatl(4,1:3))==0
            mg4=0;
            mg5=0;
        elseif sum(ssmatl(4,1:3))==1 && ssmat(4,i)~=0
            mg4=ssmat(4,i)*abs(ssmat(1,3)-ssmat(1,i))*abs((ssmat(1,3)-ssmat(1,i))/2);
            mg5=mg4;
        elseif sum(ssmatl(4,1:3))==2 && ssmat(4,i)==ssmat(4,j) && i~=j
            mg4=ssmat(4,i)*abs(ssmat(1,i)-ssmat(1,j))*abs(((ssmat(1,i)-ssmat(1,j))/2)+(ssmat(1,3)-ssmat(1,i)))
            mg5=mg4;
        elseif sum(ssmatl(4,1:3))==3
            mg4=ssmat(4,1)*abs(ssmat(1,2)-ssmat(1,1))*abs(((ssmat(1,2)-ssmat(1,1))/2)+(ssmat(1,3)-ssmat(1,2)));
            mg5=mg4;
        end
    end
end
for i=4:-1:1
    for j=3:-1:1
        for k=2:-1:1
            if sum(ssmatl(4,1:4))==0
                mg6=0;
                mg7=mg6;
            elseif sum(ssmatl(4,1:4))==1 && ssmat(4,i)~=0
                mg6=ssmat(4,i)*abs(ssmat(1,4)-ssmat(1,i))*abs((ssmat(1,4)-ssmat(1,i))/2);
                mg7=mg6;
            elseif sum(ssmatl(4,1:4))==2 && ssmat(4,i)==ssmat(4,j) && i~=j
                mg6=ssmat(4,i)*abs(ssmat(1,i)-ssmat(1,j))*abs(((ssmat(1,i)-ssmat(1,j))/2)+(ssmat(1,4)-ssmat(1,i)));
                mg7=mg6;
            elseif sum(ssmatl(4,1:4))==3 && ssmat(4,4)==0
                mg6=(ssmat(4,1)*abs(ssmat(1,2)-ssmat(1,1))*abs(((ssmat(1,2)-ssmat(1,1))/2)+(ssmat(1,4)-ssmat(1,2))))+(ssmat(4,3)*abs(ssmat(1,4)-ssmat(1,3))*abs(((ssmat(1,4)-ssmat(1,3))/2)));
                mg7=mg6;
            elseif sum(ssmatl(4,1:4))==3 && ssmat(4,j)==ssmat(4,k) && j~=k
                mg6=ssmat(4,j)*abs(ssmat(1,j)-ssmat(1,k))*abs(((ssmat(1,j)-ssmat(1,k))/2)+(ssmat(1,4)-ssmat(1,j)));
                mg7=mg6;
            end
        end
    end
end
for i=5:-1:1
    for j=4:-1:1
        for k=1:4
            for l=2:-1:1
                if sum(ssmatl(4,1:5))==0
                    mg8=0;
                    mg9=mg8;
                elseif sum(ssmatl(4,1:5))==1 && ssmat(4,i)~=0
                    mg8=ssmat(4,i)*abs(ssmat(1,5)-ssmat(1,i))*abs((ssmat(1,5)-ssmat(1,i))/2);
                    mg9=mg8;
                elseif sum(ssmatl(4,1:5))==2 && ssmat(4,i)==ssmat(4,j) && i~=j
                    mg8=ssmat(4,i)*abs(ssmat(1,i)-ssmat(1,j))*abs(((ssmat(1,i)-ssmat(1,j))/2)+(ssmat(1,4)-ssmat(1,i)));
                    mg9=mg8;
                elseif sum(ssmatl(4,1:5))==3 && ssmat(4,
                    mg8=(ssmat(4,1)*abs(ssmat(1,2)-ssmat(1,1))*abs(((ssmat(1,2)-ssmat(1,1))/2)+(ssmat(1,4)-ssmat(1,2))))+(ssmat(4,3)*abs(ssmat(1,4)-ssmat(1,3))*abs(((ssmat(1,4)-ssmat(1,3))/2)));
                    mg9=mg8;
                elseif sum(ssmatl(4,1:4))==3 && ssmat(4,j)==ssmat(4,k) && j~=k
                    mg8=ssmat(4,j)*abs(ssmat(1,j)-ssmat(1,k))*abs(((ssmat(1,j)-ssmat(1,k))/2)+(ssmat(1,4)-ssmat(1,j)));
                    mg9=mg8;
...