Это мой первый вопрос по stackoverflow. Извините, если это немного неуклюже.
Я пытаюсь решить статическое c равновесие, описывающее луч в слоистой почве. С точки зрения сил, действующих на балку, существует некоторая внешняя сила, и есть реакция почвы на эту силу. Действие и реакция, очевидно, должны быть сбалансированы. Реакция - сумма сил от почвы, объединенной по различным слоям. Почва реагирует нелинейно в зависимости от смещения. По сути, это конкретное равновесие является скаляром, потому что это просто сумма реакции = действия.
С другой стороны, внутренние силы внутри балки также должны быть сбалансированы с локальной силой, действующей на рассматриваемый элемент балки , Допустим, у нас есть 40 таких элементов. Итак, проблема, с которой я сталкиваюсь в двух словах, заключается в следующем:
Мне нужно найти root от F1 (x1, x2, ... x40), где x1, x2 ... x40 описывают смещение кучи в почве. Я передаю и исходное предположение о смещении, и Fsolve возвращается с вектором длиной 40, который дает F1 = [0,0 ... 0]. Таким образом, это в основном уравновешивает внутренние силы с локальной силой на балке (фактически кривизна с моментом).
Проблема в том, что я не могу добавить дополнительное ограничение, которое является глобальным равновесием, которое я описал выше, потому что оно нарушает условие в fsolve, что длина выходного вектора должна равняться длине входного вектора , Я не могу добавить такое ограничение в Fsolve. Я также пошел по пути оптимизации, где вы можете добавлять ограничения, но это не работает, потому что оптимизирует скаляр и не работает с векторными корнями.
Возможно, я просто пропустил что-то глупое, но я ' мы напрасно стекались через стекпоток несколько дней. Я, вероятно, могу решить это с помощью решателей дифференциальных уравнений, но я не хочу go таким образом по разным причинам, если я могу избежать этого. Что-нибудь, чтобы дать мне новый угол, помогло бы! Абсолютно новый для python, поэтому я очень ценю все полезные решения, которые я прочитал до сих пор, даже если это не совсем помогло мне.