Octave продолжает огорчать

Jul 15, 2015 12:48

Octave огорчает всё больше и больше. Вот, казалось бы, совсем простая задача: интегрирование системы дифференциальных уравнений методом Эйлера. Проще уже не бывает, и что же мы получаем?

Время работы Matlab - 1.2 c
Время работы Octave - 101.1 c



% Интегрирование орбиты Земли простым методом Эйлера

npoints=2500000; % Количество выводимых точек
dt = 0.001; % Шаг интегрирования в годах
xx=zeros(1,npoints); % Массив выходных данных x
yy=zeros(1,npoints); % Массив выходных данных y
x=1; % Начальная координата x в а.е.
y=0; % Начальная координата y в а.е.
v_x=0; % Начальный компонент скорости x в а.е./год
v_y=2*pi; % Начальный компонент скорости y в а.е./год

% Рисуем Солнце (не в масштабе)
plot(0,0,'oy','MarkerSize',30, 'MarkerFaceColor','yellow');
axis([-1.2 1.2 -1.2 1.2]);
xlabel('x(а.е.)');
ylabel('y(а.е.)');
hold on;
tic; % Запускаем таймер

% Главный цикл
for step = 1:npoints;
radius=sqrt(x^2+y^2);
v_x_new=v_x - (4*pi^2*x*dt)/(radius^3);
v_y_new=v_y - (4*pi^2*y*dt)/(radius^3);
x_new=x+v_x_new*dt;
y_new=y+v_y_new*dt;
v_x=v_x_new;
v_y=v_y_new;
xx(step)=x_new;
yy(step)=y_new;
x=x_new;
y=y_new;
end;
toc; % Останавливаем таймер
plot(xx,yy);

Octave выполняет скрипт в сто раз медленнее, чем Matlab. В сто раз, Карл!

Физика, Программирование, Математика

Previous post Next post
Up