matlab中的简化,如何在Python和Matlab中简化for循环

我修改了下面的代码后,有机会在我的机器上并排运行你的。还有几个问题(假设在最后一个循环中会变大吗?,什么是dz?)。你在运行这个之前遇到的问题是我忘了idx_矩阵必须是逻辑的。在dz=0.1;

alpha = [1e-4,1e-3,1e-4,1e-1,1e-2,1e-3,1e-6,1e-3];

zeta = alpha / (dz*dz);

nz = 101;

l=[0.3,0.1,0.2,0.1,0.1,0.1,0.2];

wz = cumsum(l*(nz-1));

nl = length(l);

A = zeros(nz);

i=1;

%replaces 1st loop

j_start = 2;

j_end = wz(i)-1;

idx_matrix = false(size(A));

idx_matrix(j_start:j_end,j_start:j_end) = eye(j_end-j_start+1);

A(idx_matrix) = -2*zeta(1,1);

idx_matrix(idx_matrix) = false;

idx_matrix(j_start:j_end,j_start-1:j_end-1) = eye(j_end-j_start+1);

A(idx_matrix) = zeta(1,1);

idx_matrix(idx_matrix) = false;

idx_matrix(j_start:j_end,j_start+1:j_end+1) = eye(j_end-j_start+1);

A(idx_matrix) = zeta(1,1);

%cicle to n-layers

for i=2:nl

%replaces 3rd loop

j_start = wz(i-1);

A(j_start,j_start) = -zeta(1,i-1)-zeta(1,i);

A(j_start,j_start-1) = zeta(1,i-1);

A(j_start,j_start+1) = zeta(1,i);

%replaces 4th loop

j_start = wz(i-1)+1;

j_end = min(wz(i),size(A,2)-1);

idx_matrix = false(size(A));

idx_matrix(j_start:j_end,j_start:j_end) = eye(j_end-j_start+1);

A(idx_matrix) = -2*zeta(1,i);

idx_matrix(idx_matrix) = false;

idx_matrix(j_start:j_end,j_start-1:j_end-1) = eye(j_end-j_start+1);

A(idx_matrix) = zeta(1,i);

idx_matrix(idx_matrix) = false;

idx_matrix(j_start:j_end,j_start+1:j_end+1) = eye(j_end-j_start+1);

A(idx_matrix) = zeta(1,i);

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值