Проблемы с преобразованием циклов в Matlab в Python - PullRequest
0 голосов
/ 21 апреля 2019

Так что мне нужно преобразовать набор вложенных циклов for из Matlab в Python, и я немного застрял.

Я перепробовал несколько вариантов, и в настоящее время застрял в коде, показанном ниже.

Также a и tau одинаковы для обоих кодов.

Код Matlab:

for j=1:161
    te = 1:j;
    j
    for i=te
        i
        G(i) = E_C(i)*(a(1)*exp(-(length(te) i+1)./tau(1))+a(2).*exp(-(length(te)-i+1)./tau(2))+a(3).*exp(-(length(te) i+1)./tau(3))+a(4).*exp(-(length(te)-i+1)./tau(4))+a(5).*exp(-(length(te)-i+1)./tau(5)));
    end
    d(j)= sum(G)
end
dCppmv = d/1000;

Мой код Pyton, который не дает таких же результатов:

CO6=[]
for i in np.arange(161):
    a = [0.067, 0.1135, 0.152, 0.097, 0.041]
    tau= [inf, 313.8, 79.8, 18.8, 1.7]
    temp = np.arange(0,i)
    for j in temps:
        G = E_cc[j] *( ((a[0] * np.exp(-(len(temp)-j+1)))/tau[0]) +((a[1] * np.exp(-(len(temp)-j+1)))/tau[1]) +((a[2] * np.exp(-(len(temp)-j+1)))/tau[2]) +((a[3] * np.exp(-(len(temp)-j+1)))/tau[3]) +((a[4] * np.exp(-(len(temp)-j+1)))/tau[4])  )
        CO6.append(G/1000)

Я проверил формулу G, и они должны быть одинаковыми. Я вполне уверен, что проблема в циклах for и суммировании G в конце.

1 Ответ

0 голосов
/ 21 апреля 2019

Первым шагом будет упрощение кода Matlab:

for j=1:161
    for i=1:j
        p = -(j-i+1)./tau;
        G(i) = E_C(i) * sum(a .* exp(p));
    end
    d(j)= sum(G)
end
dCppmv = d/1000

Тогда перевод на python намного проще:

a = np.array([0.067, 0.1135, 0.152, 0.097, 0.041])
tau = np.array([np.inf, 313.8, 79.8, 18.8, 1.7])
d = []
for j in range(161):
    G = []
    for i in range(j):
        p = -(j-i+1)/tau
        G.append(E_cc[j] * sum(a * np.exp(p)))
    d.append(sum(G))
dCppmv = np.array(d)/1000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...