Я пытаюсь решить ОДУ 4-го порядка для балки на упругом основании. Я применяю эту задачу к свае с боковой нагрузкой, которая заделана в несколько слоев почвы, которые можно указать в коде. Массив c содержит параметры жесткости системы, которые мне нужно поэлементно умножить на y[0].
Однако в какой-то момент в исходном коде появляется проблема y[0] становится короче на 1 элемент, и я получаю ошибка:
ValueError: operands could not be broadcast together with shapes (40,) (39,)
Кто-нибудь знает, как это исправить? Я попробовал добавить
if c.size < y[0].size:
np.delete(c,-1)
прямо перед оператором return в fun(x,y), но безуспешно.
# ODE-Solver ---------------------------------------------------
from scipy.integrate import solve_bvp
import numpy as np
#Input ---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*
layers = [2,2,6] #m
M_Es = (10**3)*[45,20,60] #MN/m2
E_c = 33.6*10**6
F = 1000 #kN
D = 1 #m
nodes = 40
#---------------------------------------------------
#total length of the pile:
L = sum(layers) #m
#x-coordinates of the pile
x = np.linspace(0,L,nodes)
#Empty arr. for soil's compression modulus:
M_E = np.zeros(nodes)
#soil layer boundaries' depths:
depth = np.zeros(len(layers)+1)
for i in range(1,len(depth)):
depth = sum(layers[:i])
i=0
#assign M_E to the nodes of the current soil layer "j"
#while x lies between two boundaries assign the i-th value in "M_Es" array
for j in range(len(depth)-1):
while x >= sum_layers[j] and x < sum_layers[j+1]:
M_E = M_Es[j]
i += 1
#calculate the spring stiffness of the soil "k_sh" and the flexural rigidity of the pile "EI"
k_sh = 1.4*M_E/D #kN/m3
EI = E_c*0.25*np.pi*(D*0.5)**4 #kNm2
c = k_sh*D/(EI)
def fun(x, y):
return np.vstack((y[1],y[2],y[3],np.multiply(-c,y[0])))
def bc(ya, yb):
return np.array([ya[2], yb[2], ya[3]+F/EI, yb[3]])
y_a = np.zeros((4, x.size))
res_a = solve_bvp(fun, bc, x, y_a)
Подробнее здесь: https://stackoverflow.com/questions/739 ... -iteration
Scipysolve_bvp() меняет размер массива во время итерации ⇐ Python
Программы на Python
-
Anonymous
1736858901
Anonymous
Я пытаюсь решить ОДУ 4-го порядка для балки на упругом основании. Я применяю эту задачу к свае с боковой нагрузкой, которая заделана в несколько слоев почвы, которые можно указать в коде. Массив c содержит параметры жесткости системы, которые мне нужно поэлементно умножить на y[0].
Однако в какой-то момент в исходном коде появляется проблема y[0] становится короче на 1 элемент, и я получаю ошибка:
ValueError: operands could not be broadcast together with shapes (40,) (39,)
Кто-нибудь знает, как это исправить? Я попробовал добавить
if c.size < y[0].size:
np.delete(c,-1)
прямо перед оператором return в fun(x,y), но безуспешно.
# ODE-Solver ---------------------------------------------------
from scipy.integrate import solve_bvp
import numpy as np
#Input ---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*
layers = [2,2,6] #m
M_Es = (10**3)*[45,20,60] #MN/m2
E_c = 33.6*10**6
F = 1000 #kN
D = 1 #m
nodes = 40
#---------------------------------------------------
#total length of the pile:
L = sum(layers) #m
#x-coordinates of the pile
x = np.linspace(0,L,nodes)
#Empty arr. for soil's compression modulus:
M_E = np.zeros(nodes)
#soil layer boundaries' depths:
depth = np.zeros(len(layers)+1)
for i in range(1,len(depth)):
depth[i] = sum(layers[:i])
i=0
#assign M_E to the nodes of the current soil layer "j"
#while x lies between two boundaries assign the i-th value in "M_Es" array
for j in range(len(depth)-1):
while x[i] >= sum_layers[j] and x[i] < sum_layers[j+1]:
M_E[i] = M_Es[j]
i += 1
#calculate the spring stiffness of the soil "k_sh" and the flexural rigidity of the pile "EI"
k_sh = 1.4*M_E/D #kN/m3
EI = E_c*0.25*np.pi*(D*0.5)**4 #kNm2
c = k_sh*D/(EI)
def fun(x, y):
return np.vstack((y[1],y[2],y[3],np.multiply(-c,y[0])))
def bc(ya, yb):
return np.array([ya[2], yb[2], ya[3]+F/EI, yb[3]])
y_a = np.zeros((4, x.size))
res_a = solve_bvp(fun, bc, x, y_a)
Подробнее здесь: [url]https://stackoverflow.com/questions/73944494/scipy-solve-bvp-changes-array-size-during-iteration[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия