Matlab:有没有办法使用像Macros这样的东西?

时间:2015-11-24 12:44:57

标签: matlab macros

我有一个以矩阵A为输入的函数。这些函数应该执行阻塞算法。所以,我想对A的子阵列采取行动,让我们称它们为A00,A01,A10等。例如,

A00 = A(1:i*b,1:i*b);

为简化算法,我想在算法中使用名称A00,A01,A10等。但我想写入A。

这是一个小例子:

n = 4; A = zeros(n,n); for i = [1:n*n] A(i) = i; end;

i=1;b=2;

A00 = A(1:i*b,1:i*b);       % here I want to define something like a macro

A00 = eye(b,b);             % here I want to write into A

display(A);

输出应为

A =

 1     0     9    13
 0     1    10    14
 3     7    11    15
 4     8    12    16

是否有像maclab或指针或Matlab中的其他内容可以让我做到这一点?

我的目标是让Matlab代码更具可读性,因为我多次在A00上行动,而且我不想每次都写A(1:i*b,1:i*b)

1 个答案:

答案 0 :(得分:1)

简单:

IX       = {1:i*b,1:i*b};
A(IX{:}) = eye(b,b);
B(IX{:}) = rand(b,b);

最接近指针的概念(就指针算术而言)是MATLAB中的索引。可以在几个数组上使用相同的索引(只要索引有效)。但您仍需要将索引“推迟”到正确的数组变量/评估结果。

您的索引可能采用任何接受的表单:线性,下标或逻辑。

我应该警告你,使用i作为变量的名称是在寻找麻烦。 ij保留用于定义具有虚部的数字文字(即“常量”)。