Octave自己使用的库可以在独立的应用程序中使用。例如,这些应用程序可以访问数组和矩阵类,以及所有Octave算法。以下C++程序使用类MatrixlibOctave.a或liboctave.so.
#include<iostream>#include<octave/oct.h>intmain(){std::cout<<“Hello octave world!\n”;int n=2;矩阵a_Matrix=矩阵(n,n);对于(octave_idx_type i=0;i<n;i++)对于(octove_idx__type j=0;j<n;j++)a_matric(i,j)=(i+1)*10+(j+1);std::cout<a_matory;return 0;}
mkoctfile可以用来构建一个独立的应用程序,命令如下
$mkoctfile—链接standalone.cc-o standalone$/单打独斗你好八音世界!11 12 21 22$
请注意,应用程序独立的
将针对Octave库和任何Octave支持库动态链接。以上内容允许应用程序使用Octave数学库。但是,它不允许应用程序使用Octave的脚本文件、oct文件或内置函数。为此,需要首先初始化Octave解释器。然后可以在代码中看到如何做到这一点的示例
#include<iostream>#include<octave/oct.h>#包含<octave/octave.h>#包含<octeve/sparse.h>#1include<octave/interpreter.h>intmain(){//创建解释器。octave::解释器解释器;尝试{//通过调用/////inintereter.initialize_history(false)来禁止读取历史文件;//如果您愿意,可以通过调用///intereter.initilize_load_path(false)在此处设置自定义加载路径;//执行解释器的最终初始化,包括//通过调用///intereter_initialize()从启动文件执行命令;///if(!interpreter.is_initialized())//{//std::cerr<<“Octave解释器初始化失败!”//<std::endl;//exit(1);//}//如果在读取启动文件和告诉解释器//您已准备好执行命令之间不需要做任何事情,//您可以跳过此步骤。//告诉解释器我们已经准备好执行命令了:int status=interpeter.execute();if(status!=0){std::cerr<<“创建嵌入式Octave解释器失败!”<std::endl;return status;}Octave_idx_type n=2;Octave值列表在;对于(i)中的(octave_idx_type i=0;i<n;i++)=octave_value(5*(i+2));octave_value_list out=Octave::feval(“gcd”,in,1);如果(out.length()>0)std::cout<<“[”的GCD<<in(0).int_value()<<“,”<in(1).int_value()<“]是”<<out(0)/int_value(;else std::cout<<“无效\n”;}catch(constoctave::exit_exception&ex){std::cerr<<“octave解释器退出,状态=”<ex。exit_status()<std::endl;}catch(const八度音::execution_exception&){std::cerr><“在octave计算器中遇到错误!”
和以前一样,它是作为一个独立的应用程序编译和运行的
$mkoctfile--链接独立嵌入.cc-o嵌入$/[10,15]的嵌入GCD为5$
值得重申的是,如果只从C++独立程序中调用内置函数,则不需要初始化解释器。一般规则是,对于名为函数名称
在解释器中,将有一个名为的C++函数Ffunction_name
(注意准备资本F
)可在C++API中访问。所有内置函数的语句都收集在头文件中内置defun decls.h
。应小心使用此函数,因为内置函数列表可能会发生变化。不能保证当前是内置函数的函数不会实现为.mfileor作为未来的动态链接函数。在代码中可以看到如何从C++调用内置函数的示例
#include<iostream>#include<octave/oct.h>#include<octove/builtin defun decls.h>intmain(){int n=2;矩阵a_mamatrix=矩阵(n,n);对于(octave_idx_type i=0;i<n;i++)对于(octove_idx__type j=0;j<n;j++)a_amatrix(i,j)=(i+1)*10+(j+1);std::cout<“这是一个矩阵:”in;in(0)=矩阵;Octave值列表out=Fnorm(in,1);double norm_of_the_Matrix=out(0).double _value();std::cout<<“这是矩阵的范数:”
它作为一个独立的应用程序进行编译和运行
$mkoctfile--链接standalonebuildin.cc-o standaloneiltin$/这是一个矩阵:11 12 21 22这是矩阵的范数:34.4952$
版权所有 © 2024 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号