C++;ode系统:如何处理? 我想用C++语言编写一个类来解决 >系统> /Stand,C++中的Euler方法(我是初学者)。如果方程是标量的,就没有问题,因为我可以将解存储在向量中,或者我可以用double*sol=new double[N_points]
如果我必须处理矩阵,事情开始变得奇怪,所以我的问题是:*我应该使用一些库作为C++;ode系统:如何处理? 我想用C++语言编写一个类来解决 >系统> /Stand,C++中的Euler方法(我是初学者)。如果方程是标量的,就没有问题,因为我可以将解存储在向量中,或者我可以用double*sol=new double[N_points],c++,arrays,eigen,numeric,C++,Arrays,Eigen,Numeric,如果我必须处理矩阵,事情开始变得奇怪,所以我的问题是:*我应该使用一些库作为Eigen?还是我应该与指针斗争 我正在寻找一些好的方法/参考,以确定哪种方法是处理这种情况的正确/最佳方法。如果您想使用矩阵,您可以使用数组数组,或者使用带有一维数组(或向量)的简化抽象层来存储矩阵数据,如: std::向量矩阵(行*列); 要访问项目,可以使用简单的算法,如: int index = rowIndex * totalColumns + columnIndex; double item = matri
Eigen
?还是我应该与指针斗争
我正在寻找一些好的方法/参考,以确定哪种方法是处理这种情况的正确/最佳方法。如果您想使用矩阵,您可以使用数组数组,或者使用带有一维数组(或向量)的简化抽象层来存储矩阵数据,如:
std::向量矩阵(行*列);
要访问项目,可以使用简单的算法,如:
int index = rowIndex * totalColumns + columnIndex;
double item = matrix[index];
您可以查看我的库(不使用它,只需查看),以获得此实现的示例。如果您想使用矩阵,您可以使用数组数组,或者使用带有一维数组(或向量)的简化抽象层来存储矩阵数据,如:
std::向量矩阵(行*列);
要访问项目,可以使用简单的算法,如:
int index = rowIndex * totalColumns + columnIndex;
double item = matrix[index];
您可以查看我的库(不使用它,只需查看),以获得此实现的示例。答案很少是“与指针斗争”。获取一个库,否则您将被迫自己编写和调试一个库。在C++中使用<代码> STD::向量< /代码>每当你可以对代码>新[]/Cord>。@ TADMAN谢谢你的建议。但向量只适用于标量情况,而这里我应该将解存储在matrix@tadman还有,我为什么要避免动态分配呢?如果动态分配,最终必须释放内存,这可能很难跟踪
std::vector
和其他容器将为您处理此问题。如果每个分配的所有权不明确,C++中的内存管理会变得非常复杂,而且在容易理解和完全混淆之间有一条非常细的线。向量的问题是,如果我想使用元素来处理“矩阵”,那么访问元素并不“容易”。答案很少是“与指针斗争”。获取一个库,否则您将被迫自己编写和调试一个库。在C++中使用<代码> STD::向量< /代码>每当你可以对代码>新[]/Cord>。@ TADMAN谢谢你的建议。但向量只适用于标量情况,而这里我应该将解存储在matrix@tadman还有,我为什么要避免动态分配呢?如果动态分配,最终必须释放内存,这可能很难跟踪std::vector
和其他容器将为您处理此问题。如果每个分配的所有权不明确,C++中的内存管理会变得非常复杂,而且在容易理解和完全混淆之间有一条非常细的线。向量的问题是,如果我想使用元素来处理“矩阵”,那么访问元素并不“容易”。我认为,在数值分析的背景下,这种访问项目的方式容易出错。你知道chanche还有其他方法吗?你可以更精确地使用容器容器,如std::vector matrix
。当您访问时,可以使用matrix[row][col]
我认为这种访问项目的方式有点容易出错,这里没有人实际上意味着您会在任何地方重复这种访问模式。您应该编写一次代码,并在执行访问的任何地方使用该代码。在C++中,你有一个访问函数,C++中你有方法。@ ViiSuSalMDA只需要再问一个问题:如果我想做一些事情,比如<代码>矩阵[[,0 ] < /Cord>(所有行,第一列),我每次都要做一个循环吗?如果你来自MATLAB,不要认为这是它在引擎盖下做不到的。您可以使用其他访问方法返回矩阵的子向量,如matrix.subvector(所有行,3)
向每行或每列传递标志。仅根据您的需要,我认为这种访问项目的方式在数值分析环境中容易出错。你知道chanche还有其他方法吗?你可以更精确地使用容器容器,如std::vector matrix
。当您访问时,可以使用matrix[row][col]
我认为这种访问项目的方式有点容易出错,这里没有人实际上意味着您会在任何地方重复这种访问模式。您应该编写一次代码,并在执行访问的任何地方使用该代码。在C++中,你有一个访问函数,C++中你有方法。@ ViiSuSalMDA只需要再问一个问题:如果我想做一些事情,比如<代码>矩阵[[,0 ] < /Cord>(所有行,第一列),我每次都要做一个循环吗?如果你来自MATLAB,不要认为这是它在引擎盖下做不到的。您可以使用其他访问方法返回矩阵的子向量,如matrix.subvector(所有行,3)
向每行或每列传递标志。仅取决于您的需要