磁性体班

5/28島崎
レイアウトはまだですが、とりあえずalphaとvについてパラメータをいじれるようにしました。vの範囲を適当に設定してしまったのでTest12.cppのv_spinner->set_float_limits(v_min, v_max)の引数を適切な範囲に変えてください。
添付用6.rar

5/25伊藤
写真をjpegにしました。


5/23伊藤
修正版です。メモリー解放のところを直しました。
修正版.zip
写真は下
http://www.filebank.co.jp/guest/tobusikabaka/fp/apmayfes



5/7伊藤
ようやく、一応Nが大きくても表示できるものができました。
FFTで、違うライブラリを使いました。512は重すぎるためか動きにくいです。
N=256でα=3.5、v=0.1とすると、島状の模様を作ることができました。
添付用5.zip

5/4島崎
遅くなってしまってすみません。添付用1のイジングモデルのg_Temparture(int 1~4)と添付用3の準イジングモデルのalpha(float 1.0~4.0)をGLUIを使って変えられるようにしました。
GLUIのインクルードファイルについてはREADME.txtを見てください。
alphaの刻み幅が調整できないので、直接入力した方がいいと思います。
添付用4.rar

4/8伊藤
ありがとうございます。僕のでもN=128では動きませんでした。64でも何となく磁区ができる様子がわかると思います。
Nが大きいとさらに論文に近づけると思うのですが…。
オイラー法ですがScilabでのものをアップしておきます。サイズはN=256です。
alpha=1.5で迷路状、alpha=3.5で島状になっていました。論文とは少し違うかもしれません。
test9.sce

あと、今後の計画を書きます。
プログラムについては、インターフェイスを充実させようと思います。
実験については4月中に装置や試料について、見ておきます。
試料については用意してくれるものもあるのですが、作らせてもらえるとのことなので(1日程度でできる)、やってみましょう。
いろいろな磁石を貸してくれるそうなので、それを使った小物展示も用意したいと思います。

今までは、割り当てなどはしっかり決めていなかったのですが、今後はみなさんに仕事を割り振れると思います。


4/8栗田
一応目標のものが形になりました。
添付用3.zip
大きな問題点は僕のパソコンだとNを128以上にすると動かなくなることです(エラーが出て終了するorz)。もう一つ細かいことですが、何故かコンパイルのときに警告文が出てきます。opengl関連です。理由わかったら教えてください。←自己解決しました。onestep()の引数をint型に設定し、onestepが呼び出されるところで0を引数にすれば治ります。この引数0は関数ないでは使われませんが。


4/3伊藤
昨日のやつをアップします。
模様は変ですがだいたいの挙動がわかると思います。
test5.sce


4/2伊藤
精度を考えるとかなり問題なのですが、逆フーリエ変換で出てくるφを実部だけ
残すということをすると発散はしないようです。(虚部を強制的に0にする)
模様はできるのですが荒っぽいことをしているので、論文の形とは違うようです。
また後でアップロードするので参考にしてください。

また、今田先生に聞いたところ、微分方程式は線形項については厳密に解が出るので、
そこからのずれとして非線形項をルンゲクッタの近似等で加えるべきであるとのことでした。



3/29伊藤
「いい」アルゴリズムを考える必要があるようです。
予告していた通り、今田先生のところに4/1(アポは3時)に
質問をしに行こうと思います。
そこでうまい解決策が見つかるといいと思います。

3/27栗田
まあ差分方程式のアルゴリズムが悪いんだろうね。数値解析の授業でも、発散させない条件みたいなのあったし。

3/26伊藤
2πも入れないと変だね。
で、double型にして2πつけると、やっぱり発散するんだよね。
ところで、Scilabで同じようなのを作ってみました
(FFT()という2次元高速フーリエ変換の組み込み関数が入っているので、プログラム自体はシンプルに見えます)。
どうもこちらでも発散が起きるようです。
アップしておきます。




3/25栗田
プログラム読んでくれてありがとう。確かにk1とk2は問題ありそうですね。ただ、多分だけど2πかけたほうがいい気がします。exp(kN)=1を考えると、k=整数×2π/Nだと思います。それとint型の割り算はdouble型にならずに切り捨てられるから、k1=i/(N*N)、k2=(i%N)/Nをやると両方とも0になると思います。それもふまえて
int i, k1, k2;
のところを
int i, k_1, k_2;
double k1, k2;
にして、
k_1 = i/N;
k_2 = i%N;
k1 = (2*M_PI*k_1)/N;
k2 = (2*M_PI*k_2)/N;としたのだが、あまり効果がなかったorz


3/25伊藤
栗田くんのプログラム(fft7.c)で発散していた原因はおそらく
void function
のところです。
波数のところを
k1=i/(N*N)
k2=(i%N)/N
とすれば大丈夫だと思います


3/22栗田
 お久しぶりです。フーリエ変換についてですが、2次元のフーリエ変換というのはわりと研究されているわけで、自作のプログラムを作るよりライブラリに頼るべきだと思います。高速フーリエ変換(FFT)なんて素人には組みにくいですし。かといって正直なフーリエ変換はコンピューターに負担をかけます。FFTは2の累乗じゃないとできないわけで、それであの論文は1辺512サイトでやってるんだと思います。僕はこちらのページからFFTをぱくってきました。それを用いて作った微分方程式のシミュレーションの失敗作を挙げておきます。
添付用2.zip
 一応上のページにいかなくてもこのzipの中身だけで動くはずです。このzipの中には上のページからぱくったものがいろいろ入っているので、説明はそちらを参照してください。自作の関数などについては一応コメントをいれました。
 何が失敗かって、fft7を実行してみればわかると思いますが、35ステップくらいで発散して変な感じになります。test2も同様です。とても使い物になりません。僕が作った差分方程式が悪いのですが、どこが悪いかちょっとわかりません。
 さて、前回の話し合いから少し日が空いたわけですが、もし今の段階であまりみんなの開発が進んでいないようなら、僕の失敗作を見て改善してほしいです。もうすぐ自分のものができるという状況なら、それを完成させて僕の失敗作はお蔵入りにしましょう。

3/18栗田
m(r)の時間発展が上のpdfファイルに出てくる偏微分方程式に従うことに関する解説は今田先生の教科書の81ページあたりにあります。
追記:今田先生の教科書の記述とはあまり関係のない考察をしてみました。雑な議論ですが直感的理解くらいにはなると思います。
時間発展.doc
上のドキュメントの議論を少し補足しました(3/19栗田)

3/18伊藤
以前配った英語の論文についての解説です。
だいたい2節目のところの要約です。
準イジングモデル.pdf
何か変なところ、わからないところあれば言ってください。
あと準イジングモデルという題名ですが勝手につけたものです。
英語ではIsing-like modelとなっています。

3/17伊藤
まずは、栗田くんありがとう。
一応、今田先生のところに行こうと思うんですが、まだアポが取れていない状況です。

あと、メトロポリス法についての解説をアップしておきます。
資料3.pdf

3/17栗田
とりあえず磁場の無い等温イジングモデルはできたわけで、磁場や温度変化を考えるのも、これらのパラメータとメトロポリスステップ数をグローバル変数にして、パラメータをステップ数の関数にすればある程度のパラメータの時間変化が考慮できると思います。できればアルゴリズムの根本的な改善も視野に入れつつ先生に質問に行きたいなあ。

3/17栗田
動的イジングモデルのシミュレーションプログラムを作りました。今田先生がプロジェクター使ってやってたことが再現されると思います。ソースコードやexeファイルをつめておきました。使ったアルゴリズムはメトロポリス法と呼ばれるものです。

※使い方(ウィンドウズの人向け)
glut-3.7.6-binの中にglut32.dllがあるのでこれをC:\WINDOWS\system32にもって行きます。その後isingのなかにあるexeファイルをクリックして下さい。50_の後ろの数字は温度です。右クリックで単位時間進みます。左クリックで単位時間×100進みます。左クリック連打は非推奨です。visualc++を持ってる人は、pdfファイルにあるように中身ファイルを配置するとコンパイルできるようになると思います。

#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (ising.gif)
こんな感じになります

3/15伊藤祐斗
いくつか資料をアップロードします。
二次元イジングモデルについての解説です。
資料.pdf
二次元イジングモデルのシミュレーション(メトロポリス法についてはあとで)についての解説です。
資料2.pdf

3/10伊藤祐斗
下記のプログラムに、周期的境界条件についてのコメントをいれました。C言語で実装したいと思っています。
各ピクセルに色を割り当てて表示するプログラムというのがあって、今回作りたいプログラムでも使えそうなので、ここにプログラムをアップしておきます。実際は磁場の効果を取り入れるためにエネルギーの変化分DeltaEを修正したり、アニメーションのプログラムにしなくてはいけません。


※3/15追加事項
プログラムはこちらです。

3/4(水)伊藤祐斗
遅くなって申し訳ありません。Scilabで描いたイジングモデル(磁場なし)のプログラムをアップロードします。
表示部分のみです   (全磁化や全エネルギーやスピン反転の受け入れ回数等の計算部分は入れずに、純粋に絵だけを表示するという意味)←3/15挿入

メインプログラムはIsing.sceサブログラムはDelta.sce
という名まえで保存してください。Consoleでexec 'Ising.sce'と入力すれば動くはずです。このままで使えるはずです。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2009年06月30日 01:45