- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一些用于处理矩阵的测试代码。在代码中,矩阵由一个类定义,该类具有用于乘法矩阵等的各种函数。我在编译时遇到了关于预期初始化程序的困难。你能为我指明解决这个问题的正确方向吗?
#include <iostream>
#include <math.h>
#include <iomanip>
#define Column_Spacing 10;
using namespace std;
class Matrix{
public:
void Output_Matrix(double **, int, int);
double** Zero_Matrix(int);
double** Input_Matrix(int);
void Calculate_Minor(double **, double **, int, int, int);
double Determinant (double **, int);
void Matrix_Inversion(double **, double **, int);
};
/*******************************************************************************
function: output matrix
This function is used to output a matrix of arbitrary size. It requires three
arguments: the matrix/matrix location, the number of rows in the matrix and the
number of columns in the matrix.
*******************************************************************************/
void Output_Matrix(double **Matrix, int Number_of_Rows, int Number_of_Columns){
int Rows_Output_Iterator = 0, Columns_Output_Iterator = 0;
while (Rows_Output_Iterator < Number_of_Rows){
while (Columns_Output_Iterator < Number_of_Columns){
cout << "/t" << Matrix [Rows_Output_Iterator][Columns_Output_Iterator];
Columns_Output_Iterator++;
}
cout << endl;
Columns_Output_Iterator = 0;
Rows_Output_Iterator++;
}
}
/*******************************************************************************
function: zero matrix
This function is used to create an arbitrary-sized matrix in which all of its
elements are zero.
*******************************************************************************/
double** Zero_Matrix(int Matrix_Order){
int Number_of_Rows_Zero, Number_of_Columns_Zero;
if (Matrix_Order > 0){
Number_of_Rows_Zero = Matrix_Order;
Number_of_Columns_Zero = Matrix_Order;
}
else{
cout << "Zero Matrix." << endl;
cout << "State the number of rows in the zero matrix: ";
cin >> Number_of_Rows_Zero;
cout << "State the number of columns in the zero matrix: ";
cin >> Number_of_Columns_Zero;
}
double **Zero_Matrix = new double*[Number_of_Rows_Zero];
for (int Zero_Matrix_Iterator = 0; Zero_Matrix_Iterator < Number_of_Rows_Zero; Zero_Matrix_Iterator++){
Zero_Matrix[Zero_Matrix_Iterator] = new double[Number_of_Columns_Zero];
}
for (int Row_Iterator = 0; Row_Iterator < Number_of_Rows_Zero; Row_Iterator++){
for (int Column_Iterator = 0; Column_Iterator < Number_of_Columns_Zero; Column_Iterator++){
Zero_Matrix[Row_Iterator][Column_Iterator] = 0;
}
}
return Zero_Matrix;
}
/*******************************************************************************
function: input matrix
This function is used to create an arbitrary-sized matrix defined by the used
and to fill it with arbitrary entries specified by the user.
*******************************************************************************/
double** Input_Matrix(int Matrix_Order){
int Number_of_Rows, Number_of_Columns;
double Entry;
cout << "Input Matrix A." << endl;
if (Matrix_Order > 0){
Number_of_Rows = Matrix_Order;
Number_of_Columns = Matrix_Order;
}
else{
cout << "State the number of rows in the matrix: ";
cin >> Number_of_Rows;
cout << "State the number of columns in the matrix: ";
cin >> Number_of_Columns;
}
double **Matrix_A = new double*[Number_of_Rows];
for (int Iterator = 0; Iterator < Number_of_Rows; Iterator++){
Matrix_A[Iterator] = new double[Number_of_Columns];
}
cout << "Entry ij" << endl;
for (int Row_Iterator = 0; Row_Iterator < Number_of_Rows; Row_Iterator++){
for (int Column_Iterator = 0; Column_Iterator < Number_of_Columns; Column_Iterator++){
cout << "Entry " << Row_Iterator << Column_Iterator << ": ";
cin >> Entry;
Matrix_A [Row_Iterator][Column_Iterator] = Entry;
}
}
cout << "Matrix A = " << endl;
Output_Matrix(Matrix_A, Number_of_Rows, Number_of_Columns);
return Matrix_A;
}
/*******************************************************************************
function: calculate minor
This function calculates the minor of an arbitrary input matrix. This function
requires five arguments: the input matrix, the minor (to store the output
value), the row number (which will be eliminated from the input matrix), the
column number which will be eliminated from the input matrix and the order of
the matrix respectively.
*******************************************************************************/
void Calculate_Minor(double **Matrix, double **Minor, int Row_Number, int Column_Number, int Matrix_Order){
int Row_Count = 0, Column_Count = 0;
for (int Row_Iterator = 0; Row_Iterator < Matrix_Order; Row_Iterator++){
if (Row_Iterator != Row_Number){
Column_Count = 0;
for(int Column_Iterator = 0; Column_Iterator < Matrix_Order; Column_Iterator++){
if (Column_Iterator != Column_Number){
Minor[Row_Count][Column_Count] = Matrix[Row_Iterator][Column_Iterator];
Column_Count++;
}
}
Row_Count++;
}
}
}
/*******************************************************************************
function: determinant
This function calculates the determinant of an arbitrary sized input matrix.
This function requires two arguments/inputs which are the input matrix and the
order of the matrix respectively. This function uses recursion i.e. the function
can, if necessary, be called again suppling the corresponding minors of the
original input matrix until the total determinant has been calculated. This
function requires the use of the function Calculate_Minor.
*******************************************************************************/
double Determinant (double **Matrix, int Matrix_Order){
double det = 0;
if (Matrix_Order == 1){
return Matrix[0][0];
}
double **Minor_Matrix = new double*[Matrix_Order - 1];
for (int Iterator = 0; Iterator < Matrix_Order - 1; Iterator++){
Minor_Matrix[Iterator] = new double[Matrix_Order - 1];
}
for (int Column_Iterator = 0; Column_Iterator <= (Matrix_Order - 1); Column_Iterator++){
Calculate_Minor(Matrix, Minor_Matrix, 0, Column_Iterator, Matrix_Order);
det += (Column_Iterator % 2 == 1?-1.0:1.0)*Matrix[0][Column_Iterator]*Determinant(Minor_Matrix, Matrix_Order - 1);
//det += pow(-1, Iterator_2)*Matrix[0][Iterator_2]*Determinant(Minor, Matrix_Size - 1);
}
for (int Iterator = 0; Iterator < (Matrix_Order - 1); Iterator++){
delete [] Minor_Matrix[Iterator];
}
delete [] Minor_Matrix;
//cout << "det = " << det << endl;
return det;
}
/*******************************************************************************
function: matrix inversion
This function calculates the inverse of an arbitrary input matrix. This function
requires three arguments/inputs which are the input matrix, the cofactor matrix
(somewhere to store the cumulative output of this function for example a matrix
whose entries are all zero) and the order of the matrix respectively. This
function uses the determinant function and the Calculate_Minor function.
*******************************************************************************/
void Matrix_Inversion(double **Matrix, double **Cofactor_Matrix, int Matrix_Order){
if (Determinant(Matrix, Matrix_Order) == 0){
cout << "The matrix is singular i.e. det(A) = 0 hence, no inverse matrix (A^-1) exists." << endl;
}
else{
double Coefficient = 1/(Determinant(Matrix, Matrix_Order));
double *Temporary = new double[(Matrix_Order - 1)*(Matrix_Order - 1)];
double **Minor = new double*[Matrix_Order - 1];
for (int Iterator = 0; Iterator < (Matrix_Order - 1); Iterator++){
Minor[Iterator] = Temporary + (Iterator*(Matrix_Order - 1));
}
for (int Row_Iterator = 0; Row_Iterator < Matrix_Order; Row_Iterator++){
for (int Column_Iterator = 0; Column_Iterator < Matrix_Order; Column_Iterator++){
Calculate_Minor(Matrix, Minor, Row_Iterator, Column_Iterator, Matrix_Order);
Cofactor_Matrix[Row_Iterator][Column_Iterator] = Determinant(Minor, Matrix_Order - 1);
if ((Row_Iterator + Column_Iterator)%2 == 1){
Cofactor_Matrix[Row_Iterator][Column_Iterator] = -Cofactor_Matrix[Row_Iterator][Column_Iterator];
}
}
}
double **Cofactor_Transpose = new double*[Matrix_Order];
for (int Iterator = 0; Iterator < Matrix_Order; Iterator++){
Cofactor_Transpose[Iterator] = new double[Matrix_Order];
}
for (int Row_Iterator = 0; Row_Iterator < Matrix_Order; Row_Iterator++){
for (int Column_Iterator = 0; Column_Iterator < Matrix_Order; Column_Iterator++){
Cofactor_Transpose[Column_Iterator][Row_Iterator] = Cofactor_Matrix[Row_Iterator][Column_Iterator];
}
}
double **Inverse_Matrix = new double*[Matrix_Order];
for (int Iterator = 0; Iterator < Matrix_Order; Iterator++){
Inverse_Matrix[Iterator] = new double[Matrix_Order];
}
for (int Row_Iterator = 0; Row_Iterator < Matrix_Order; Row_Iterator++){
for (int Column_Iterator = 0; Column_Iterator < Matrix_Order; Column_Iterator++){
Inverse_Matrix[Column_Iterator][Row_Iterator] = Coefficient*Cofactor_Matrix[Row_Iterator][Column_Iterator];
}
}
cout << "(Inverse Matrix) A^-1 = " << Coefficient << endl;
Output_Matrix(Cofactor_Transpose, Matrix_Order, Matrix_Order);
cout << "= " << endl;
Output_Matrix(Inverse_Matrix, Matrix_Order, Matrix_Order);
delete [] Temporary;
delete [] Minor;
delete [] Cofactor_Transpose;
delete [] Inverse_Matrix;
}
}
int main(){
int Matrix_Order = 0;
cout << "Define the order of the input matrix (... if the input matrix is square - if not, set this variable to zero): ";
cin >> Matrix_Order;
Matrix Matrix_A, Cofactor_Matrix, determinant, Matrix_Inverse;
double **Matrix_A.Input_Matrix(Matrix_Order);
/*
double **Cofactor_Matrix.Zero_Matrix(Matrix_Order);
double det = determinant.Determinant(Matrix_A, Matrix_Order);
cout << "(Determinant) det = " << det << endl;
Matrix_Inverse.Matrix_Inversion(Matrix_A, Cofactor_Matrix, Matrix_Order);
*/
return 0;
}
最佳答案
根据您的类定义:
class Matrix{
public:
void Output_Matrix(double **, int, int);
double** Zero_Matrix(int);
double** Input_Matrix(int);
void Calculate_Minor(double **, double **, int, int, int);
double Determinant (double **, int);
void Matrix_Inversion(double **, double **, int);
};
而不是你实现的方法中的这一行:
void Output_Matrix(double **Matrix, int Number_of_Rows, int Number_of_Columns){ ... }
您应该编写以下内容:
void Matrix::Output_Matrix(double **Matrix, int Number_of_Rows, int Number_of_Columns){...}
您必须添加 Matrix::
就像我对您的每个类(class)成员实现所做的那样。
在你的main
,你写了这一行:
double **Matrix_A.Input_Matrix(Matrix_Order);
这毫无意义。我建议你使用 std::vector<std::vector<double> >
而不是 double**
.然后你可以写:typedef std::vector<std::vector<double> > MATRIX;
.
例如,您的 main 中的行将是:MATRIX M = Matrix_A.Input_Matrix(Matrix_Order);
.
Utilities about std::vector in C++
让我们为您的 Input_Matrix
做一个例子方法:
MATRIX Matrix::Input_Matrix(int Matrix_Order){
int Number_of_Rows, Number_of_Columns;
double Entry;
cout << "Input Matrix A." << endl;
if (Matrix_Order > 0){
Number_of_Rows = Matrix_Order;
Number_of_Columns = Matrix_Order;
}
else{
cout << "State the number of rows in the matrix: ";
cin >> Number_of_Rows;
cout << "State the number of columns in the matrix: ";
cin >> Number_of_Columns;
}
MATRIX Matrix_A;
Matrix_A.resize(Number_of_Rows);
for (int Iterator = 0; Iterator < Number_of_Rows; Iterator++){
Matrix_A[Iterator].resize(Number_of_Columns);
}
cout << "Entry ij" << endl;
for (int Row_Iterator = 0; Row_Iterator < Number_of_Rows; Row_Iterator++){
for (int Column_Iterator = 0; Column_Iterator < Number_of_Columns; Column_Iterator++){
cout << "Entry " << Row_Iterator << Column_Iterator << ": ";
cin >> Entry;
Matrix_A[Row_Iterator][Column_Iterator] = Entry;
}
}
cout << "Matrix A = " << endl;
/* First parameter of the following method must be of type MATRIX. */
Output_Matrix(Matrix_A, Number_of_Rows, Number_of_Columns);
return Matrix_A;
}
现在,您将能够按照这个示例完成剩下的工作。希望这对您有所帮助。
关于c++ - 矩阵类实验中的编译错误 - "expected initializer before ‘.’ token ”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19934495/
假设我有两个矩阵,每个矩阵有两列和不同的行数。我想检查并查看一个矩阵的哪些对在另一个矩阵中。如果这些是一维的,我通常只会做 a %in% x得到我的结果。 match似乎只适用于向量。 > a
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 个月前。 Improv
我只处理过 DirectX 矩阵 我读过一些文章,说不能将 DirectX 矩阵数学库用于 openGL 矩阵。 但我也读过,如果你的数学是一致的,你可以获得类似的结果。那只会让我更加困惑。 任何人都
我编写了一个C++代码来解决线性系统A.x = b,其中A是一个对称矩阵,方法是首先使用LAPACK(E)对角矩阵A = V.D.V^T(因为以后需要特征值),然后求解x = A^-1.b = V^T
我遇到了问题。我想创建二维数组 rows=3 cols=2我的代码如下 int **ptr; int row=3; int col=2; ptr=new int *[col]; for (int i=
我有一个 3d mxnxt 矩阵,我希望能够提取 t 2d nxm 矩阵。在我的例子中,我有一个 1024x1024x10 矩阵,我想要 10 张图像显示给我。 这不是 reshape ,我每次只需要
我在 MATLAB 中有一个 3d 矩阵 (n-by-m-by-t) 表示一段时间内网格中的 n-by-m 测量值.我想要一个二维矩阵,其中空间信息消失了,只剩下 n*m 随着时间 t 的测量值(即:
作为一个简化的示例,我有一个 3D numpy 矩阵,如下所示: a = np.array([[[1,2], [4,np.nan], [7,
作为一个简化的示例,我有一个 3D numpy 矩阵,如下所示: a = np.array([[[1,2], [4,np.nan], [7,
使用 eigen2 , 并给定一个矩阵 A a_0_0, a_0_1, a_0_2, ... a_1_0, a_1_0, a_1_2, ... ... 和一个矩阵B: b_0_0, b_0_1, b_
我想知道如何获得下面的布局。 在中型和大型设备上,我希望有 2 行和 2 列的布局(2 x 2 矩阵)。 在小型(和超小型)设备上或调整为小型设备时,我想要一个 4 行和 1 列的矩阵。 我将通过 a
有什么方法可以向量化以下内容: for i = 1:6 te = k(:,:,:,i).*(c(i)); end 我正在尝试将 4D 矩阵 k 乘以向量 c,方法是将其
如何从填充有 1 和 0 的矩阵中抽取 n 个随机点的样本? a=rep(0:1,5) b=rep(0,10) c=rep(1,10) dataset=matrix(cbind(a,b,c),nrow
我正在尝试创建一个包含 X 个 X 的矩阵。以下代码生成从左上角到右下角的 X 对 Angular 线,而不是从右上角到左下角的 X 对 Angular 线。我不确定从哪里开始。是否应该使用新变量创建
我想在 python 中创建一个每行三列的矩阵,并能够通过任何一行对它们进行索引。矩阵中的每个值都是唯一的。 据我所知,我可以设置如下矩阵: matrix = [["username", "name"
我有点迷茫 我创建了一个名为 person 的类,它具有 age 和 name 属性(以及 get set 方法)。然后在另一个类中,我想创建一个 persons 数组,其中每个人都有不同的年龄和姓名
我有 n 个类,它们要么堆叠,要么不堆叠。所有这些类都扩展了同一个类 (CellObject)。我知道更多类将添加到此列表中,我想创建一种易于在一个地方操纵“可堆叠性”的方法。 我正在考虑创建一个矩阵
我有一个包含 x 个字符串名称及其关联 ID 的文件。本质上是两列数据。 我想要的是一个格式为 x x x 的相关样式表(将相关数据同时作为 x 轴和 y 轴),但我想要 fuzzywuzzy 库的函
机器学习与传统编程的一个重要区别在于机器学习比传统编程涉及了更多的数学知识。不过,随着机器学习的飞速发展,各种框架应运而生,在数据分析等应用中使用机器学习时,使用现成的库和框架成为常态,似乎越来越不需
当我在 julia 中输入这个错误跳转但我不知道为什么,它应该工作。/ julia> A = [1 2 3 4; 5 6 7 8; 1 2 3 4; 5 6 7 8] 4×4 Array{Int64,
我是一名优秀的程序员,十分优秀!