我想生成一个类似于此的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
非常感谢任何帮助。
非常感谢。
答案 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