Загрузить матрицу из файла с помощью Octave C++ API

Можно ли загрузить матрицу в двоичном формате PETSc из внешнего файла во время выполнения с использованием Octave C++ API? Я нашел документацию Doxygen, но не могу найти ничего полезного среди так много предметов.

Обычно я использую "PetscBinaryRead.m", когда хочу загрузить матрицу PETSc в Octave, но теперь в C++ я действительно полностью потерялся.


person Eenoku    schedule 12.02.2015    source источник


Ответы (1)


PetscBinaryRead.m не является частью Octave, мы не знаем, где вы его взяли и даже что он делает. Ты сможешь:

  1. перепишите его на C++, C или Fortran (только вы знаете, что он делает)
  2. запустите интерпретатор Octave на вашем C++ и вызовите PetscBinaryRead оттуда (см. руководство Octave о том, как создать отдельные программы или вызов октавных функций из октавных файлов
person carandraug    schedule 13.02.2015
comment
О, я забыл упомянуть об этом - PetscBinaryRead.m - это общий сценарий Octave / MatLab, включенный в пакет PETSc, чтобы сделать возможной загрузку двоичных матриц PETSc. В качестве аргумента принимает имя файла матрицы. Так что второй вариант, наверное, то, что мне нужно. Но я должен признать, что я до сих пор не вижу, как я могу выполнить этот скрипт. Вот сценарий .m: fossies.org/dox/petsc-3.5.3 /PetscBinaryRead_8m_source.html - person Eenoku; 13.02.2015
comment
@MartinBeseda вам нужно будет более конкретно указать, что вы не понимаете, если вам нужна помощь. Есть много других вопросов о людях, пытающихся внедрить октавный код в свои приложения. По сути, вам нужно запустить интерпретатор, установить патч, а затем вызвать функцию, которая находится в m-файле. - person carandraug; 13.02.2015
comment
Хорошо, теперь у меня есть проект со связанными заголовками и библиотеками Octave. У меня объявлена ​​переменная Matrix. И мне нужно знать функцию из API, которая будет вызывать функцию из m-файла (эта функция будет загружать матрицу из файла, и я назначу ее своей переменной Matrix). Это более ясно? Извините, если что не так :-) - person Eenoku; 13.02.2015
comment
@MartinBeseda, согласно ссылке на ответ, в которой даже есть пример, вам нужно запустить интерпретатор (вызов octave_main), а затем вызвать вашу функцию feval, которая вернет octave_value_list. Одним из элементов этого списка будет ваша матрица (вероятно, первая). Вы можете получить тип Matrix, выбрав соответствующий метод из класса octave_value. - person carandraug; 13.02.2015
comment
Большое Вам спасибо. Я написал код, который кажется мне правильным, но я получаю сообщение об ошибке. Проблема в том, что я пытаюсь использовать Octave в Kaira, который еще не закончен, поэтому сообщения об ошибках не очень ясны. Поэтому, пожалуйста, не могли бы вы взглянуть на мой код и сказать мне, правильно ли я его понял? Мой код находится здесь. Ошибка, вероятно, вызвана вызовом метода matrix_value() в строке 12. - person Eenoku; 14.02.2015
comment
Метод matrix_value() я нашел здесь. - person Eenoku; 14.02.2015