100x100矩阵MATLAB编码

时间:2014-04-07 19:57:43

标签: matlab matrix

我想生成一个类似于此的100x100矩阵 第一行和最后一行是不同的 中间的都是一样的,但是一直向前移动。

以下是我对10x10矩阵的看法:

>> A=[0.8 -0.2 0 0 0 0 0 0 0 0;
-0.3 0.5 -0.2 0 0 0 0 0 0 0;
0 -0.3 0.5 -0.2 0 0 0 0 0 0;
0 0 -0.3 0.5 -0.2 0 0 0 0 0;
0 0 0 -0.3 0.5 -0.2 0 0 0 0;
0 0 0 0 -0.3 0.5 -0.2 0 0 0;
0 0 0 0 0 -0.3 0.5 -0.2 0 0;
 0 0 0 0 0 -0.3 0.5 -0.2 0;
0 0 0 0 0 0 0 -0.3 0.5 -0.2;
0 0 0 0 0 0 0 0 -0.3 0.7;]

B= [62; 0; 0; 0; 0; 0; 0; 0; 0; 82]

>> solution=inv(A)*B

非常感谢任何帮助。

非常感谢。

3 个答案:

答案 0 :(得分:4)

您想要的内容称为Band Matrix,另请参阅this

n=10;
e=ones(n,1);
A=spdiags([-0.3*e 0.5*e -0.2*e],-1:1,n,n)

现在这是一个稀疏矩阵,其中没有存储零,这可以提高存储和速度。如果您想要一个完整的矩阵,只需使用A=full(spdiags(...))

B执行:

B=ones(10,1)*0.8;
B(1) =62;
B(10)=82;

答案 1 :(得分:0)

创建A的代码是:

A = zeros(100);
A(1,1:2) = [0.8 -0.2];
for i = 2:99
    A(i,i-1:i+1) = [-0.3 0.5 -0.2];
end
A(100,99:100) = [-0.3 0.7];

然后你可以使用相同的模板做B。

答案 2 :(得分:0)

方法1:

%%// Only this part would change when you go from your sample size of 10 to 100
N = 100; 

A = zeros(N); %%// Initialize
A(1:size(A,1)+1:end) = 0.5; %%// Diagonal values
A(2:size(A,1)+1:end) = -0.3;%%// Left-to-diagonal values
A(size(A,1)+1:size(A,1)+1:end) = -0.2;%%// Right-to-diagonal values
A([1 end]) = [0.8 0.7]; %% Different scalars at the top and end

方法2:

N = 100; %%// Size of matrix

L = -0.3; %%// Left to diagonal values
D = 0.5;  %%// Diagonal values
R = -0.2;  %%// Right to diagonal values

A = D*diag(ones(N,1)) + R*diag(ones(N-1,1),1) + L*diag(ones(N-1,1),-1);
A([1 end]) = [0.8 0.7]; %% Different scalars at the top and end