我的目标是初始化一个大小为m x 3的矩阵,并用从 for loop 获得的1 x 3向量(我的意思是数组)填充其行。我不确定是否要返回矩阵(通过指针)。但是我对C ++真的很生气(开始时并不是很好)。任何建议都会很棒。这是我的代码:
#include "rk4.h"
#include <iostream>
using std::cout;
using std::endl;
double * rk4(double finalTime, double deltaTime, double Y0[])
{
double h = 0.0009765625; /// 1/2^10
double t0 = 0;
int rows = finalTime/h;
double * Y = new double[M][3];
for(int i = 0; i < 3; i++)
{
Y[0][i] = Y0[i];
}
cout << M << endl;
for(double t = t0; t <= finalTime; t+= h)
{
// Insert row into Y
}
return Y;
}
我收到cannot convert double(*)[3] to double* in initialization
的错误消息。我也希望在这些计算中使用庞大的数组,因此任何其他建议都会很棒。
答案 0 :(得分:2)
以下是无效的C ++。编译器应该让你知道。
double * Y = new double[M][3];
使用std::vector
代替std::array
。
std::vector<std::array<double, 3>> Y(M);
您还需要更改返回类型。
std::vector<std::array<double, 3>> rk4(...) { ... }
答案 1 :(得分:0)
如果你有Boost,声明矩阵的最简单方法是使用boost::matrix
#include <iostream>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
int main () {
using namespace boost::numeric::ublas;
matrix<double> m (3, 3);
for (unsigned i = 0; i < m.size1 (); ++ i)
for (unsigned j = 0; j < m.size2 (); ++ j)
m (i, j) = 3 * i + j;
std::cout << m << std::endl;
}
Boost也有multi_array
,但已知在某些实现中存在性能问题。如果您正在考虑采用boost::multi_array