2014-04-07 56 views
0

我想產生一個100×100矩陣,它類似於此 其中,第一行和最後一行是不同 和中間的人都是相同的,但通過1100x100的矩陣MATLAB編碼

這裏一起轉移是我有一個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

作爲邊注,使用'溶液= INV(A)* B'是效率較低,比'溶液= A \ B' –

回答

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; 
+0

對不起,我想讓B在一列不連續的列 和如果我不想在中間0,但讓我們說0.8? – user3508294

+0

我按照你的建議編輯了答案。 – Mathias

0

代碼來創建是:

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用相同的模板。

+0

你怎麼辦乙不太穩定? 因爲它是1x10矩陣? – user3508294

+0

B =零(8,1); B(1)= 62; B(10)= 82; – honi

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