我在matlab中创建这个矩阵时遇到了麻烦,基本上我需要创建一个矩阵,其中-1穿过中心对角线,然后是对角线外面的4s(下面的例子).所有其他值都可以为零.
A5 = [-1 4 0 0 0;
4 -1 4 0 0;
0 4 -1 4 0;
0 0 4 -1 4;
0 0 0 4 -1];
Run Code Online (Sandbox Code Playgroud)
我尝试过使用命令,v = [4]; D = diag(v)
但只适用于中心对角线.
这也可以使用toeplitz矩阵完成:
function out = tridiag(a,b,c,N)
% TRIDIAG generates a tri-diagonal matrix of size NxN.
% lower diagonal is a
% main diagonal is b
% upper diagonal is c
out = toeplitz([b,a,zeros(1,N-2)],[b,c,zeros(1,N-2)]);
Run Code Online (Sandbox Code Playgroud)
>> tridiag(4,-1,4,5)
ans =
-1 4 0 0 0
4 -1 4 0 0
0 4 -1 4 0
0 0 4 -1 4
0 0 0 4 -1
Run Code Online (Sandbox Code Playgroud)
注意#1:当您想要的输出是对称的时,您可以省略第二个输入toeplitz.
注意#2:随着矩阵的大小增加,有一点将它存储起来更有意义sparse,因为这可以节省内存并提高性能(假设你的矩阵确实很稀疏,即大部分由零组成,因为它发生了用三对角矩阵).一些有用的功能spdiags,FEX和FEX.sptoeplitzblktridiag
| 归档时间: |
|
| 查看次数: |
434 次 |
| 最近记录: |