如何解决对 2D 向量执行单行算术以找到缩减行形式 C++
因此对于交流电路,您有时必须解决具有复数的线性系统,而我正在为我制作一个快速而肮脏的程序。我已经编写了将创建用户定义大小和输入的矩阵(二维向量)的代码,我只是不知道如何让它逐行执行算术运算。我尝试遍历第一行并将每个元素乘以 1/matrix[1][1] 但是它给了我一条错误消息,说我无法执行该操作。这是我迄今为止为上述目的编写的代码。我对 C++ 和整个编码相对较新,所以可能有一种简单的方法可以做到这一点,我很想念。
#include <iostream>
#include <vector>
#include <cmath>
#include <complex>
using namespace std;
int main()
{
int rows;
int columns;
cout << "Enter number of rows: " << endl;
cin >> rows;
cout << "Enter number of columns: " << endl;
cin >> columns;
vector<vector<complex<double> > > matrix(rows,vector<complex<double> > (columns));
int k = 0;
for (int i = 0; i < rows; i++)
{
k++;
cout << "Enter row " << k << ": " << endl;
for (int j = 0; j < columns; j++)
{
complex<double> input;
cin >> input;
matrix[i][j] = input;
}
}
for (int g = 0; g < rows; g++)
{
for (int h = 0; h < columns; h++)
{
cout << matrix[g][h] << " ";
}
cout << endl;
}
for (int b = 0; b < columns; b++) {
matrix[1][1] = a;
matrix[1][b] = (matrix[1][b]) * (1 / a)
}
return 0;
}`
解决方法
您必须手动将它们转换为复杂的,或者匹配它的类型
即
std::complex<double> x(1,2); // x = 1.0 + 2.0i
// x * 3 Error!,3 is int
auto y = x * std::complex<double>(3,0); // works! y = 3.0 + 6.0i
auto z = x * 3.0
,
我尝试遍历第一行并将每个元素乘以 1/matrix[1][1]
,但是它给了我一条错误消息,说我无法执行该操作。
如果 matrix
被声明为
vector<vector<complex<double> > > matrix(rows,vector<complex<double> > (columns));
其元素的类型为std::complex<double>
,因此底层类型为double
。
二进制 math operators 的重载接受复杂和标量类型,但类型需要匹配:
// since C++20 those are constexpr
template< class T >
constexpr std::complex<T> operator/( const std::complex<T>& lhs,const std::complex<T>& rhs );
template< class T >
constexpr std::complex<T> operator/( const std::complex<T>& lhs,const T& rhs);
// ^ ^
template< class T >
constexpr std::complex<T> operator/( const T& lhs,const std::complex<T>& rhs);
// ^ ^
虽然 OP 提到
1 / matrix[1][1]
^ That's an int,not a double. 1.0 would have worked (note that 1.0f wouldn't).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。