行列の積の計算が上手​くいきません(for​文、ヒルベルト行列)

5 views (last 30 days)
wataru suzuki
wataru suzuki on 25 Mar 2020
Commented: wataru suzuki on 27 Mar 2020
画像再構成のプログラムのため、MATLAB外のメモ帳などから8×8のヒルベルト行列を読み込み、
MATLAB上で計算した位相回転因子(ここでは関数、PHX、PHY)である8×8のヒルベルト行列との積を取りたいです。
しかしメモ帳から読み込まれる値は正しく8×8なのですが、MATLAB上のは9×9の行列になっています。
その為、計算できないエラーが発生しています。1~8列目までの範囲の値は正しいので読み取り範囲の改善などのプログラムの問題だと考えています。
これはforの使い方が原因なのでしょうか?なぜ9×9の範囲で出力されているかといった理由や
9×9の行列を8×8に読み取り範囲に直し、計算する方法などを教えていただけると嬉しいです…
%外部txtデータ(メモ帳など)からデータの読み取り
filename = 'sinogramRPfft.txt';
[A,delimiterOut]=importdata(filename)
%ピクセル入力用文字Nの設定
N=input(prompt)
s = N;
H = zeros(s);
%読み込んだデータをMATLABの行列に
for c = 1:s
for r = 1:s
H(r,c) = A(r,c);
end
end
%読み込んだデータの実部と虚部を分ける
%AR=読み取った行列の実部、AI=読み取った行列の虚部
%実部
for c = 1:s
for r = 1:s
AR(r,c) = real(A(r,c));
end
end
%虚部
for c = 1:s
for r = 1:s
AI(r,c) = imag(A(r,c));
end
end
%位相回転因子実部(COS)について
for c = 1:s
for r = 1:s
PHX(r,c)=cos(2.*pi.*r.*c/N);
end
end
%位相回転因子虚部(SIN)について
for c = 1:s
for r = 1:s
PHY(r,c)=sin(2.*pi.*r.*c/N);
%PHY(9,9)=[]
end
end
disp(PHX)
実行結果
0.7071 0.0000 -0.7071 -1.0000 -0.7071 -0.0000 0.7071 1.0000 1.0000
0.0000 -1.0000 -0.0000 1.0000 0.0000 -1.0000 -0.0000 1.0000 1.0000
-0.7071 -0.0000 0.7071 -1.0000 0.7071 0.0000 -0.7071 1.0000 1.0000
-1.0000 1.0000 -1.0000 1.0000 -1.0000 1.0000 -1.0000 1.0000 1.0000
-0.7071 0.0000 0.7071 -1.0000 0.7071 -0.0000 -0.7071 1.0000 1.0000
-0.0000 -1.0000 0.0000 1.0000 -0.0000 -1.0000 -0.0000 1.0000 1.0000
0.7071 -0.0000 -0.7071 -1.0000 -0.7071 -0.0000 0.7071 1.0000 1.0000
1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000
1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000
  4 Comments
Hiroyuki Hishida
Hiroyuki Hishida on 26 Mar 2020
こんにちは。
(一部、投稿者むけではなく、後日にこれを見られる方向けの書き方をしておりますが、ご了承ください)
同じくR2019aで実行してみましたが、問題なく8 x 8で読み込めております。スクリーンショット画像を添付します。
オリジナルのスクリプトは添付されたものと若干異なるのだと思いますが、これはpromptが定義されていないのでエラーとなります。
%ピクセル入力用文字Nの設定
N=input(prompt)
例えばこうするとエラーはでません。
%ピクセル入力用文字Nの設定
prompt = 'hoge ';
N=input(prompt)
また、行列のコピーでfor文をまわされておりますが、
%読み込んだデータをMATLABの行列に
for c = 1:s
for r = 1:s
H(r,c) = A(r,c);
end
end
MATLABはスカラ、ベクトル、マトリクスを一緒の記述で取り扱うことができますので、こうできます。
%読み込んだデータをMATLABの行列に
H=A;
他の行列も同様です。この他、MATLABの機能については、以下あたりを参照してみてください。https://jp.mathworks.com/help/matlab/learn_matlab/matrices-and-arrays.html
長々と書きましたが、よろしくおねがいします。
菱田
※ヒルベルト行列というよりも、複素数が登場しているのでヒルベルト空間でしょうか?
wataru suzuki
wataru suzuki on 27 Mar 2020
こんにちは、ご返信ありがとうございます。
おかげで様で助かりました

Sign in to comment.

Answers (0)

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!