Я реализовал функцию в Julia для создания матрицы Римана размера N. Это матрица N-на-N, связанная с гипотезой Римана, которая истинна тогда и только тогда, когда:Оптимизация матричной функции Римана в Julia
DET(A) = O(N! N^(-1/2+epsilon))
за каждые epsilon > 0
, DET()
обозначает детерминанту, !
обозначает факторный.
Где, А = матрица Римана с
A = B(2:N+1, 2:N+1)
, где
B(i,j) = i-1 if i divides j, and
-1 otherwise.
Вот мой код, который работает отлично, но нуждается в оптимизации:
function riemann(x::Int32)
R = zeros(Int32,x+1,x+1)
for i=1:x+1, j=1:x+1
if j%i == 0
R[i,j] = i-1
else
R[i,j] = -1
end
end
return R[2:x+1,2:x+1]
end
Будем надеяться, что мне нужно напишите его в более эффективной форме:
function riemann!{T}(R::AbstractMatrix{T}, x::T)
.
.
.
Любые предложения приветствуются.
EDIT:
Ну, это другая форма я предложил выше. Я приурочил его к исходному коду и не нашел прироста скорости.
function calc_riemann!{T}(R::AbstractMatrix{T}, x::T)
for i=1:x+1, j=1:x+1
if j%i == 0
R[i,j] = i-1
else
R[i,j] = -1
end
end
end
function riemann(x::Int)
R = Array(Int, x+1,x+1)
calc_riemann!(R, x)
y = R[2:x+1,2:x+1]
end
Непонятно, в чем вопрос. – StefanKarpinski
Вопрос в том, как оптимизировать вышеуказанную функцию для эффективного использования памяти и максимальной скорости. –
Если вы внесли 'Int32' в 'Int', я сомневаюсь, что вы могли бы получить это намного быстрее. Похоже, что с версией 'riemann! 'Вы предлагаете выделить матрицу вне функции, но это не изменит общее время. – IainDunning