请帮我给出任务一的matlab代码
时间: 2024-10-29 18:10:29 浏览: 5
以下是任务一的 MATLAB 代码,用于生成 CSR 格式的三对角矩阵 `A`:
```matlab
function A = csr_tri_diag_matrix(n)
% 初始化 val, col_ind 和 row_ptr
A.val = [];
A.col_ind = [];
A.row_ptr = zeros(n + 1, 1);
% 填充 val 和 col_ind
for i = 1:n
if i == 1
A.val = [A.val, 2, -1];
A.col_ind = [A.col_ind, 1, 2];
elseif i == n
A.val = [A.val, -1, 2];
A.col_ind = [A.col_ind, n-1, n];
else
A.val = [A.val, 2, -1, -1];
A.col_ind = [A.col_ind, i, i-1, i+1];
end
end
% 填充 row_ptr
A.row_ptr(1) = 1;
for i = 1:n
A.row_ptr(i+1) = A.row_ptr(i) + length(find(A.col_ind >= i & A.col_ind <= i));
end
end
```
### 代码解释:
1. **初始化**:
- `A.val` 存储非零元素。
- `A.col_ind` 存储每个非零元素所在的列索引。
- `A.row_ptr` 存储每行第一个非零元素在 `val` 中的位置。
2. **填充 `val` 和 `col_ind`**:
- 对于第 1 行,只有一条对角线上的 2 和下一条对角线上的 -1。
- 对于第 n 行,只有一条对角线上的 2 和上一条对角线上的 -1。
- 对于中间的行,有三条对角线上的 2 和上下两条对角线上的 -1。
3. **填充 `row_ptr`**:
- `A.row_ptr(1)` 始终为 1。
- `A.row_ptr(i+1)` 是 `A.row_ptr(i)` 加上当前行的非零元素数量。
### 使用示例:
```matlab
n = 16;
A = csr_tri_diag_matrix(n);
disp(A.val);
disp(A.col_ind);
disp(A.row_ptr);
```
运行上述代码后,`A` 将包含 CSR 格式的三对角矩阵。你可以通过 `A.val`、`A.col_ind` 和 `A.row_ptr` 查看矩阵的非零元素及其位置。
阅读全文