将矩阵元素分配给数据集中的变量
Assigning matrix elements to variables in a data set
你好,我是 Matlab 新手。
我写了这个脚本:
k2=2*pi();
z1 = 1;
z2 = 2;
z3 = 4;
for l = linspace(0,1,11)
A = [ -1 1 1 0 ; 1 z1/z2 -z1/z2 0 ; 0 exp(-i*k2*l) exp(i*k2*l) -1 ; 0 exp(- i*k2*l) -exp(i*k2*l) -z2/z3];
B = [ 1 ; 1 ; 0 ; 0];
D = inv(A);
C = mtimes(D,B) ;
display(C)
r = C(1,1); % this is supposed to set r = the 1,1 element in the matrix C
t = C(1,4); % see above
end
我从 C 中获取 r 和 t 值的想法似乎行不通。我怎样才能正确地做到这一点?
我还想为 l 的每个值绘制 |r|、|t|、arg(r) 和 arg(t) 的图形,我的 for 循环覆盖了 r 和 t 的值?我怎样才能在每个循环中绘制一个点,或者让 r 和 t 分配新值,以便它们成为数据列表。
非常感谢!
Matlab 将矩阵的第一维设置为行号(即 y 位置)。
所以你想要 t=C(4, 1)
,因为你应该看到 C 的大小是 4x1。请注意,Matlab 非常擅长抑制单例维度,因此您也可以执行 C(1)
和 C(4)
.
对于你的第二点,你想在每个循环中设置 r 和 t 的特定元素。这与在设置值时访问 C 的特定元素时相同。对于您的情况,您可以使用索引 l
来确定元素。请记住,在 matlab 中,数组从元素 1 开始(而不是许多其他语言中的 0)。所以你想要 r(l+1)=C(1);
之类的东西(或将 l 更改为从 1 开始)。
在更一般的情况下,如果您出于某种原因没有循环整数,您可能需要创建一个单独的计数器变量,您可以在循环中增加它。当事先知道大小时,通常通过 r=zeros(11, 1)
或类似的方式预分配此类数组也是一种很好的做法(注意:zeros(11)
是一个 11x11 矩阵)。这在这种情况下并不重要,但会大大增加大型多维数组的执行时间,因此是一个很好的做法。
你好,我是 Matlab 新手。
我写了这个脚本:
k2=2*pi();
z1 = 1;
z2 = 2;
z3 = 4;
for l = linspace(0,1,11)
A = [ -1 1 1 0 ; 1 z1/z2 -z1/z2 0 ; 0 exp(-i*k2*l) exp(i*k2*l) -1 ; 0 exp(- i*k2*l) -exp(i*k2*l) -z2/z3];
B = [ 1 ; 1 ; 0 ; 0];
D = inv(A);
C = mtimes(D,B) ;
display(C)
r = C(1,1); % this is supposed to set r = the 1,1 element in the matrix C
t = C(1,4); % see above
end
我从 C 中获取 r 和 t 值的想法似乎行不通。我怎样才能正确地做到这一点?
我还想为 l 的每个值绘制 |r|、|t|、arg(r) 和 arg(t) 的图形,我的 for 循环覆盖了 r 和 t 的值?我怎样才能在每个循环中绘制一个点,或者让 r 和 t 分配新值,以便它们成为数据列表。
非常感谢!
Matlab 将矩阵的第一维设置为行号(即 y 位置)。
所以你想要 t=C(4, 1)
,因为你应该看到 C 的大小是 4x1。请注意,Matlab 非常擅长抑制单例维度,因此您也可以执行 C(1)
和 C(4)
.
对于你的第二点,你想在每个循环中设置 r 和 t 的特定元素。这与在设置值时访问 C 的特定元素时相同。对于您的情况,您可以使用索引 l
来确定元素。请记住,在 matlab 中,数组从元素 1 开始(而不是许多其他语言中的 0)。所以你想要 r(l+1)=C(1);
之类的东西(或将 l 更改为从 1 开始)。
在更一般的情况下,如果您出于某种原因没有循环整数,您可能需要创建一个单独的计数器变量,您可以在循环中增加它。当事先知道大小时,通常通过 r=zeros(11, 1)
或类似的方式预分配此类数组也是一种很好的做法(注意:zeros(11)
是一个 11x11 矩阵)。这在这种情况下并不重要,但会大大增加大型多维数组的执行时间,因此是一个很好的做法。