プロが教えるわが家の防犯対策術!

Google画像検索で比熱の温度依存性のシミュレーション結果のグラフを見てみると、以下のように、0[K]付近でショットキー型のピーク以外に比熱が急激に上昇する様子がたくさん見られました。
http://www.geocities.jp/supermisosan/hinetsu.png
http://blogs.c.yimg.jp/res/blog-f9-e8/resort_to_ …
http://muchongimg.xmcimg.com/data/edu/1d/56/1417 …
手計算で解析的に解くと画像のように比熱の山は1つになるはずなのですが、なぜ皆してこのようなシミュレーション結果を出しているのでしょうか。計算機の性能に由来する誤差によるものなのでしょうか。

「比熱の低温での振る舞い」の質問画像

質問者からの補足コメント

  • どう思う?

    正方格子上に並んだ電子に対するイジングモデルのモンテカルロシミュレーションです。

      補足日時:2017/01/11 00:15

A 回答 (6件)

有限個のスピンの場合低温で計算がうまくいかないというのは、


無限系の状態密度はエネルギーの連続関数であるのに対し、有限個のスピンでは離散的なエネルギーにならざるを得ません。したがって、エネルギーの間隔がkTよりも広くなるくらいの低温では、離散的であることの効果が顕著になって無限系の結果とはずれてしまう
という事でしょう。
ただ、有限個のスピンであっても比熱がT→0の極限で0になることは変わりませんから、低温で比熱が上昇してしまっている事の直接的な原因にはならないように思います。


微分を具体的にどう計算しているのか不明ですが、仮に数値微分を計算しているのであれば、低温ではTが少し変化しただけでZの値が劇的に変わる事になるため、数値微分の誤差も大きくなるはずです。
もしもこれが問題になっているとしたら、プログラムの分配関数の計算の部分を
Z(T)=exp(-E0/kT) 
になるように置き換えた時にも同じ事が起こるはずですから、このように置き換えた時に、内部エネルギー、比熱がどう求まるのか確かめてみるのがよいでしょう。(プログラムを走らせてもいいし、下記のように手計算するのでもいいでしょう)
※あるいは、数値微分の誤差の大きさを具体的に計算してみるとか、温度の間隔を小さくしてみた時にどうなるかを見たりしてもわかるはずです。

例えば、
∂lnZ/∂T=(lnZ(T+ΔT)-lnZ(T))/ΔT
と計算しているのであれば、
U(T)=kT^2 ∂lnZ/∂T = E0 T/(T+ΔT)
と計算している事になるはずです。解析的な計算だとU(T)=E0で一定になるはずが低温でE0が減少してしまう(したがって比熱が上昇するように見える)事がわかるでしょう。この計算の場合T<10ΔTくらいで比熱の上昇が見えてくるかと思います。
    • good
    • 1
この回答へのお礼

解決しました

なるほど、数値微分の誤差に原因があったのですね。手計算で理解した後に温度の間隔をこれまでの1/50まで小さくして計算してみたら、見事に異常な振る舞いがなくなってうまくプロットできました!たくさんアドバイスをいただいてありがとうございました。

お礼日時:2017/01/17 03:45

> 低温比熱に効くのは低いエネルギー状態とその状態密度だから


> 有限個の数値計算では一般に低温の性質はうまく表現できないというのは、
> 比熱はエネルギーの分散で表されるからそのエネルギー準位がシンプル過ぎるような有限個の系では
> 正確に計算できないということでしょうか?

そう思って結構です.

> なぜ高温の場合は低温のときと違ってうまくグラフ化できているのでしょうか。

小さなエネルギースケール(低温)見れば細かい構造まで問題になりますが,
大きなエネルギースケール(高温)で見れば細かい構造は問題にならないということです.
細かい構造と特徴づけるエネルギーを E_s としますと,
k_B T >> E_s では細かい構造の効果は見えないし,
k_B T << E_s では物理量に細かい構造の効果が反映されます.
モデルによりますが,普通は系のサイズが大きくなるほど E_s は小さくなりますので,
k_B T_s = E_s で決まる「サイズ効果が重要になる温度 T_s」はサイズを大きくすると
小さくなります.
T >> T_s なら今のサイズで無限系の状況に十分近い,
T << T_s なら今のサイズでは無限系の状況とはほど遠い,
ということになります.

なお,T_s は転移温度 T_c とは全く別のものです,念のため.

似た状況は転移温度の付近でも起こります.
2次元正方格子の強磁性イジングモデルでは比熱が転移点で対数的に発散しますが,
数値計算では発散がなまってピークに見えます.
系のサイズを大きくするほどピークが鋭くなっていきます.
    • good
    • 1
この回答へのお礼

助かりました

定性的に理解できてとても助かりました。ありがとうございます。

お礼日時:2017/01/17 03:18

まず,前のご質問「ショットキー比熱に磁場の効果を加えたら」


に対する私の回答は読まれたのでしょうか?

さて,モンテカルロ法をやったり分配関数を定義にしたがって直接計算したということですね.
分配関数を直接計算するなら,N×N の正方格子として N^2 個のスピンがあります.
可能な状態数は 2^(N^2) で,
各々についてエネルギーを計算しボルツマン因子の和を取ることになります.
すなわち,有限個のスピンについての計算しかできません.
モンテカルロでも有限個に限られることは同様です.
スピンの個数が多くなるほど,細かい構造がいっぱい出てきて,
近いエネルギー状態が多くなります.
低温比熱に効くのは低いエネルギー状態とその状態密度ですから,
有限個の数値計算では一般に低温の性質はうまく表現できません.
ちょっと数値計算やる物理屋には常識です.
これは計算機の丸め誤差というレベルの話ではなくてもっと本質的な困難です.
もちろん,実際の計算では先に丸め誤差が重要になることもあります.

> 手計算で解析的に解くと画像のように比熱の山は1つになるはずなのですが、

2次元イジングモデルの解析解(1944 年の Onsager に始まる)をグラフにしたということでしょうか?
このようなグラフにはなりません.
前の質問「ショットキー比熱に磁場の効果を加えたら」で回答しましたように,
転移点のところで比熱が発散します.
2次元イジングモデルなら対数的に発散します.

余計なことかも知れませんが,卒業研究か何かで教員の指導の元にやっているのなら,
その方に議論をお願いした方がよいように思われます.
ちょっとコメントして済む話ではないので,
ここでやりとりして理解してもらうのはなかなか大変です.
    • good
    • 1
この回答へのお礼

ありがとう

ありがとうございます。
確かに私がグラフにしたのはイジングモデルではなくスピン間相互作用の無い2準位系モデルの比熱でした。東大の小形先生のノート
http://ogata.phys.s.u-tokyo.ac.jp/ogata/KogiNote …
の式(9)を参考にしたのですが、間違えてしまいました。すみません。

低温比熱に効くのは低いエネルギー状態とその状態密度だから有限個の数値計算では一般に低温の性質はうまく表現できないというのは、比熱はエネルギーの分散で表されるからそのエネルギー準位がシンプル過ぎるような有限個の系では正確に計算できないということでしょうか?なぜ高温の場合は低温のときと違ってうまくグラフ化できているのでしょうか。

お礼日時:2017/01/15 18:56

基本的にこういう場に専門家はいないと思うべきで、私を含めてここにいる人が知らないというだけで、専門家の間でも知られていないなどと考えない方がいいですよ。


というか、そもそも心当たりがないと言っているのではなく、理由を考えるのに情報が少なすぎると言っているだけなのですけどね。


とりあえず確認したいのですが、
他の人の計算結果を見ても似た振る舞いがあったから、貴方のプログラムの場合と原因が共通なのではないかと思って最初に他の人の結果について質問しただけで、
基本的には貴方のプログラムで低温で比熱が正しく求まっていない理由が分かれば十分と思ってよいでしょうか?
もしそうであれは計算手法が違う・詳細は分からないものとの比較はあまり意味がないように思います。(低温で比熱が上昇するという振る舞いが正しいのかが分からないのなら、話は変わりますが今は解析解があるとの事なので低温での正しい振る舞いは既知です)

とりあえず答えがyesだとおもって貴方のプログラムの事に絞って書くことにします。

アルゴリズムが分からない所だらけですが、とにかく分配関数を求めているようですので、低温では丸め誤差が問題になります。貴方の考えている温度で丸め誤差が問題になるのかを知りたいのであれば
・基底状態のエネルギーE0
・第一励起状態のエネルギーE1
・計算した温度の最低値(kTの値のみで十分)
をお調べになるのがよいでしょう。
もしもexp(-E1/kT)/exp(-E0/kT)が10^(-15)程度以下なら、丸め誤差を無視できません。
    • good
    • 1
この回答へのお礼

ありがとう

ありがとうございます。
eatern27様含め、非常に具体的で的確な回答をいただくことが多いので、むしろ専門家の方ばかりだと思っていました。

まさにyesです。詳しく教えていただいてありがとうございます。exp(-E1/kT)/exp(-E0/kT)を計算してみると10^(-9)程度だったので丸め誤差が原因ではないかも知れません。

お礼日時:2017/01/15 18:42

モンテカルロ法とだけ言われてもアルゴリズム自体が一意に決まるわけではないし、アルゴリズムが同じでもパラメータの選び方の違いもあるので、解析解からずれる理由なんて可能性が多すぎて特定のしようがありません。



あなたの計算についても、プログラムだけ見せられても他人の書いたプログラムなんて暗号みたいなものですから、とてもじゃないですがノーヒントで解読する気にはなれませんよ。
・具体的にどういう系が対象で、何を計算しているのか
・そのためにどういうアルゴリズムで計算しているのか
みたいな事を書いてくれないと、どういう計算をしているのかは基本的にわからないと思ってください。

一般論としては最終的な結果がおかしいと感じたのであれば、その途中はおかしくないのか、各ユーザー関数が想定通りに動いているのかという事を確かめて原因の可能性を極力分離しましょう。
例えば「分配関数を使う」というのが、「分配関数の温度依存性を求める」という意味であるのなら、分配関数が正しく求まっているかどうかを調べるだけでも問題のある部分がかなり狭まるはずです。
    • good
    • 1
この回答へのお礼

ありがとうございます。
他のサイトの方が使った詳細なアルゴリズムはわかりかねますが、検索した多くのシミュレーション結果で0[K]付近での比熱の異常な振る舞いが見られたので、この異常な振る舞いがある程度有名なものであると踏んで質問しました。しかしeatern27様にお心当たりがないということは、これは有名なものではなく単なるプログラミングのミスだということのようですね。
ちなみに分配関数を使う方法とは、立方格子の系の格子点に電子が並んでいると仮定し、各スピンに1/2または-1/2というスカラー値を割り当て、イジングモデルにしたがって系の分配関数Zを求め、温度T、逆温度βに対して
内部エネルギーE=-∂lnZ/∂β
比熱c=∂E/∂T
を使って比熱の温度依存性をプロットする方法です。

お礼日時:2017/01/12 21:49

何の比熱をどのように計算したのですか?

    • good
    • 0
この回答へのお礼

正方格子上に並んだ電子に対してイジングモデルを使ってモンテカルロシミュレーションをやっているようです。
説明が足りなさすぎてすみません。ちなみに私は同モデルをモンテカルロシミュレーションではなく直接的に分配関数を使って以下のプログラムのように計算しましたが、やはり同じようになりました。何故なのでしょうか・・・
http://ideone.com/VoEnbQ

お礼日時:2017/01/11 00:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!