Я пишу программу для моего друга, который в настоящее время изучает авиационную технику. Я пытаюсь проверить, работает ли математика, которую я реализовал. Для тех, кто знает, я пытаюсь вычислить расхождение (я думаю, что я не инженер, и я не собираюсь притворяться, что я).
Он отправил мне ссылку переполнения стека, чтобы узнать, как он считает, что это нужно сделать. (Нить можно найти здесь . Его версия не работает для меня, поскольку выдает ошибку Numpy, как показано ниже:
numpy.core._internal.AxisError: axis 1 is out of bounds for array of
dimension 1
Теперь я попробовал другой метод, который дает мне другую ошибку, как показано ниже:
ValueError: operands could not be broadcast together with shapes (60,58)
(60,59)
Этот метод выдает мне ошибку выше, и я не совсем уверен, как ее исправить. Я поместил код, который дает мне вышеуказанную ошибку.
velocity = np.diff(c_flow)/np.diff(zex)
ucom = velocity.real
vcom = -(velocity.imag)
deltau = np.divide((np.diff(ucom)),(np.diff(x)))
deltav = np.divide((np.diff(vcom)),np.diff(y))
print(deltau + deltav)
Примечание: C_flow
определено ранее в программе и является комплексным потенциалом. zex
также определен ранее как ранняя форма комплексной переменной. x
и y
- две координатные матрицы из координатных векторов.
Ожидаемые результаты от оператора print должны быть равны нулю или значению, которое очень близко к нулю. (Я не совсем уверен, какое значение должно быть, но, как я уже сказал, я не инженер)
Заранее спасибо
EDIT:
После следования совету BenT я использовал np.gradient и np.sum, но это добавляло ось в неправильном направлении, поэтому, чтобы противодействовать этому, я разделил две функции, как показано ниже:
velocity = np.diff(c_flow)/np.diff(z)
grad = (np.gradient(velocity))
divergence = np.sum(grad, axis=0)
print(np.average(divergence))
print(np.average(velocity))