您好我是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)的图形,my for循环会覆盖r和t的值吗?如何为每个循环绘制一个点或使r和t分配新值以使它们成为数据列表。
非常感谢!
答案 0 :(得分:1)
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矩阵)。这在这种情况下并不重要,但可以大大增加大型多维阵列的执行时间,因此这是一个很好的做法。