虚数部分が非常に小さいかどうかを確認し、0でなければならない非常に小さい非ゼロの虚数部分を生じる浮動小数点エラーを取り除くためにゼロに設定する必要があります。次のように複素数の虚数部をゼロに設定するにはどうすればよいですか?
私のコードは次のとおりです。残念ながら、コンパイラは単に返す
kz2 = SQRT((n2*(2.0*PI*eta))**2 - kxarray(p)**2)
kz1 = SQRT((n1*(2.0*PI*eta))**2 - kxarray(p)**2)
if (aimag(kz2) < 0.0005) then
kz2 = (REAL(kz2),0.0)
end if
if (aimag(kz1) < 0.0005) then
kz1 = (REAL(kz1), 0.0)
end if
:
gaussian1.f90:122.18:
kz2 = (REAL(kz2),0.0)
1
Error: Expected a right parenthesis in expression at (1)
gaussian1.f90:126.18:
kz1 = (REAL(kz1), 0.0)
1
Error: Expected a right parenthesis in expression at (1)
を何かアドバイスをいただければ幸いです - 私もこの問題について正しい道を行くのですか?
UPDATE:私は使用して問題を回避するために管理:
if (aimag(kz2) < 0.0005) then
kz2 = real(kz2)
end if
if (aimag(kz1) < 0.0005) then
kz1 = real(kz1)
end if
しかし、私は、私は非ゼロ量の虚部を設定したい場合は何をしますか?
ありがとうございます。 複雑な変数の代入は、変数や式を引数として取ることしかできないと思いますか? 私は以前はC/Python/Matlabでプログラミングに慣れていましたので、直接割り当てではなく関数を使って設定しなければならないという事実は私には分かりませんでした。 このような些細な質問には申し訳ありません。 –
@AlexMcMurray:はい、複雑な代入の '(、)'表記は定数に対してのみ機能します。コンパイル時に知られていない量を使うには 'cmplx'関数が必要です。私はこれを含めるために私の答えを更新します。この回答があなたの問題を解決した場合、あなたは[それを受け入れる]と考えるかもしれません(http://meta.stackexchange.com/a/5235/163653)。 – talonmies