Проблема с преобразованием кода Matlab в Python - PullRequest
1 голос
/ 31 марта 2019

Я пытаюсь изменить код с Matlab на Python.Я новичок в программировании.

Вот оригинальная часть кода в Matlab:

%% CALCULATE T_MAX, BREAK UP INTO DIVISIONS
T_max = 0.5*v_PM(Me)*RTOD;
DT = (90-T_max) - fix(90-T_max);
T(1) = DT*DTOR;
n = T_max*2;

for m = 2:n+1
    T(m) = (DT + (m-1))*DTOR;

    %Mach from T(i) using T(i) = v_PM (FALSE POSITION)
    x_int = [1 1.01*Me];
    func = @(x) T(m) - v_PM(x);
    M(m) = fzero(func,x_int);
    P(m) = 0 + TR*tan(T(m)); %X-AXIS POINTS

    %RRSLOPES
    RR(m) = -TR/P(m);

    %LR slopes
    LR(m) = tan(T(m)+asin(1/M(m)));
    SL(m) = -RR(m);
end

А вот моя актуальная часть кода на python, которая не работает:

%% CALCULATE T_MAX, BREAK UP INTO DIVISIONS
T_max = 0.5 * v_PM(Me) * RTOD #max wall angle
DT = (90 - T_max) - np.fix(90 - T_max) #DT is delta angle
T = []
T.insert(0, DT * DTOR)
n = T_max * 2

#Points on axis P[m]
m=2
for m in range(int(n + 1)):
    T[m] = (DT + (m - 1)) * DTOR

    #Mach from T(i) using T(i) = v_PM (FALSE POSITION)
    x_int = np.array([1, 1.01*Me])
    func = lambda x : T[m] - v_PM(x)
    M[m] = optimize.fsolve(func, x_int)
    P[m] = 0 + TR * np.tan(T[m]) #X-AXIS POINTS

    #RRSLOPES
    RR[m] = -TR / P[m]

    #LR slopes
    LR[m] = np.tan(T[m] + np.arcsin(1 / M[m]))
    SL[m] = -RR[m]

Я не знаю, хорошо ли я изменил это, потому что я только начинаю учиться.Вы можете помочь мне с этим?Кроме того, когда я попытался скомпилировать его, блокнот Jupyter сказал:

D:\ProgramData\Anaconda3\lib\site-packages\ipykernel_launcher.py:4: RuntimeWarning: invalid value encountered in sqrt
  after removing the cwd from sys.path.
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-19-27711344e965> in <module>
     13     x_int = np.array([1, 1.01*Me])
     14     func = lambda x : T[m] - v_PM(x)
---> 15     M[m] = optimize.fsolve(func, x_int)
     16     P[m] = 0 + TR * np.tan(T[m]) #X-AXIS POINTS
     17     #RRSLOPES

NameError: name 'M' is not defined

1 Ответ

0 голосов
/ 31 марта 2019

Как говорит ошибка, 'M' не определено в то время, когда вы пытаетесь получить его индекс: M[m] = optimize.fsolve(func, x_int). Это работает в Matlab, потому что matlab может распределять массивы «на лету» (но предупредит вас об этом, если я правильно помню).

В Python вы должны определить переменные перед их использованием, и в этом случае вы должны определить:

M = np.zeros((n + 1)) перед циклом.

То же самое относится и к другим переменным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...