gpt4 book ai didi

c++ - C++中的简单矩阵求幂

转载 作者:行者123 更新时间:2023-12-02 10:19:35 24 4
gpt4 key购买 nike

因此,有人要求我将矩阵定义为:

typedef vector<double> vec;
typedef vector<vec> matrix;

然后基于该函数编写一些函数,例如标量乘法,加法等。除求幂运算外,其他所有函数都运行良好,我不知道该函数可能导致什么问题。首先,我将乘法定义为:
void multip(const matrix& A, const matrix& B, matrix& result){
int n = A.size();
for (int i = 0; i<n; i++){
for (int j = 0; j<n; j++){
for (int k = 0; k< n; k++){
result[i][j] += A[i][k] * B[k][j];
}
}
}
}

基于此,我想制作一个 递归(这是必须的)幂函数,如下所示:
void expo(matrix& M, unsigned n){
if (n>0){
n--;
multip(M, expo(M, n), M);}
else{return;}
}

这不起作用,返回[错误]无效使用void表达式。我知道为什么这行不通,但是我不知道如何解决。有人可以帮我解决这个问题吗?

最佳答案

主要问题是multip更改了第3个参数,因此它不能与第1个参数相同,就像在代码中调用multip(M, expo(M, n), M);一样。

如果将函数返回值用于返回值,则应该很简单。

修复和工作示例:

#include <iostream>
#include <vector>

using namespace std;

typedef vector<double> vec;
typedef vector<vec> matrix;

matrix multip(const matrix& A, const matrix& B) {
size_t n = A.size();
matrix result(n, vec(n));
for (size_t i = 0; i < n; ++i) {
for (size_t j = 0; j < n; ++j) {
for (size_t k = 0; k < n; ++k) {
result[i][j] += A[i][k] * B[k][j];
}
}
}
return result;
}

matrix expo(matrix const& M, unsigned n) {
if(n < 1)
throw;
if(n == 1)
return M;
return multip(M, expo(M, n - 1));
}

void print(matrix const& M) {
size_t n = M.size();
for(size_t i = 0; i < n; ++i) {
for(size_t j = 0; j < n; ++j)
cout << M[i][j] << ' ';
cout << '\n';
}
}

int main() {
matrix m(2, vec(2));
m[0][0] = 2;
m[1][1] = 2;
print(m);
cout << '\n';

m = expo(m, 3);
print(m);
cout << '\n';
}

输出:
2 0 
0 2

8 0
0 8

关于c++ - C++中的简单矩阵求幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60828766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com