Привет Я пытаюсь преобразовать следующий код из спектральных методов Trefethen в MATLAB на Python.Преобразование кода Matlab в Python
% p6.m - variable coefficient wave equation
% Grid, variable coefficient, and initial data:
N = 128; h = 2*pi/N; x = h*(1:N); t = 0; dt = h/4;
c = .2 + sin(x-1).^2;
v = exp(-100*(x-1).^2); vold = exp(-100*(x-.2*dt-1).^2);
% Time-stepping by leap frog formula:
tmax = 8; tplot = .15; clf, drawnow, set(gcf,'renderer','zbuffer')
plotgap = round(tplot/dt); dt = tplot/plotgap;
nplots = round(tmax/tplot);
data = [v; zeros(nplots,N)]; tdata = t;
for i = 1:nplots
for n = 1:plotgap
t = t+dt;
v_hat = fft(v);
w_hat = 1i*[0:N/2-1 0 -N/2+1:-1] .* v_hat;
w = real(ifft(w_hat));
vnew = vold - 2*dt*c.*w; vold = v; v = vnew;
end
data(i+1,:) = v; tdata = [tdata; t];
end
waterfall(x,tdata,data), view(10,70), colormap(1e-6*[1 1 1]);
axis([0 2*pi 0 tmax 0 5]), ylabel t, zlabel u, grid off
По большей части она идет гладко для этой строки кода
data = [v; zeros(nplots,N)]
кроме После прочтения, как конвертировать между Numpy и Matlab здесь http://www.scipy.org/NumPy_for_Matlab_Users#head-e9a492daa18afcd86e84e07cd2824a9b1b651935 я попытался преобразовать его, выполнив следующие действия
data = np.array(v,zeros(nplots,N))
, но я получаю эту ошибку
data = np.array(v,zeros(nplots,N));
TypeError: data type not understood
Что я принимаю, потому что NumPy arrry имеет такую структуру
numpy.array(object,dtype=none)
Я был бы признателен за любую помощь при преобразовании этой строки. Заранее спасибо!
возможно 'np.vstack ((v, нули (nplots, N)))' – JBernardo
@JBernardo спасибо за ответ. Я попробовал vstack, но я до сих пор получаю ошибку типа TypeError: тип данных непонят. – Surfcast23
Проверьте количество парнеров ... Должно быть больше * обычного * :) – JBernardo