условия скачка ударной волны - PullRequest
0 голосов
/ 04 июня 2018
from scipy.optimize import fsolve

x1=input("P1")
y1=input("rho1")
v1=input("velocity1")


def eqn(x):                              #three jump condition equations

    f1=(x[1]*x[2])-(y1*v1)
    f2=x[0]+(0.5*(y1**2)*(v1**2)/x[1])-x1-(0.5*y1*v1*v1)
    f3=(0.5*(y1**2)*(v1**2)/(x[1]**2))+(2.5*(x[0]/x[1]))-(0.5*v1*v1)-(2.5*(x1/y1))

    return(f1,f2,f3)

y=[10,11,12]         #initial guess
print fsolve(eqn,y)

`Я должен решить три нелинейные системы уравнений, также называемые числовыми условиями скачка в ударных волнах.Меня попросили сделать это с помощью scipy.optimize, где мы берем три известных параметра и используем их, чтобы найти остальные три параметра.Однако я не получаю правильный результат, и он сильно варьируется в зависимости от начального значения догадки.

Ниже приведены отношения.Я беру значения P1, rho1 и V1 от пользователя и пытаюсь найти остальные три

1 Ответ

0 голосов
/ 04 июня 2018

Ваши уравнения кажутся правильными, за исключением небольшой детали, специфичной для Python.Решение оказывается очень простым: преобразовать все входные данные в float .

x1=float(input("P1"))
y1=float(input("rho1"))
v1=float(input("velocity1"))

Проблема заключалась в том, что x1/y1 в выражении для f3 было оценено с помощью целочисленное деление (которое усекает результат) вместо деление с плавающей точкой .

Это означает, что вы, вероятно, тестировали с целочисленными значениями.Подача исходного кода в формате float (например, 5.0, 14.0, 3.0) также работала как ожидалось.

...