请用C++帮我实现matlab的gradient函数
时间: 2023-11-21 18:06:23 浏览: 135
可以使用以下代码来实现matlab中的gradient函数:
```c++
#include <iostream>
#include <vector>
using namespace std;
vector<vector<double>> gradient(vector<vector<double>> matrix) {
int m = matrix.size();
int n = matrix[0].size();
vector<vector<double>> grad(m, vector<double>(n, 0));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
double dx, dy;
if (i == 0) {
dx = matrix[i + 1][j] - matrix[i][j];
} else if (i == m - 1) {
dx = matrix[i][j] - matrix[i - 1][j];
} else {
dx = (matrix[i + 1][j] - matrix[i - 1][j]) / 2;
}
if (j == 0) {
dy = matrix[i][j + 1] - matrix[i][j];
} else if (j == n - 1) {
dy = matrix[i][j] - matrix[i][j - 1];
} else {
dy = (matrix[i][j + 1] - matrix[i][j - 1]) / 2;
}
grad[i][j] = sqrt(dx * dx + dy * dy);
}
}
return grad;
}
int main() {
vector<vector<double>> matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
vector<vector<double>> grad = gradient(matrix);
for (int i = 0; i < grad.size(); i++) {
for (int j = 0; j < grad[0].size(); j++) {
cout << grad[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
这个函数使用了一个二维向量来表示矩阵,并返回一个表示梯度的二维向量。对于每个元素,它计算了它周围元素的差异,并使用勾股定理计算出梯度大小。这个函数只能处理二维矩阵。
阅读全文