矩阵与向量相乘、矩阵与矩阵相乘、矩阵转置、矩阵求逆,进行编程实现用c/c++实现
时间: 2024-09-25 15:06:25 浏览: 53
在C/C++中,我们可以分别用`#include <iostream>`包含输入输出库,以及`#include <vector>`或`#include <Eigen>`(如果使用Eigen库处理矩阵)来操作矩阵。
1. **矩阵与向量相乘** (矩阵A * 向量v):
```cpp
#include <vector>
using namespace std;
// 省略维度检查等部分
vector<double> matrix_times_vector(vector<vector<double>>& A, vector<double>& v) {
int m = A.size(), n = v.size();
vector<double> result(m);
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
result[i] += A[i][j] * v[j];
}
}
return result;
}
```
2. **矩阵与矩阵相乘** (矩阵A * 矩阵B, 如果A的列数等于B的行数):
```cpp
vector<vector<double>> matrix_multiply(vector<vector<double>>& A, vector<vector<double>>& B) {
int m = A.size(), n = A[0].size(), p = B.size();
if (n != p) throw runtime_error("Matrices cannot be multiplied!"); // 检查维度是否匹配
vector<vector<double>> C(m, vector<double>(p));
for (int i = 0; i < m; ++i) {
for (int j = 0; j < p; ++j) {
double sum = 0.0;
for (int k = 0; k < n; ++k) {
sum += A[i][k] * B[k][j];
}
C[i][j] = sum;
}
}
return C;
}
```
3. **矩阵转置** (A.T 表示矩阵A的转置):
```cpp
vector<vector<double>> transpose(matrix<vector<double>>& A) {
int n = A.size(), m = A[0].size();
vector<vector<double>> transposed(n, vector<double>(m));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
transposed[j][i] = A[i][j];
}
}
return transposed;
}
4. **矩阵求逆** (如果矩阵是方阵且可逆):
```cpp
// 使用高斯消元法简化,假设已经实现了对角化或LU分解
// 这里仅给出伪代码
vector<vector<double>> inverse(matrix<vector<double>>& A) {
// ... 具体算法省略
return inversed_matrix;
}
```
注意:以上代码没有包含错误检查和处理,实际应用中需要添加适当的边界条件检查和异常处理。对于矩阵求逆,通常会依赖于专门的数学库或者数值线性代数库,因为直接编写求逆算法可能会很复杂并容易出错。例如,可以使用Eigen库提供的`inverse()`函数来求解。
阅读全文