gpt4 book ai didi

c++ - 在 C++ API 中使用 Octave 内置函数 mldivide

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:22:27 26 4
gpt4 key购买 nike

我正在用 C++ 编程,想使用 Octave 中强大的内置函数。我关注了standalone program Octave 网站上的指南。我可以使用示例代码成功运行函数 norm(在 C++ 中称为 Fnorm)。现在我想使用函数 mldivide 来求解线性方程。

#include <iostream>
#include <octave/oct.h>
#include <octave/builtin-defun-decls.h>

octave_value_list input;
octave_value_list retval;

int main (void) {

Matrix A(4,4);

for (octave_idx_type i = 0; i < 4; i++)
for (octave_idx_type j = 0; j < 4; j++)
A(i,j) = 1.0 / (static_cast<double> (i) +static_cast<double> ( j ) + 1.0 ) ;

ColumnVector b(4,1.0);
input.append(A);
input.append(b);

retval=Fmldivide(input);
ColumnVector x =retval(0).column_vector_value();

std::cout << "A = " << std::endl << A << std::endl
<< "b = " << std::endl << b << std::endl
<< "x = " << std::endl << x << std::endl;
return 0;
}

但是有如下错误。

main.cpp: In function 'int main()':

main.cpp:23:26: error: invalid initialization of reference of type 'const octave_value_list&' from expression of type 'Matrix'

In file included from main.cpp:3:0:

/usr/local/octave/3.8.0/include/octave-3.8.0/octave/../octave/builtin-defun-decls.h:198:1: error: in passing argument 1 of 'octave_value_list Fmldivide(const octave_value_list&, int)'

有什么想法吗?

最佳答案

这不起作用的原因有两个:

  1. Fmldivide需要 octave_value_list作为输入

  2. Fmldivide 返回一个 octave_value_list 但您要声明一个 ColumnVector

您可以通过以下方式解决第一个问题:

  1. 将您的输入转换为单个 octave_value并将到 octave_value_list 的转换留给编译器:

    Fmldivide(octave_value(b), 1);

  2. do_binary_op 与左除法运算符一起使用:

    do_binary_op (octave_value::op_ldiv, b, 1);

您可以使用 column_vector_value 方法修复第二个问题:

  1. 如果您使用 Fmldivide,您会得到一个列表,因此您必须首先索引第一个元素:

    ColumnVector x = Fmldivide (b, 1)(0).column_vector_value();

  2. 如果你使用 do_binary_op 你会得到一个 octave_value 所以索引是不必要的:

    ColumnVector x = do_binary_op (octave_value::op_ldiv, b, 1).column_vector_value ();

关于c++ - 在 C++ API 中使用 Octave 内置函数 mldivide,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23984652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com