Проблемы с LowRankApprox в Джулии

Я пытаюсь получить эрмитову собственную декомпозицию, используя функцию pheigfact, поставляемую с пакетом LowRankApprox.jl в Julia v0.6.0. По сути, это была всего лишь одна строка кода, например:

(E, F) = pheigfact(A);

где A — вещественная симметричная положительно определенная матрица. Однако я получил следующую ошибку:

MethodError: no method matching
start(::LowRankApprox.PartialHermitianEigen{Float64,Float64})
Closest candidates are:
  start(!Matched::SimpleVector) at essential.jl:258
  start(!Matched::Base.MethodList) at reflection.jl:560
  start(!Matched::ExponentialBackOff) at error.jl:107 

Ценим любую помощь!


person ywa136    schedule 15.08.2017    source источник


Ответы (1)


TL;DR

Используйте функцию pheig, а не pheigfact, чтобы вернуть кортеж значений и векторов.


Полный ответ

У меня нет пакета, но из документов похоже, что pheigfact возвращает один элемент, из которого вы можете получить доступ к значениям/векторам, используя getindex(x,ind::Symbol).

e.g.

F = pheigfact(A)
values=F[:values]
vectors=F[:vectors]

и если вы попытаетесь назначить один элемент трубке, он попытается перебрать этот тип, который его не поддерживает, и выдаст вам вашу ошибку (т. Е. Тип не имеет метода start). Я мог получить аналогичную ошибку, выполняя либо x,y = :onetwo, либо start(:onetwo)

Решение

Используйте функцию pheig, которая возвращает кортеж.

E, F = pheig(A)
person Alexander Morley    schedule 16.08.2017