for文にテキストボックスの値を入れてループさせる方法を教えてください。
조회 수: 14 (최근 30일)
이전 댓글 표시
私はfor文入る前にtest_dataの内容をそれぞれ代入し、for文で1つずつ回るのではないかと考えていました。しかしこれではY(from,to)の中にいれてしまうと(from,to)すべての場所に同じ値が入ってしまうという結果になりました。
Y =
0.0400 - 1.7992i 0.0400 - 1.7992i 0.0400 - 1.7992i 0.0400 - 1.7992i
0.0400 - 1.7992i 0.0400 - 1.7992i 0.0400 - 1.7992i 0.0400 - 1.7992i
0.0400 - 1.7992i 0.0400 - 1.7992i 0.0400 - 1.7992i 0.0400 - 1.7992i
0.0400 - 1.7992i 0.0400 - 1.7992i 0.0400 - 1.7992i 0.0400 - 1.7992i
Y(3,1)の場合は本来想定している結果はfrom3,to1の場合は0になるはずなのにほかの値と同じになってしまっています。
Y =
0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
0.0400 - 1.7992i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
なので、テキストボックスから値を取り出してfor文で回す方法が知りたいです。お願いします。
댓글 수: 0
채택된 답변
Atsushi Ueno
2022년 1월 5일
편집: Atsushi Ueno
2022년 1월 5일
① Y(from,to) = 0.0400 - 1.7992i のfromとtoの添え字が無く、fromやtoの行列全体を指定する事になるので:Y([1,2,2,3,3,4,1,2,3,4], [2,1,3,2,4,3,1,2,3,4]) = 0.0400 - 1.7992iとなります。これだと、1度でY(1:4,1:4)全てにスカラ値を代入してしまいます。for文で何度繰り返しても同じです。
② from_dataからfrom, to, r, x, bにコピーすると、コピー先はそれぞれ10行1列のベクトルになります。
fromの各要素にアクセスする場合はfrom(3,1)の様に書きます。1次元ベクトルなのでfrom(3)も可能です。(詳細は線形インデックスを参照) したがって、下記の様にプログラムを変更すべきです。
for ii = 1:6
Y(from(ii), to(ii)) = 1 / (r(ii) + ii * x(ii)) + ii * b(ii) / 2;
end
댓글 수: 2
Atsushi Ueno
2022년 1월 5일
回答の一部に誤りがありました。
% 1度でY(1,2), Y(2,1), Y(2,3), Y(3,2), Y(3,4), Y(4,3), Y(1,1), Y(2,2), Y(3,3), Y(4,4)
% の全てにスカラ値を代入してしまいます。
は誤りで、Y([1,2,2,3,3,4,1,2,3,4], [2,1,3,2,4,3,1,2,3,4])のようなindexingだとY(1:4,1:4)全てに代入されます
詳細は下記の説明が詳しいです。一部を下記に抜粋します。
% 行列から散らばった要素を選択する方法について、しばしば混乱が生じます。
% 例えば、A から (2,1), (3,2), (4,4) の要素を抽出したいとします。
% A([2 3 4], [1 2 4]) という式では、思い通りにいきません。
% この図は、2つの下付き添字のインデックスがどのように機能するかを示しています。
% 行列から散在する要素を抽出するには、別のスタイルのインデックス付けが必要です。
추가 답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!