gpt4 book ai didi

matlab - 以更有效的方式生成矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 20:13:46 25 4
gpt4 key购买 nike

我正在寻找一种更有效的方法来制作以下矩阵 L:

      |2 -2  0 0 0     |
|-1 2 -1 0 0 0 |
|0 -1 2 -1 0 |
(1/2).|0 0 -1 2 -1 |
| . . . |
| 0 0 -1 2 -1|
| 0 0 -2 2|

到目前为止我得到了这个:

L = diag(ones(n,1)*2)- ...
diag(ones(n-1,1),1) - ...
diag(ones(n-1,1),-1);
L(1,2) = -2;
L(end,end-1) = -2;
L = L/2;

例如对于 n=5 它产生:

L =

1.0000 -1.0000 0 0 0
-0.5000 1.0000 -0.5000 0 0
0 -0.5000 1.0000 -0.5000 0
0 0 -0.5000 1.0000 -0.5000
0 0 0 -1.0000 1.0000

n 可以是 [5 1000] 范围内的值。

最佳答案

相反,尝试将二维卷积与 conv2 结合使用其中输入是单位矩阵,水平 [-0.5 1 -0.5] 过滤器抽头是内核。这很好,因为您可以将此单位矩阵视为图像并且您正在执行 edge detection只有当内核的中心直接位于 1 的顶部时,输出中的系数才会为 1。如果内核中心不在 1 上,但任何元素都接触到 1,则结果将是-0.5。这很好,但它不处理顶部和底部行的边界情况。不幸的是,您必须手动修改。我们可以避免使用两个语句来修改元素,转而使用列优先索引。此解决方案肯定优于使用 3 个 diag 调用恕我直言。

n = 5;
L = conv2(eye(n), [-0.5 1 -0.5], 'same');
L([n+1 end-n]) = -1;

结果:

>> L

L =

1.0000 -1.0000 0 0 0
-0.5000 1.0000 -0.5000 0 0
0 -0.5000 1.0000 -0.5000 0
0 0 -0.5000 1.0000 -0.5000
0 0 0 -1.0000 1.0000

关于matlab - 以更有效的方式生成矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42098673/

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