【问题标题】:100x100 Matrix MATLAB coding100x100 矩阵 MATLAB 编码
【发布时间】:2014-04-07 19:57:42
【问题描述】:

我想生成一个与此类似的 100x100 矩阵 其中第一行和最后一行是不同的 中间的都是一样的,只是移动了1。

这是一个 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

非常感谢任何帮助。

非常感谢。

【问题讨论】:

  • 附带说明,使用solution=inv(A)*B 的效率和稳定性不如solution=A\B

标签: matlab matrix


【解决方案1】:

你想要的称为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;

【讨论】:

  • 对不起,我想让 B 在一列而不是一行中下降,如果我不想在中间出现 0 但假设是 0.8 怎么办?
【解决方案2】:

创建 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。

【讨论】:

  • 你怎么做B?因为它是一个 1x10 矩阵?
  • B = zeros(8,1); B(1) = 62; B(10) = 82;
【解决方案3】:

方法一:

%%// 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多