Почему код Matlab дает другой результат в Python? - PullRequest
0 голосов
/ 30 октября 2019

Так что я пытаюсь преобразовать этот код Matlab в код Python при генерации последовательности псевдослучайных чисел. Но результат, который я получаю из кода Matlab и кода Python вначале, дает небольшую разницу, пока через некоторое время (например, в 500-й последовательности) он действительно слишком сильно отличается. Как я могу получить точно такое же число, как и в коде Matlab?

Я понимаю, что проблема связана с разницей округления в Matlab и Python. тогда как в matlab он, кажется, округляет его до ближайшего 4 числа после десятичной дроби, а python округляет его до большей длины. Я попытался округлить каждую операцию в последовательности псевдослучайных чисел с округлением (a, 4), но это только делает ее более отличной. Помогите мне пожалуйста, что я сделал не так?

Вот код Matlab

x=0.21;
u=0.399;
d=43;     
N0=500;  
L= N0+256;
xx=zeros(1,L);
for i=1:L  
    if x<0.5
       x=(4-u)/4*sin(pi*x)+u/2*x;
    else
       x=(4-u)/4*sin(pi*x)+u/2*(1-x); 
    end
    xx(i)=x;
end

Вот код Python

import numpy as np
def stmap(u,x,n):
    seq=[]
    for i in range(n):        
        if x<0.5:
            st=(4-u)/4*np.sin(np.pi*x)+u/2*x
        else:
            st=(4-u)/4*np.sin(np.pi*x)+u/2*(1-x)
        seq.append(st)
        x=seq[i]
    return seq
d=43
n=500
x=0.21
u=0.399
X=stmap(u,x,n+256)

Я ожидаю получить точно такой же результат споследовательность, которую я получаю из кода Matlab.

...