プロフィール

ぽぽぽぽんでらいおん

Author:ぽぽぽぽんでらいおん
個人確認用メモ帳

最新記事
最新コメント
最新トラックバック
カウンター
アフィリエイト・SEO対策

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Python ~ ニューラルネットワーク バックプロパゲーション ~

参考:http://www.cs.ce.nihon-u.ac.jp/~matsui/research/bp/node1.html



import numpy as np
import math
import matplotlib.pyplot as plt

def sigmoid(x):
return 1.0/(1.0 + math.exp(-x))

if __name__ == '__main__':

ETA = 0.4
ALPHA = 0.1

input = np.arange(-4.0, 4.0, 0.1)

output_t = []
for i in input:
output_t.append(0.45+0.4*math.sin(i))

output = np.arange(-4.0, 4.0, 0.1)

w = 0.1*np.random.random((len(input), len(input)))
v = 0.1*np.random.random((len(input), len(input)))
delta_w = [[0 for col in range(len(input))] for row in range(len(input))]
delta_v = [[0 for col in range(len(input))] for row in range(len(input))]
delta_w_old = [[0 for col in range(len(input))] for row in range(len(input))]
delta_v_old = [[0 for col in range(len(input))] for row in range(len(input))]

#print(delta_w)

plt.plot(input, output_t)
plt.plot(input, output)
plt.show()

intermediate = [0]*len(input)
delta_output = [0]*len(output)
delta_intermediate = [0]*len(intermediate)

for n in range(200):

for i in range(len(input)):
sum = 0.0
for j in range(len(input)):
sum = sum + w[i, j]*input[j]
intermediate[i] = sigmoid(sum)

for i in range(len(input)):
sum = 0.0
for j in range(len(input)):
sum = sum + v[i, j]*intermediate[j]
output[i] = sigmoid(sum)

for i in range(len(output)):
delta_output[i] = output[i] * (1.0 - output[i]) * (output_t[i] - output[i])

for i in range(len(intermediate)):
sum = 0.0
for j in range(len(delta_output)):
sum = sum + v[j, i] * delta_output[j]
delta_intermediate[i] = intermediate[i] * (1.0 - intermediate[i]) * sum

for k in range(len(output)):
for j in range(len(output)):
delta_v[k][j] = ETA * delta_output[k] * intermediate[j] + ALPHA * delta_v_old[k][j]
v[k,j] = v[k,j] + delta_v[k][j]
delta_v_old[k][j] = delta_v[k][j]

for j in range(len(input)):
for i in range(len(input)):
delta_w[j][i] = ETA * delta_intermediate[j] * input[i] + ALPHA * delta_w_old[j][i]
w[j,i] = w[j,i] + delta_w[j][i]
delta_w_old[j][i] = delta_w[j][i]

plt.plot(input, output_t)
plt.plot(input, output)
plt.show()




繰り返し回数:1
figure_neural_net_n-1.png
繰り返し回数:10
figure_neural_net_n-10.png
繰り返し回数:50
figure_neural_net_n-50.png
繰り返し回数:100
figure_neural_net_n-100.png
繰り返し回数:1000
figure_neural_net_n-1000.png
スポンサーサイト

Python ~ ランダムウォーク ~



import numpy as np
import matplotlib.pyplot as plt
from pandas import *

randn = np.random.randn
ts = Series(randn(1000), index = date_range('2001/1/1', periods=1000))
ts = ts.cumsum()
ts.plot(style='<--')
ts = Series(randn(1000), index = date_range('2001/1/1', periods=1000))
ts = ts.cumsum()
ts.plot(style='<--')
ts = Series(randn(1000), index = date_range('2001/1/1', periods=1000))
ts = ts.cumsum()
ts.plot(style='<--')
ts = Series(randn(1000), index = date_range('2001/1/1', periods=1000))
ts = ts.cumsum()
ts.plot(style='<--')
plt.show()




figure_random_walk.png

Python ~ 株価csvファイル読み込み 日付でスライス ヒストグラム ~


import numpy as np
import pandas as pd
import datetime
import matplotlib.pyplot as plt

data = pd.read_csv('stockprice_data/stockprice_6502.csv')

data = data.set_index('Date')
slice_data = data['2008-09-06':'2009-08-06']
plt.hist(slice_data['Close'], bins = 50)
plt.show()


figure_stockprice_hist.png

Python ~ クラスタリング K-means ~



import math
import numpy as np
import random
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

class Point3D:
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
def distance(centerPoint1, centerPoint2):
return math.sqrt((centerPoint1.x - centerPoint2.x)*(centerPoint1.x - centerPoint2.x) + (centerPoint1.y - centerPoint2.y)*(centerPoint1.y - centerPoint2.y) + (centerPoint1.z - centerPoint2.z)*(centerPoint1.z - centerPoint2.z))

def getCenter(*pointList):
center = Point3D(0.0, 0.0, 0.0)
cnt = 0
for p in pointList:
cnt = cnt + 1
center.x = center.x + p.x
center.y = center.x + p.y
center.z = center.x + p.z
center.x = center.x / cnt
center.y = center.y / cnt
center.z = center.z / cnt
return center

if __name__ == '__main__':

pointList = []

X1 = 0.5 + np.random.rand(1000)
Y1 = 0.5 + np.random.rand(1000)
Z1 = 0.5 + np.random.rand(1000)
for (x, y, z) in zip(X1, Y1, Z1):
pointList.append(Point3D(x, y, z))

X2 = -0.5 + np.random.rand(1000)
Y2 = -0.5 + np.random.rand(1000)
Z2 = -0.5 + np.random.rand(1000)
for (x, y, z) in zip(X2, Y2, Z2):
pointList.append(Point3D(x, y, z))
random.shuffle(pointList)

centerPoint1 = Point3D(np.random.randn(1), np.random.randn(1), np.random.randn(1))
centerPoint2 = Point3D(np.random.randn(1), np.random.randn(1), np.random.randn(1))
centerPoint1History = []
centerPoint2History = []
centerPoint1History.append(centerPoint1)
centerPoint2History.append(centerPoint2)

pointList1 = []
pointList2 = []

X = []
Y = []
Z = []

for i in range(5):
pointList1.clear()
pointList2.clear()
for p in pointList:
if p.distance(centerPoint1) < p.distance(centerPoint2):
pointList1.append(p)
else:
pointList2.append(p)
centerPoint1 = getCenter(*pointList1)
centerPoint2 = getCenter(*pointList2)
centerPoint1History.append(centerPoint1)
centerPoint2History.append(centerPoint2)

fig = plt.figure()
ax = Axes3D(fig)

X.clear()
Y.clear()
Z.clear()

for p in pointList1:
X.append(p.x)
Y.append(p.y)
Z.append(p.z)
ax.scatter3D(np.ravel(X), np.ravel(Y), np.ravel(Z), c='red')

X.clear()
Y.clear()
Z.clear()

for p in pointList2:
X.append(p.x)
Y.append(p.y)
Z.append(p.z)
ax.scatter3D(np.ravel(X), np.ravel(Y), np.ravel(Z), c='blue')

ax.scatter3D(centerPoint1.x, centerPoint1.y, centerPoint1.z, c='green', s=100)
ax.scatter3D(centerPoint2.x, centerPoint2.y, centerPoint2.z, c='green', s=100)

plt.show()

fig = plt.figure()
ax = Axes3D(fig)

X.clear()
Y.clear()
Z.clear()

for p in pointList1:
X.append(p.x)
Y.append(p.y)
Z.append(p.z)
ax.scatter3D(np.ravel(X), np.ravel(Y), np.ravel(Z), c='red')

X.clear()
Y.clear()
Z.clear()

for p in pointList2:
X.append(p.x)
Y.append(p.y)
Z.append(p.z)
ax.scatter3D(np.ravel(X), np.ravel(Y), np.ravel(Z), c='blue')

ax.scatter3D(centerPoint1.x, centerPoint1.y, centerPoint1.z, c='green', s=100)
ax.scatter3D(centerPoint2.x, centerPoint2.y, centerPoint2.z, c='green', s=100)

X.clear()
Y.clear()
Z.clear()
for p in centerPoint1History:
X.append(p.x)
Y.append(p.y)
Z.append(p.z)
ax.plot(X, Y, zs=Z, c='green')

X.clear()
Y.clear()
Z.clear()
for p in centerPoint2History:
X.append(p.x)
Y.append(p.y)
Z.append(p.z)
ax.plot(X, Y, zs=Z, c='green')

plt.show()



初期状態
figure_kmeans_1.png
1ステップ目
figure_kmeans_2.png
2ステップ目
figure_kmeans_3.png
3ステップ目
figure_kmeans_4.png


Python ~ matplotlib 3D scatetr ~




from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

#x = np.arange(-3, 3, 0.25)
#y = np.arange(-3, 3, 0.25)
#X, Y = np.meshgrid(x, y)
#Z = np.sin(X) + np.cos(Y)
X = 0.5 + np.random.rand(1000)
Y = 0.5 + np.random.rand(1000)
Z = 0.5 + np.random.rand(1000)

X2 = -0.2 + np.random.rand(1000)
Y2 = -0.2 + np.random.rand(1000)
Z2 = -0.2 + np.random.rand(1000)

fig = plt.figure()
ax = Axes3D(fig)
ax.scatter3D(np.ravel(X), np.ravel(Y), np.ravel(Z), c='red')
ax.scatter3D(np.ravel(X2), np.ravel(Y2), np.ravel(Z2), c='blue')

plt.show()


3D_scatter

Python ~ マルコフ連鎖シミュレーション1 ~

3つの状態を行列Aの確率にしたがって遷移する場合のシミュレーション
(例:状態0→2に移る確率はa02=0.2)



import numpy as np

def getIndexFromProbability(probArray):
colNum = len(probArray)
normalizationFactor = 0.0
for i in range(0, colNum):
normalizationFactor = normalizationFactor + probArray[i]
randNum = np.random.rand(1)
#print(randNum)
sum = 0.0
for i in range(0, colNum):
sum = sum + probArray[i]/normalizationFactor
if randNum < sum:
return i
return -1

InitProb = [1.0/3.0, 1.0/3.0, 1.0/3.0]

A = [[0.7, 0.1, 0.2],
[0.2, 0.1, 0.7],
[0.7, 0.2, 0.1]]

B = [[0.9, 0.1],
[0.6, 0.4],
[0.1, 0.9]]

print("Initial State : " + str(getIndexFromProbability(InitProb)))

index = getIndexFromProbability(InitProb)
for i in range(0, 20):
print("State" + str(i+1) + " : " + str(index))
nextIndex = getIndexFromProbability(A[index])
index = nextIndex



●結果

Initial State : 1
State1 : 0
State2 : 0
State3 : 0
State4 : 0
State5 : 1
State6 : 0
State7 : 1
State8 : 2
State9 : 1
State10 : 2
State11 : 0
State12 : 0
State13 : 2
State14 : 2
State15 : 0
State16 : 0
State17 : 0
State18 : 0
State19 : 0
State20 : 2

Python ~ POSTでFC2ブログにログイン ~



import urllib
import urllib.request # opener
import urllib.parse # urlencode
import http
import http.cookiejar

opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(http.cookiejar.CookieJar()))

post = {
'id':'tes@gmail.com',
'pass':'testes',
'done':'blog',
'mode':'login',
'email':'test@gmail.com',
}
data = urllib.parse.urlencode(post).encode('utf-8')

conn = opener.open('https://secure.id.fc2.com/index.php?mode=login&done=blog&switch_language=ja', data)
ofs = open('out.html', 'w', encoding='utf-8')
ofs.write(conn.read().decode('utf-8'))
ofs.close()

conn = opener.open('http://id.fc2.com/?mode=redirect&login=done')
ofs = open('out2.html', 'w', encoding='utf-8')
ofs.write(conn.read().decode('utf-8'))
ofs.close()

Python ~ matplotlib 複数の銘柄の株価を横軸日付でプロット ~



import numpy as np
import pandas as pd
import datetime
import matplotlib.pyplot as plt

all_data = {}
all_data[0] = pd.read_csv('stockprice_data/stockprice_6501.csv')
all_data[1] = pd.read_csv('stockprice_data/stockprice_6502.csv')

all_data[0] = all_data[0].set_index('Date')
all_data[1] = all_data[1].set_index('Date')
print(all_data[0])
price = pd.DataFrame({tic: data['Adj Close'] for tic, data in all_data.items()})
price.plot()
plt.show()



stock_price_2

Python ~ 移動平均線シミュレーション ~

移動平均線が株価を上下に突き抜けたときに売買を行う場合のシミュレーション



import numpy as np
import pandas as pd
import pandas.io.data as web
import datetime
import matplotlib.pyplot as plt
from numpy.random import randn

start = datetime.datetime(2000, 1, 1)
end = datetime.datetime(2015, 10, 23)

#data = web.DataReader('4689', 'yahoo', start, end)
data = pd.read_csv('stockprice_4689.csv')
data2 = pd.read_csv('stockprice_4689)
close1 = data['Close']
close2 = pd.rolling_mean(data['Close'], 100)
plt.subplot(2, 1, 1)
close1.plot()
close2.plot()
#plt.show()

#close_diff = close1 - close2
#close_diff.plot()
#plt.show()

asset = [1000000]*close2.size
profit = [0]*close2.size
asset[0] = 1000000
init_asset = asset[0]
stock_num = 0
for num in range(1,close2.size):
if close2[num] == close2[num] and close2[num - 1] == close2[num - 1]:
#print("aaaaaaaaaaaaaaa")
if ((close1[num - 1] - close2[num - 1]) > 0) and ((close1[num] - close2[num]) < 0):
if stock_num >= 100:
stock_num -= 100
asset[num] = asset[num-1] + 100 * close1[num]
elif ((close1[num - 1] - close2[num - 1]) < 0) and ((close1[num] - close2[num]) > 0):
stock_num += 100
asset[num] = asset[num-1] - 100 * close1[num]
else:
asset[num] = asset[num-1]
else:
asset[num] = asset[num-1]
profit[num] = asset[num] + (stock_num * close1[num]) - init_asset

plt.subplot(2, 1, 2)
pd.Series(profit).plot()
plt.show()



stock_price_1

Python ~ 全銘柄の株価の時系列データを取得する ~

銘柄1300~9999
2000年1月1日~2015年10月23日
の株価の時系列データを取得する。




import numpy as np
import pandas as pd
import pandas.io.data as web
import datetime

start = datetime.datetime(2000, 1, 1)
end = datetime.datetime(2015, 10, 23)

for code in range(1300, 9999):
try:
data = web.DataReader(str(code), 'yahoo', start, end)
data.to_csv('stockprice_data/stockprice_' + str(code) + '.csv')
except:
print('Error : ' + str(code))

C# - Yahooファイナンスから指定した銘柄コードの企業の株価時系列データを取得 -

C#
こちらのSGMLリーダーを用いてYahooファイナンスから指定した銘柄コードの企業の現在の株価を取得するプログラム




using System;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using Sgml;
using System.Xml.Linq;
using System.Collections.Generic;
using System.Collections;
using System.Windows.Forms;

class StockPriceGetter {

private StockPriceSeriesData mStockPriceSeriesData;
private const string URL_FORMAT = "http://info.finance.yahoo.co.jp/history/?code={0}.T&sy={1}&sm={2}&sd={3}&ey={4}&em={5}&ed={6}&tm=d&p={7}";
private const string ENCODE = "UTF-8";

public static void Main() {
StockPriceGetter spg = new StockPriceGetter();

StockPriceSeriesData spsd = spg.getStockPriceSeriesData(4719, 2013, 4, 1, 2014, 4, 1);

foreach (StockPriceData spd in spsd.StockPrices) {
Console.WriteLine(spd.PriceDate + " : " + spd.StartStockPrice + ":" + spd.EndStockPrice + ":" + spd.HighStockPrice + ":" + spd.LowStockPrice);

}
}

public StockPriceGetter() {
//mStockPriceSeriesData = new StockPriceSeriesData(companyCode);
}

public StockPriceSeriesData getStockPriceSeriesData(int companyCode, int startYear, int startMonth, int startDay, int endYear, int endMonth, int endDay) {

mStockPriceSeriesData = new StockPriceSeriesData(companyCode);

//XDocument xdoc = convertHTMLToXMLDocument(ENCODE, companyCode, startYear, startMonth, startDay, endYear, endMonth, endDay);

int pageCount;
pageCount = getPageCount(startYear, endYear);
extractStockData(ENCODE, companyCode, startYear, startMonth, startDay, endYear, endMonth, endDay, pageCount, mStockPriceSeriesData);

Console.WriteLine(pageCount);

return mStockPriceSeriesData;
}

private XDocument convertHTMLToXMLDocument(string ENCODE, int companyCode, int startYear, int startMonth, int startDay, int endYear, int endMonth, int endDay, int pageNo) {

XDocument xdoc = null;

using (Stream stream = new WebClient().OpenRead(string.Format(URL_FORMAT, companyCode, startYear, startMonth, startDay, endYear, endMonth, endDay, pageNo))) {

if (stream == null) {
//接続できなかった時の処理

return null;
}

using (StreamReader sr = new StreamReader(stream, Encoding.GetEncoding(ENCODE))) {

if (sr == null) {

return null;
}

SgmlReader sgmlReader = new SgmlReader();
sgmlReader.DocType = "HTML";
sgmlReader.CaseFolding = CaseFolding.ToLower;
sgmlReader.InputStream = sr;

xdoc = XDocument.Load(sgmlReader);
}
}

return xdoc;
}

private int getPageCount(/*XDocument xdoc*/int startYear, int endYear) {
/*
XNamespace ns = xdoc.Root.Name.Namespace;

XElement[] pageNumberElement = (XElement[])((from p in xdoc.Descendants(ns + "ul")
where (string)p.Attribute("class") == "ymuiPagingBottom clearFix"
select p).ToArray());

if (pageNumberElement == null) {
return 0;
}

XElement[] pageNumbers = pageNumberElement[0].Descendants(ns + "a").ToArray();

int pageCount = 0;

foreach (XElement pageNumber in pageNumbers) {
pageCount++;
}

return pageCount;
*/

return (endYear - startYear + 1)*12;
}
/*
private int getStockDataCountAtPage(int pageNo) {

}
*/
private void extractStockData(string ENCODE, int companyCode, int startYear, int startMonth, int startDay, int endYear, int endMonth, int endDay, int pageCount, StockPriceSeriesData stockPriceSeriesData) {

for (int i = 0; i < pageCount; i++) {
XDocument xdoc = null;

xdoc = convertHTMLToXMLDocument(ENCODE, companyCode, startYear, startMonth, startDay, endYear, endMonth, endDay, i+1);

XNamespace ns = xdoc.Root.Name.Namespace;

XElement[] stockPriceDataTable = (XElement[])((from p in xdoc.Descendants(ns + "table")
where (string)p.Attribute("class") == "boardFin yjSt marB6"
select p).ToArray());

if (stockPriceDataTable == null ) {
continue;
}

XElement[] stockPriceDataList = stockPriceDataTable[0].Descendants(ns + "td").ToArray();

if (stockPriceDataList == null) {
continue;
}

for (int j = 0; j < stockPriceDataList.Length; j+=7) {

string[] dateStrings1 = (stockPriceDataList[j].Value.ToString()).Split('年');
string[] dateStrings2 = ((string)dateStrings1[1]).Split('月');
string[] dateStrings3 = ((string)dateStrings2[1]).Split('日');
int year = int.Parse(dateStrings1[0]);
int month = int.Parse(dateStrings2[0]);
int day = int.Parse(dateStrings3[0]);
StockPriceData spd = new StockPriceData(new DateTime(year, month, day), int.Parse(stockPriceDataList[j+1].Value.ToString().Replace(",", "")), int.Parse(stockPriceDataList[j+2].Value.ToString().Replace(",", "")), int.Parse(stockPriceDataList[j+3].Value.ToString().Replace(",", "")), int.Parse(stockPriceDataList[j+4].Value.ToString().Replace(",", "")));

mStockPriceSeriesData.StockPrices.Add(spd);
}


}
}


}

class StockPriceSeriesData {
public string CompanyName {get; private set;}
public int CompanyCode {get; private set;}
public ArrayList StockPrices{get; private set;}

public StockPriceSeriesData() {
CompanyName = "-";
CompanyCode = 0;
StockPrices = new ArrayList();
}

public StockPriceSeriesData(int companyCode) {
CompanyCode = companyCode;
StockPrices = new ArrayList();
}

}

class StockPriceData {

public DateTime PriceDate {get; set;}
public int StartStockPrice {get; set;}
public int EndStockPrice {get; set;}
public int HighStockPrice {get; set;}
public int LowStockPrice {get; set;}

public StockPriceData() {
}

public StockPriceData(DateTime priceDate, int startStockPrice, int endStockPrice, int highStockPrice, int lowStockPrice) {
PriceDate = priceDate;
StartStockPrice = startStockPrice;
EndStockPrice = endStockPrice;
HighStockPrice = highStockPrice;
LowStockPrice = lowStockPrice;
}

}



csc StockPriceGetter2.cs /reference:SgmlReaderDll.dll

C++ ~ イジングモデル ランダムな交換相互作用の導入 ~

交換相互作用を初期化する際に、RANDOM_RATEの割合でデフォルトのJとは異なる相互作用を導入する。
ここでは-2*Jの相互作用を0.1の確率で導入

温度は20K

↑↓反転していってる(■多数と□多数マップが交互に見られている)のは全てのスピンを一斉に更新しているため。
奇数ステップは□多数、偶数ステップは■多数


#include
#include
#include
#define DIM 30
#define J -25 // ※負:強磁性相互作用相、正:反強磁性相互作用
#define MAX_STEP 100
#define RANDOM_RATE 0.1
using namespace std;

double getRand() {
return (double)rand()/(double)RAND_MAX;
}


double getInteraction(int i1, int j1, int i2, int j2, double horizontalInteractions[DIM-1][DIM], double verticalInteractions[DIM][DIM-1])
{
double interaction = J;
if (j1 == j2) {
interaction = horizontalInteractions[i1 < i2 ? i1 : i2][j1];
} else if (i1 == i2) {
interaction = verticalInteractions[i1][j1 < j2 ? j1 : j2];
}

return interaction;
}

void showData(int data[DIM][DIM])
{
for (int i = 0; i < DIM; i++) {
for (int j = 0; j < DIM; j++) {
cout << ((data[i][j] == 1) ? "■" : "□") << " ";
}
cout << endl;
}
}

void updateSingleSpin(int i, int j, int oldData[DIM][DIM], int newData[DIM][DIM], double temp, double horizontalInteractions[DIM-1][DIM], double verticalInteractions[DIM][DIM-1]) {

double energy1 = 0 , energy2 = 0;
double jLeft, jRight, jTop, jBottom;
double flipPosibility;

if (i == 0 && j != 0 && j != DIM-1) {

energy1 += J*(oldData[i][j-i] + oldData[i+1][j] + oldData[i][j+1])*oldData[i][j];
energy2 += J*(oldData[i][j-i] + oldData[i+1][j] + oldData[i][j+1])*(oldData[i][j] == 1 ? -1 : 1);
} else if (i == DIM-1 && j != 0 && j != DIM -1) {
energy1 += J*(oldData[i-1][j] + oldData[i][j-i] + oldData[i][j+1])*oldData[i][j];
energy2 += J*(oldData[i-1][j] + oldData[i][j-i] + oldData[i][j+1])*(oldData[i][j] == 1 ? -1 : 1);
} else if (j == 0 && i != 0 && i != DIM-1) {
energy1 += J*(oldData[i-1][j] + oldData[i+1][j] + oldData[i][j+1])*oldData[i][j];
energy2 += J*(oldData[i-1][j] + oldData[i+1][j] + oldData[i][j+1])*(oldData[i][j] == 1 ? -1 : 1);
} else if (j == DIM-1 && i != 0 && i != DIM -1) {
energy1 += J*(oldData[i-1][j] + oldData[i][j-i] + oldData[i+1][j])*oldData[i][j];
energy2 += J*(oldData[i-1][j] + oldData[i][j-i] + oldData[i+1][j])*(oldData[i][j] == 1 ? -1 : 1);
} else if ( i == 0 && j == 0){
energy1 += J*(oldData[i+1][j] + oldData[i][j+1])*oldData[i][j];
energy2 += J*(oldData[i+1][j] + oldData[i][j+1])*(oldData[i][j] == 1 ? -1 : 1);
} else if (i == DIM-1 && j == 0) {
energy1 += J*(oldData[i-1][j] + oldData[i][j+1])*oldData[i][j];
energy2 += J*(oldData[i-1][j] + oldData[i][j+1])*(oldData[i][j] == 1 ? -1 : 1);
} else if (i == DIM-1 && j == DIM-1) {
energy1 += J*(oldData[i-1][j] + oldData[i][j-i])*oldData[i][j];
energy2 += J*(oldData[i-1][j] + oldData[i][j-i])*(oldData[i][j] == 1 ? -1 : 1);
} else if (i == 0 && j == DIM-1) {
energy1 += J*(oldData[i][j-i] + oldData[i+1][j])*oldData[i][j];
energy2 += J*(oldData[i][j-i] + oldData[i+1][j])*(oldData[i][j] == 1 ? -1 : 1);
} else {
jTop = getInteraction(i,j-1,i,j,horizontalInteractions, verticalInteractions);
jRight = getInteraction(i,j,i+1,j, horizontalInteractions, verticalInteractions);
jBottom = getInteraction(i,j,i,j+1, horizontalInteractions, verticalInteractions);
jLeft = getInteraction(i-1,j,i,j, horizontalInteractions, verticalInteractions);
//cout << "jRight = " << jRight << endl;
energy1 += (jLeft*oldData[i-1][j] + jTop*oldData[i][j-i] + jRight*oldData[i+1][j] + jBottom*oldData[i][j+1])*oldData[i][j];
energy2 += (jLeft*oldData[i-1][j] + jTop*oldData[i][j-i] + jRight*oldData[i+1][j] + jBottom*oldData[i][j+1])*(oldData[i][j] == 1 ? -1 : 1);
}

//cout << "energy1 : energy2 = " << energy1 << " : " << energy2 << endl;
flipPosibility = exp(-energy2 / temp) / (exp(-energy1 / temp) + exp(-energy2 / temp));
if (getRand() <= flipPosibility) {
newData[i][j] = (oldData[i][j] == 1 ? -1 : 1);
//energy += energy2;
//cout << "flip" << endl;
} else {
newData[i][j] = oldData[i][j];
//energy += energy1;
}
}


void updateAllSpin(int oldData[DIM][DIM], int newData[DIM][DIM], double temp, double horizontalInteractions[DIM-1][DIM], double verticalInteractions[DIM][DIM-1])
{
double energy1,energy2;
double flipPosibility;
double jLeft, jRight, jTop, jBottom;

for (int i = 0; i < DIM; i++) {
for (int j = 0; j < DIM; j++) {

updateSingleSpin(i, j, oldData, newData, temp, horizontalInteractions, verticalInteractions);

}
}

}



double getEnergy(int spinMap[DIM][DIM], double horizontalInteractions[DIM-1][DIM], double verticalInteractions[DIM][DIM-1])
{
double energy = 0;
double jLeft, jRight, jTop, jBottom;

for (int i = 0; i < DIM; i++) {
for (int j = 0; j < DIM; j++) {

if (i == 0 && j != 0 && j != DIM-1) { //左端

energy += J*(spinMap[i][j-i] + spinMap[i+1][j] + spinMap[i][j+1])*spinMap[i][j];

} else if (i == DIM-1 && j != 0 && j != DIM -1) {
energy += J*(spinMap[i-1][j] + spinMap[i][j-i] + spinMap[i][j+1])*spinMap[i][j];

} else if (j == 0 && i != 0 && i != DIM-1) {
energy += J*(spinMap[i-1][j] + spinMap[i+1][j] + spinMap[i][j+1])*spinMap[i][j];

} else if (j == DIM-1 && i != 0 && i != DIM -1) {
energy += J*(spinMap[i-1][j] + spinMap[i][j-i] + spinMap[i+1][j])*spinMap[i][j];

} else if ( i == 0 && j == 0){
energy += J*(spinMap[i+1][j] + spinMap[i][j+1])*spinMap[i][j];

} else if (i == DIM-1 && j == 0) {
energy += J*(spinMap[i-1][j] + spinMap[i][j+1])*spinMap[i][j];

} else if (i == DIM-1 && j == DIM-1) {
energy += J*(spinMap[i-1][j] + spinMap[i][j-i])*spinMap[i][j];

} else if (i == 0 && j == DIM-1) {
energy += J*(spinMap[i][j-i] + spinMap[i+1][j])*spinMap[i][j];

} else {
jTop = getInteraction(i,j-1,i,j,horizontalInteractions, verticalInteractions);
jRight = getInteraction(i,j,i+1,j, horizontalInteractions, verticalInteractions);
jBottom = getInteraction(i,j,i,j+1, horizontalInteractions, verticalInteractions);
jLeft = getInteraction(i-1,j,i,j, horizontalInteractions, verticalInteractions);

energy += (jLeft*spinMap[i-1][j] + jTop*spinMap[i][j-i] + jRight*spinMap[i+1][j] + jBottom*spinMap[i][j+1])*spinMap[i][j];
}

}
}

return energy;
}

double getNormalizedMagnetization(int spinMap[DIM][DIM])
{
double up = 0;

for (int i = 0; i < DIM; i++) {
for (int j = 0; j < DIM; j++) {
up += spinMap[i][j];
}
}

return (double)up / (double)(DIM*DIM);
}

void initializeInteractions(double horizontalInteractions[DIM-1][DIM], double verticalInteractions[DIM][DIM-1])
{

double interaction = J;

for (int i = 0; i < DIM-1; i++) {
for (int j = 0; j < DIM; j++) {

if (getRand() < RANDOM_RATE) {
//interaction = 500*(getRand()-0.5);
interaction = -2*J;
} else {
interaction = J;
}

horizontalInteractions[i][j] = interaction;
}
}

for (int i = 0; i < DIM; i++) {
for (int j = 0; j < DIM-1; j++) {

if (getRand() < RANDOM_RATE) {
//interaction = 500*(getRand()-0.5);
interaction = -2*J;
} else {
interaction = J;
}

verticalInteractions[i][j] = interaction;
}
}
}


int main(void)
{

int spinMap1[DIM][DIM],spinMap2[DIM][DIM];
double horizontalInteractions[DIM-1][DIM], verticalInteractions[DIM][DIM-1];
double temp = 20.0;

srand((unsigned)time(NULL));

for (int i = 0; i < DIM; i++) {
for (int j = 0; j < DIM; j++) {
spinMap1[i][j] = 1;
spinMap2[i][j] = 1;
}
}

initializeInteractions(horizontalInteractions, verticalInteractions);

for (int step = 0; step < (int)MAX_STEP; step++) {
if (step % 2 == 0) {
updateAllSpin(spinMap1, spinMap2, temp, horizontalInteractions, verticalInteractions);
if (step % 9 == 0) {
cout << "現在のステップ数 : " << step+1 << endl;
showData(spinMap2);
}

cout << "(STEP : MAGNETIZATION : ENERGY) = (" << step << " : " << getNormalizedMagnetization(spinMap2) << " : " << getEnergy(spinMap2, horizontalInteractions, verticalInteractions) << ")" << endl;
} else {
updateAllSpin(spinMap2, spinMap1, temp, horizontalInteractions, verticalInteractions);
if (step % 9 == 0) {
cout << "現在のステップ数 : " << step+1 << endl;
showData(spinMap1);
}

cout << "(STEP : MAGNETIZATION : ENERGY) = (" << step << " : " << getNormalizedMagnetization(spinMap1) << " : " << getEnergy(spinMap2, horizontalInteractions, verticalInteractions) << ")" << endl;
}



}

return 0;
}




現在のステップ数 : 1
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ ■ □ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □
□ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □
□ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ ■ □ □
□ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ ■ □ □ □ ■ □ □ ■ □ □ □ □ □ ■ ■ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ □ ■ □ □
□ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □ □ □ ■ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ ■ □ □ □
□ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □
□ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □
□ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
(STEP : MAGNETIZATION : ENERGY) = (0 : -0.873333 : 63725)
(STEP : MAGNETIZATION : ENERGY) = (1 : 0.886667 : 63725)
(STEP : MAGNETIZATION : ENERGY) = (2 : -0.828889 : 62225)
(STEP : MAGNETIZATION : ENERGY) = (3 : 0.833333 : 62225)
(STEP : MAGNETIZATION : ENERGY) = (4 : -0.802222 : 60175)
(STEP : MAGNETIZATION : ENERGY) = (5 : 0.811111 : 60175)
(STEP : MAGNETIZATION : ENERGY) = (6 : -0.782222 : 59225)
(STEP : MAGNETIZATION : ENERGY) = (7 : 0.811111 : 59225)
(STEP : MAGNETIZATION : ENERGY) = (8 : -0.766667 : 59825)
現在のステップ数 : 10
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ □ ■ ■ ■ □ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
■ □ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ □ □ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■
■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ □ □ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■
■ □ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ □ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ □ ■
■ ■ □ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■
■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
(STEP : MAGNETIZATION : ENERGY) = (9 : 0.795556 : 59825)
(STEP : MAGNETIZATION : ENERGY) = (10 : -0.762222 : 57275)
(STEP : MAGNETIZATION : ENERGY) = (11 : 0.764444 : 57275)
(STEP : MAGNETIZATION : ENERGY) = (12 : -0.8 : 58275)
(STEP : MAGNETIZATION : ENERGY) = (13 : 0.775556 : 58275)
(STEP : MAGNETIZATION : ENERGY) = (14 : -0.791111 : 58675)
(STEP : MAGNETIZATION : ENERGY) = (15 : 0.757778 : 58675)
(STEP : MAGNETIZATION : ENERGY) = (16 : -0.773333 : 59225)
(STEP : MAGNETIZATION : ENERGY) = (17 : 0.764444 : 59225)
現在のステップ数 : 19
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ ■ □ □ □ □ □ □ ■ □ □ □ ■ □ □ □ □ ■ □ □ □ □ □ □ ■ ■ □ □ □
□ □ □ □ □ □ ■ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □
□ □ □ □ □ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ ■ □ □ ■ □ □ □ □ □ □ □ ■ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ ■ □ □
□ □ □ □ □ □ □ □ ■ □ □ ■ ■ □ □ □ ■ □ □ ■ □ ■ ■ ■ □ □ ■ ■ □ □
□ □ □ □ □ ■ □ □ ■ ■ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ ■ ■ □ □
□ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ ■ □ □ □
□ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □
□ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ ■ □ □ □ □
□ ■ ■ ■ □ □ □ □ □ □ □ □ ■ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ ■ □ □
■ ■ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ ■ □ □
□ □ □ □ ■ □ □ ■ □ □ □ □ □ □ □ ■ ■ □ ■ □ □ □ □ □ □ □ □ ■ □ □
□ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ ■ □ ■ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ ■ □ □ □
□ □ ■ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □
□ □ □ ■ □ □ □ □ ■ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □
□ □ ■ □ □ ■ ■ □ □ □ □ □ □ □ □ □ □ ■ □ ■ ■ □ □ □ ■ □ □ □ □ □
□ □ □ □ □ ■ □ □ ■ □ □ □ ■ □ ■ ■ □ ■ □ ■ ■ □ □ □ □ □ □ □ □ □
□ □ □ □ ■ □ □ □ □ □ □ ■ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □
(STEP : MAGNETIZATION : ENERGY) = (18 : -0.766667 : 57425)
(STEP : MAGNETIZATION : ENERGY) = (19 : 0.764444 : 57425)
(STEP : MAGNETIZATION : ENERGY) = (20 : -0.764444 : 58375)
(STEP : MAGNETIZATION : ENERGY) = (21 : 0.737778 : 58375)
(STEP : MAGNETIZATION : ENERGY) = (22 : -0.746667 : 56575)
(STEP : MAGNETIZATION : ENERGY) = (23 : 0.744444 : 56575)
(STEP : MAGNETIZATION : ENERGY) = (24 : -0.768889 : 56225)
(STEP : MAGNETIZATION : ENERGY) = (25 : 0.773333 : 56225)
(STEP : MAGNETIZATION : ENERGY) = (26 : -0.751111 : 56675)
現在のステップ数 : 28
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■
■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ □ ■ □ □ ■ ■ □ □ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ □ ■ ■ ■ □ □ ■ □ ■ □ ■ □ ■ ■ □ □ □ ■
■ ■ ■ ■ □ ■ ■ □ ■ ■ □ ■ □ ■ ■ ■ ■ □ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ □
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■
■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■
■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ □
■ ■ □ ■ ■ □ □ □ ■ ■ □ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■
■ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □
■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ □ □ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
(STEP : MAGNETIZATION : ENERGY) = (27 : 0.742222 : 56675)
(STEP : MAGNETIZATION : ENERGY) = (28 : -0.742222 : 55775)
(STEP : MAGNETIZATION : ENERGY) = (29 : 0.733333 : 55775)
(STEP : MAGNETIZATION : ENERGY) = (30 : -0.748889 : 54925)
(STEP : MAGNETIZATION : ENERGY) = (31 : 0.726667 : 54925)
(STEP : MAGNETIZATION : ENERGY) = (32 : -0.737778 : 53375)
(STEP : MAGNETIZATION : ENERGY) = (33 : 0.753333 : 53375)
(STEP : MAGNETIZATION : ENERGY) = (34 : -0.735556 : 53775)
(STEP : MAGNETIZATION : ENERGY) = (35 : 0.717778 : 53775)
現在のステップ数 : 37
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ ■ ■ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □
□ ■ □ □ □ □ ■ □ □ ■ □ □ ■ □ ■ ■ □ □ □ □ □ □ □ □ □ □ ■ □ ■ □
□ □ □ □ □ □ ■ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ ■ □ □ □
□ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □
□ □ ■ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □
□ □ □ ■ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □ □ □ □ □ ■ □ ■ ■ □ □ □ □ □ □
□ □ □ □ □ □ □ ■ ■ ■ □ □ ■ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ ■ □ □
□ □ ■ ■ ■ □ □ ■ □ □ ■ □ □ □ □ □ □ ■ □ ■ □ □ □ □ □ □ □ □ □ □
□ ■ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ ■ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □
□ ■ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ □ □ ■ □ □ □ □
□ ■ □ ■ □ □ □ □ □ □ □ □ ■ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □ □ □ □
□ □ ■ □ □ ■ □ □ □ □ □ □ ■ □ □ □ ■ □ ■ ■ □ □ □ □ □ □ □ ■ □ □
□ ■ □ □ ■ □ ■ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ ■ □ □ □ □ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □
□ □ □ □ □ □ □ □ ■ □ ■ ■ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ ■ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ □ □ □ □ ■ ■ □ ■ □ □ □ □ □
□ □ □ □ □ □ □ □ ■ □ □ ■ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ ■ □ □ □ □ □ □ □ ■ □ □ □ ■ □ □ □ □ □ ■ □ □ □ ■ □ □ □ □ □
□ □ □ □ □ □ ■ □ □ ■ □ □ □ □ ■ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ ■ ■ ■ □ □ □ □ □ □ □ ■ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ ■ □ □ □ □ □ □ □ ■ ■ □ □ □ □ ■ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □
(STEP : MAGNETIZATION : ENERGY) = (36 : -0.746667 : 53875)
(STEP : MAGNETIZATION : ENERGY) = (37 : 0.722222 : 53875)
(STEP : MAGNETIZATION : ENERGY) = (38 : -0.724444 : 53425)
(STEP : MAGNETIZATION : ENERGY) = (39 : 0.706667 : 53425)
(STEP : MAGNETIZATION : ENERGY) = (40 : -0.691111 : 52175)
(STEP : MAGNETIZATION : ENERGY) = (41 : 0.731111 : 52175)
(STEP : MAGNETIZATION : ENERGY) = (42 : -0.722222 : 55475)
(STEP : MAGNETIZATION : ENERGY) = (43 : 0.724444 : 55475)
(STEP : MAGNETIZATION : ENERGY) = (44 : -0.731111 : 56125)
現在のステップ数 : 46
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ □ □ ■ □
■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ □ □ ■ ■ ■ □ □ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ □ ■ ■
■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ □ ■ ■
□ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ □ ■
■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■
■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■
■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■
■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ □ ■ ■ ■ □ ■
■ ■ □ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ □ □ ■ □ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ □ ■ ■ □ □ ■ ■ □ ■ ■ ■ ■ □ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ □ ■ □ ■ □ ■ ■ ■ □ ■ ■ □ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ □ ■ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
(STEP : MAGNETIZATION : ENERGY) = (45 : 0.731111 : 56125)
(STEP : MAGNETIZATION : ENERGY) = (46 : -0.731111 : 56825)
(STEP : MAGNETIZATION : ENERGY) = (47 : 0.74 : 56825)
(STEP : MAGNETIZATION : ENERGY) = (48 : -0.74 : 59175)
(STEP : MAGNETIZATION : ENERGY) = (49 : 0.742222 : 59175)
(STEP : MAGNETIZATION : ENERGY) = (50 : -0.731111 : 58225)
(STEP : MAGNETIZATION : ENERGY) = (51 : 0.717778 : 58225)
(STEP : MAGNETIZATION : ENERGY) = (52 : -0.713333 : 56425)
(STEP : MAGNETIZATION : ENERGY) = (53 : 0.713333 : 56425)
現在のステップ数 : 55
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ ■ ■ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ ■ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ □ □ □
□ □ □ □ □ □ ■ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □
□ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ □ ■ □ □
□ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ ■ □ □ ■ ■ □ ■ □ □ □ □ □ □ □
□ □ □ □ ■ □ □ □ ■ ■ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ ■ □ □
□ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □
□ ■ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ ■ □ □ □ □
□ □ ■ ■ □ □ □ □ □ □ □ □ ■ ■ □ □ ■ ■ □ □ □ □ □ □ □ □ □ ■ □ □
■ ■ ■ ■ □ □ □ □ □ □ □ □ ■ □ □ ■ □ □ □ ■ □ □ □ □ □ □ □ ■ □ □
□ ■ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □ □ ■ □ □
□ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ ■ ■ □ ■ □ □ □ □ □ □ □ □ □
□ □ ■ □ □ □ □ □ □ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ ■ □ ■ □ ■ □ □ □
□ ■ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ □ □ □ □ □ ■ □ ■ □ □ □ □ □
□ □ ■ □ □ □ □ □ ■ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ ■ □ □ □ □ □ □ □ □ □ □
□ □ ■ □ □ ■ ■ □ □ □ ■ □ □ ■ ■ □ ■ ■ □ ■ □ □ □ □ □ □ □ □ □ □
□ ■ ■ □ ■ □ ■ □ □ ■ □ □ □ ■ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ ■ ■
■ ■ ■ ■ □ □ □ □ □ □ □ □ □ ■ ■ ■ □ □ □ □ ■ □ □ □ □ ■ □ ■ ■ ■
■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■
(STEP : MAGNETIZATION : ENERGY) = (54 : -0.713333 : 56425)
(STEP : MAGNETIZATION : ENERGY) = (55 : 0.693333 : 56425)
(STEP : MAGNETIZATION : ENERGY) = (56 : -0.711111 : 55475)
(STEP : MAGNETIZATION : ENERGY) = (57 : 0.72 : 55475)
(STEP : MAGNETIZATION : ENERGY) = (58 : -0.706667 : 54275)
(STEP : MAGNETIZATION : ENERGY) = (59 : 0.7 : 54275)
(STEP : MAGNETIZATION : ENERGY) = (60 : -0.697778 : 50125)
(STEP : MAGNETIZATION : ENERGY) = (61 : 0.68 : 50125)
(STEP : MAGNETIZATION : ENERGY) = (62 : -0.708889 : 51725)
現在のステップ数 : 64
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■
■ ■ □ ■ ■ ■ □ ■ ■ □ ■ □ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■
■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ □ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ □ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ □ □ ■ ■ □ □ ■ ■ ■ ■ ■ □ ■ ■
■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■
■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■
■ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
□ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ □ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
□ □ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
□ ■ □ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ □ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■
□ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ ■
■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■
□ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■
■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ □ □ □ ■ ■ □ ■ ■ ■ ■ ■ ■
□ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ □ ■ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ □ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ ■
(STEP : MAGNETIZATION : ENERGY) = (63 : 0.684444 : 51725)
(STEP : MAGNETIZATION : ENERGY) = (64 : -0.726667 : 53375)
(STEP : MAGNETIZATION : ENERGY) = (65 : 0.708889 : 53375)
(STEP : MAGNETIZATION : ENERGY) = (66 : -0.702222 : 51125)
(STEP : MAGNETIZATION : ENERGY) = (67 : 0.686667 : 51125)
(STEP : MAGNETIZATION : ENERGY) = (68 : -0.713333 : 52175)
(STEP : MAGNETIZATION : ENERGY) = (69 : 0.708889 : 52175)
(STEP : MAGNETIZATION : ENERGY) = (70 : -0.704444 : 51125)
(STEP : MAGNETIZATION : ENERGY) = (71 : 0.711111 : 51125)
現在のステップ数 : 73
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ ■ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □
□ □ ■ □ □ ■ ■ ■ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □
□ □ □ □ □ □ ■ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ ■ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ ■ □ □ ■ ■ □ □ □ □ □ □ ■ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □ ■ □ □ ■ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ ■ □ □ □ ■ □ □ □ ■ ■ □ □ ■ □ ■ ■ □ □ □ □ □ □
□ □ □ □ □ □ □ □ ■ ■ □ □ ■ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □ ■
□ □ □ □ ■ □ □ ■ ■ □ ■ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □
□ ■ ■ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ ■ □ □ □ □ □ □ □
■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ ■ □ □ ■ □ □ □ □
■ ■ ■ ■ □ □ □ □ □ □ □ □ □ ■ □ ■ ■ □ □ □ □ □ □ □ □ □ □ ■ □ □
□ □ □ ■ □ □ □ □ □ □ □ □ ■ □ □ □ ■ □ ■ ■ □ □ □ □ □ □ □ ■ □ □
■ ■ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ ■ □ ■ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ ■ □ □ ■ □ □ ■ □ □ □ □ □ ■ □ □ □ ■ □ □ □ □ □ □
■ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ ■ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ ■ □ ■ □ □ □ □
■ □ ■ □ □ □ □ □ ■ □ □ ■ □ □ □ ■ ■ □ □ □ □ □ ■ □ ■ □ □ □ □ □
□ ■ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ ■ □ ■ ■ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ ■ ■ □ □ ■ □ □ □ □ ■ □ □ □ □ □
□ □ □ □ □ ■ ■ □ □ □ ■ ■ □ ■ ■ □ □ ■ □ ■ ■ □ □ □ ■ □ □ □ □ □
□ □ □ □ ■ □ ■ □ □ □ □ □ ■ □ ■ □ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ ■ □ □ □ ■ □ □ □ ■ □ □ □ □ ■ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
(STEP : MAGNETIZATION : ENERGY) = (72 : -0.715556 : 49475)
(STEP : MAGNETIZATION : ENERGY) = (73 : 0.722222 : 49475)
(STEP : MAGNETIZATION : ENERGY) = (74 : -0.717778 : 50175)
(STEP : MAGNETIZATION : ENERGY) = (75 : 0.742222 : 50175)
(STEP : MAGNETIZATION : ENERGY) = (76 : -0.722222 : 51025)
(STEP : MAGNETIZATION : ENERGY) = (77 : 0.728889 : 51025)
(STEP : MAGNETIZATION : ENERGY) = (78 : -0.733333 : 50425)
(STEP : MAGNETIZATION : ENERGY) = (79 : 0.746667 : 50425)
(STEP : MAGNETIZATION : ENERGY) = (80 : -0.748889 : 53275)
現在のステップ数 : 82
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■
■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■
■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ □ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ □ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ □ □ □ □ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ ■ ■ ■ □ ■ ■
■ ■ □ □ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■
□ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
■ □ ■ □ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ ■ ■ ■
■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■
■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■
□ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■
■ □ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ □ ■ ■ ■ □ □ ■ ■ ■ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □
■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
(STEP : MAGNETIZATION : ENERGY) = (81 : 0.737778 : 53275)
(STEP : MAGNETIZATION : ENERGY) = (82 : -0.731111 : 52275)
(STEP : MAGNETIZATION : ENERGY) = (83 : 0.724444 : 52275)
(STEP : MAGNETIZATION : ENERGY) = (84 : -0.724444 : 52225)
(STEP : MAGNETIZATION : ENERGY) = (85 : 0.748889 : 52225)
(STEP : MAGNETIZATION : ENERGY) = (86 : -0.735556 : 56325)
(STEP : MAGNETIZATION : ENERGY) = (87 : 0.748889 : 56325)
(STEP : MAGNETIZATION : ENERGY) = (88 : -0.737778 : 55825)
(STEP : MAGNETIZATION : ENERGY) = (89 : 0.751111 : 55825)
現在のステップ数 : 91
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ ■ □ □ □
□ □ □ □ □ □ □ □ ■ ■ □ □ □ □ ■ ■ □ □ □ □ □ □ □ □ □ □ ■ □ □ □
□ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ ■ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □
□ □ □ □ □ ■ □ □ □ □ □ ■ ■ □ ■ □ ■ □ □ ■ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ ■ □ □
□ □ □ □ □ □ □ □ ■ □ □ □ ■ □ □ □ ■ □ □ □ ■ □ ■ ■ ■ □ ■ ■ □ □
□ □ ■ □ □ □ □ □ ■ ■ □ □ ■ ■ □ □ □ □ □ □ ■ ■ ■ □ □ □ □ ■ □ □
□ □ □ ■ □ □ □ ■ ■ □ ■ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □
□ □ ■ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □
□ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ ■ □ □ □ □
□ ■ ■ □ ■ □ □ □ □ □ □ □ ■ □ □ ■ □ ■ □ □ □ □ □ □ □ □ □ ■ □ □
■ □ ■ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ □ ■ ■ □ □ □ □ □ □ □ ■ □ □
□ □ □ □ ■ □ ■ ■ □ □ □ □ □ □ □ □ ■ ■ ■ □ □ □ □ □ □ □ □ ■ □ □
□ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ ■ □ ■ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □
□ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ □ □ □ □ ■ □ □ ■ □ □ □ □ □
□ □ ■ □ □ □ □ □ ■ ■ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ ■ □ □ □ ■ □ □ □ □ □
□ □ ■ □ □ □ □ □ □ ■ □ □ □ □ ■ □ ■ ■ □ ■ ■ □ □ □ ■ □ □ □ □ □
□ □ □ □ □ ■ ■ □ □ ■ □ □ □ □ ■ □ □ ■ □ ■ □ □ □ □ □ □ □ □ □ □
□ □ □ ■ ■ ■ □ □ □ □ □ □ □ ■ □ □ ■ ■ □ □ □ □ □ □ □ □ □ □ □ □
□ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ ■ □ □ □ □ □ □ □ □ □
■ □ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □
(STEP : MAGNETIZATION : ENERGY) = (90 : -0.731111 : 55875)
(STEP : MAGNETIZATION : ENERGY) = (91 : 0.74 : 55875)
(STEP : MAGNETIZATION : ENERGY) = (92 : -0.724444 : 55725)
(STEP : MAGNETIZATION : ENERGY) = (93 : 0.737778 : 55725)
(STEP : MAGNETIZATION : ENERGY) = (94 : -0.744444 : 57875)
(STEP : MAGNETIZATION : ENERGY) = (95 : 0.735556 : 57875)
(STEP : MAGNETIZATION : ENERGY) = (96 : -0.711111 : 58125)
(STEP : MAGNETIZATION : ENERGY) = (97 : 0.726667 : 58125)
(STEP : MAGNETIZATION : ENERGY) = (98 : -0.704444 : 55275)
現在のステップ数 : 100
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■
■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ □ □ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ □ ■ ■ ■ ■ ■ □ ■ ■
■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ □ ■ ■ ■ □ □ ■ ■ □ ■ □ □ ■ ■ □ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ □ □ □ ■ ■ □ ■ ■ □ ■ □ ■ □ □ □ ■ ■ ■ ■ ■ □ ■ □
■ ■ ■ ■ ■ ■ ■ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■
■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
■ ■ ■ □ □ ■ ■ ■ □ ■ ■ ■ □ ■ ■ □ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
■ ■ □ ■ ■ ■ ■ ■ □ □ ■ □ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ ■ □ ■ ■ ■
■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■
■ ■ □ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ □ □ ■ ■ □ □ ■ ■ ■ □ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ □ □ □ ■ ■ ■ ■ □ ■ ■ □ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
(STEP : MAGNETIZATION : ENERGY) = (99 : 0.715556 : 55275)

C# - Yahooファイナンスから指定した銘柄コードの企業の現在の株価を取得 -

C#
こちらのSGMLリーダーを用いてYahooファイナンスから指定した銘柄コードの企業の現在の株価を取得するプログラム



using System;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using Sgml;
using System.Xml.Linq;
using System.Collections.Generic;
using System.Windows.Forms;

class StockPrice {

public static void Main() {

StockPriceGetter spg = new StockPriceGetter();

Console.WriteLine("銘柄コードを入力してください");
string code = Console.ReadLine();
try {
spg.getCurrentStockPrice(int.Parse(code));
} catch (Exception e) {
Console.WriteLine("数字を入力してください");
return;
}
if (spg.StockPrice == 0) {
Console.WriteLine("株価の取得に失敗しました");
} else {
Console.WriteLine(spg.CompanyCode + " : " + spg.CompanyName + " : " + spg.StockPrice);
}

return;
}
}


class StockPriceGetter {

public string CompanyName { get;private set;}
public int CompanyCode { get;private set;}
public int StockPrice { get;private set;}
private const string YAHOO_FINANCE_URL = "http://stocks.finance.yahoo.co.jp/stocks/detail/?code={0}";
private const string ENCODE = "UTF-8";

public StockPriceGetter() {
}

public void getCurrentStockPrice(int companyCode) {

this.CompanyCode = companyCode;

XDocument xdoc = convertHTMLToXMLDocument(ENCODE, companyCode);

if (xdoc == null) {
return;
}

extractStockInfo(xdoc);

}

private XDocument convertHTMLToXMLDocument(string encode, int companyCode) {

XDocument xdoc = null;

using (Stream stream = new WebClient().OpenRead(string.Format(YAHOO_FINANCE_URL, companyCode))) {

if (stream == null) {
//接続できなかった時の処理
return null;
}

using (StreamReader sr = new StreamReader(stream, Encoding.GetEncoding(encode))) {

if (sr == null) {

return null;
}

SgmlReader sgmlReader = new SgmlReader();
sgmlReader.DocType = "HTML";
sgmlReader.CaseFolding = CaseFolding.ToLower;
sgmlReader.InputStream = sr;

xdoc = XDocument.Load(sgmlReader);
}
}

return xdoc;
}

public void extractStockInfo(XDocument xdoc) {

XNamespace ns = xdoc.Root.Name.Namespace;

XElement[] stockPriceInfo = (XElement[])((from p in xdoc.Descendants(ns + "table")
where (string)p.Attribute("class") == "stocksTable"
select p).ToArray());

XElement[] tdList = stockPriceInfo[0].Descendants(ns + "td").ToArray();
XElement[] thList = stockPriceInfo[0].Descendants(ns + "th").ToArray();

foreach (XElement td in tdList) {
switch ((string)td.Attribute("class")) {
case "stoksPrice":

StockPrice = int.Parse(td.Value.ToString().Replace(",", ""));
break;
default:
break;
}
}

foreach (XElement th in thList) {
switch ((string)th.Attribute("class")) {
case "symbol":

CompanyName = th.Value.ToString();
break;
default:
break;
}
}
}
}



>csc StockPrice1.cs /reference:SgmlReaderDll.dll
>StockPrice1

銘柄コードを入力してください
4716
4716 : 日本オラクル(株) : 5530

C++ ~ イジングモデルテスト ~

スピン間に交換相互作用J(※負:反強磁性、正強磁性)が働いているときの温度tempにおけるスピン状態。
■=↑、□=↓
対象のスピンが↑向き状態の時の上下左右間のエネルギーをE↑、下向きの時のエネルギーをE↓としたとき、
次のスピン状態が上向きになる確率を
P↑=exp(-E↑/temp)/(exp(-E↑/temp)+exp(-E↓/temp))
下向きになる確率を
P↓=exp(-E↓/temp)/(exp(-E↑/temp)+exp(-E↓/temp))=1-P↑
として各スピンの更新を行っている。
なお、ここではランダムに一つを選んで更新するのではなく、全てのスピンを一斉に更新している。



#include
#include
#include
#define DIM 30
#define J -25
#define MAX_STEP 100
using namespace std;

double getRand() {
return (double)rand()/(double)RAND_MAX;
}

void showData(int data[DIM][DIM])
{
for (int i = 0; i < DIM; i++) {
for (int j = 0; j < DIM; j++) {
cout << ((data[i][j] == 1) ? "■" : "□") << " ";
}
cout << endl;
}
}

void updateData(int oldData[DIM][DIM], int newData[DIM][DIM], double temp)
{
double energy1,energy2;
double flipPosibility;
double interaction = J;

for (int i = 0; i < DIM; i++) {
for (int j = 0; j < DIM; j++) {

/*
if (getRand() < 0.1) {
interaction = (getRand()-0.5)*50.0;
} else {
interaction = J;
}
*/

if (i == 0 && j != 0 && j != DIM-1) {
energy1 += interaction*(oldData[i][j-i] + oldData[i+1][j] + oldData[i][j+1])*oldData[i][j];
energy2 += interaction*(oldData[i][j-i] + oldData[i+1][j] + oldData[i][j+1])*(oldData[i][j] == 1 ? -1 : 1);
} else if (i == DIM-1 && j != 0 && j != DIM -1) {
energy1 += interaction*(oldData[i-1][j] + oldData[i][j-i] + oldData[i][j+1])*oldData[i][j];
energy2 += interaction*(oldData[i-1][j] + oldData[i][j-i] + oldData[i][j+1])*(oldData[i][j] == 1 ? -1 : 1);
} else if (j == 0 && i != 0 && i != DIM-1) {
energy1 += interaction*(oldData[i-1][j] + oldData[i+1][j] + oldData[i][j+1])*oldData[i][j];
energy2 += interaction*(oldData[i-1][j] + oldData[i+1][j] + oldData[i][j+1])*(oldData[i][j] == 1 ? -1 : 1);
} else if (j == DIM-1 && i != 0 && i != DIM -1) {
energy1 += interaction*(oldData[i-1][j] + oldData[i][j-i] + oldData[i+1][j])*oldData[i][j];
energy2 += interaction*(oldData[i-1][j] + oldData[i][j-i] + oldData[i+1][j])*(oldData[i][j] == 1 ? -1 : 1);
} else if ( i == 0 && j == 0){
energy1 += interaction*(oldData[i+1][j] + oldData[i][j+1])*oldData[i][j];
energy2 += interaction*(oldData[i+1][j] + oldData[i][j+1])*(oldData[i][j] == 1 ? -1 : 1);
} else if (i == DIM-1 && j == 0) {
energy1 += interaction*(oldData[i-1][j] + oldData[i][j+1])*oldData[i][j];
energy2 += interaction*(oldData[i-1][j] + oldData[i][j+1])*(oldData[i][j] == 1 ? -1 : 1);
} else if (i == DIM-1 && j == DIM-1) {
energy1 += interaction*(oldData[i-1][j] + oldData[i][j-i])*oldData[i][j];
energy2 += interaction*(oldData[i-1][j] + oldData[i][j-i])*(oldData[i][j] == 1 ? -1 : 1);
} else if (i == 0 && j == DIM-1) {
energy1 += interaction*(oldData[i][j-i] + oldData[i+1][j])*oldData[i][j];
energy2 += interaction*(oldData[i][j-i] + oldData[i+1][j])*(oldData[i][j] == 1 ? -1 : 1);
} else {
energy1 += interaction*(oldData[i-1][j] + oldData[i][j-i] + oldData[i+1][j] + oldData[i][j+1])*oldData[i][j];
energy2 += interaction*(oldData[i-1][j] + oldData[i][j-i] + oldData[i+1][j] + oldData[i][j+1])*(oldData[i][j] == 1 ? -1 : 1);
}


flipPosibility = exp(-energy2 / temp) / (exp(-energy1 / temp) + exp(-energy2 / temp));
if (getRand() <= flipPosibility) {
newData[i][j] = oldData[i][j] == 1 ? -1 : 1;
} else {
newData[i][j] = oldData[i][j];
}
//cout << "flipPosivility" << flipPosibility << endl;

energy1 = energy2 = 0.0;
}
}

for (int i = 1; i < DIM - 1; i++) {

}
}

double getNormalizedMagnetization(int spinMap[DIM][DIM])
{
int up = 0;

for (int i = 0; i < DIM; i++) {
for (int j = 0; j < DIM; j++) {
up += spinMap[i][j];
}
}

return (double)up / (double)(DIM*DIM);
}

int main(void)
{

int spinMap1[DIM][DIM],spinMap2[DIM][DIM];
double temp = 70.0;

srand((unsigned)time(NULL));

for (int i = 0; i < DIM; i++) {
for (int j = 0; j < DIM; j++) {
spinMap1[i][j] = 1;
spinMap2[i][j] = 1;
}
}

for (int step = 0; step < (int)MAX_STEP; step++) {
if (step % 2 == 0) {
updateData(spinMap1, spinMap2, temp);
} else {
updateData(spinMap2, spinMap1, temp);
}


if (step % 10 == 0) {
cout << "現在のステップ数 : " << step+1 << endl;
showData(spinMap1);
}

cout << "step:現在の磁化=(" << step << "," << getNormalizedMagnetization(spinMap1) << ")" << endl;
}

return 0;
}



結果
現在のステップ数 : 1
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
step:現在の磁化=(0,1)
step:現在の磁化=(1,0.822222)
step:現在の磁化=(2,0.822222)
step:現在の磁化=(3,0.673333)
step:現在の磁化=(4,0.673333)
step:現在の磁化=(5,0.635556)
step:現在の磁化=(6,0.635556)
step:現在の磁化=(7,0.577778)
step:現在の磁化=(8,0.577778)
step:現在の磁化=(9,0.528889)
現在のステップ数 : 11
■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ □ ■ ■ ■ □ □ □ □ ■ ■ □ ■ □ ■ ■ □ □ ■ □
□ ■ □ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ □ □ ■ ■ ■ □ □ ■ ■
■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ □ ■ ■ ■ □
■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■
■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ □ ■
■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ □ ■ □ ■ ■ □ ■ ■ ■ □
■ □ ■ ■ □ ■ ■ □ ■ □ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■
□ ■ ■ □ ■ ■ ■ □ □ ■ □ □ □ ■ ■ □ □ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ □ ■
■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
■ ■ ■ □ ■ ■ □ □ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■
■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
■ ■ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■
□ ■ □ □ □ □ □ □ ■ ■ ■ □ ■ □ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■
■ ■ ■ □ □ □ ■ □ □ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ □ □ ■ ■ ■ □ ■ ■ □ ■
□ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ □
■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □
■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ □ ■ ■ □ ■ ■ ■ □ □
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ □ ■ ■ □ ■ ■ □
■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ □ □ ■ ■ □ ■ ■ ■ □
■ ■ ■ ■ □ ■ ■ □ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □
□ ■ □ ■ ■ ■ ■ ■ □ □ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ □ □ ■ ■ ■ ■ □
■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■
■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □
■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■ □ ■ ■ ■ □
□ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ □ ■
□ ■ □ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ □ □ □ ■ ■ □ ■ ■ □ □
□ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ □ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■
step:現在の磁化=(10,0.528889)
step:現在の磁化=(11,0.537778)
step:現在の磁化=(12,0.537778)
step:現在の磁化=(13,0.515556)
step:現在の磁化=(14,0.515556)
step:現在の磁化=(15,0.502222)
step:現在の磁化=(16,0.502222)
step:現在の磁化=(17,0.453333)
step:現在の磁化=(18,0.453333)
step:現在の磁化=(19,0.415556)
現在のステップ数 : 21
□ ■ ■ □ □ ■ ■ ■ ■ ■ □ ■ ■ □ □ □ ■ □ □ □ □ □ □ ■ ■ ■ ■ □ □ □
■ ■ ■ ■ □ □ ■ □ ■ ■ ■ □ ■ □ □ □ ■ ■ □ ■ ■ □ ■ ■ ■ ■ □ □ □ □
■ □ ■ □ □ ■ ■ □ ■ ■ □ ■ □ ■ □ □ ■ □ □ ■ □ ■ ■ □ ■ □ ■ ■ □ ■
□ ■ □ ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ □ □ □ ■ ■ □ □ ■ ■ □ ■ ■ ■ ■ □
□ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ □ ■ ■ □ ■ ■ □ ■ ■ ■ ■
□ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □
□ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ □ ■ ■ ■ □ ■ ■ ■ ■ □
■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■
■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■
■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ □ ■ □ ■ ■ □ ■ □ □ ■ □ □ ■ ■ ■ ■ ■ □
■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ □ ■ □ ■ ■ ■ ■ □ ■ ■ ■ □ □ □ ■ □ ■ □ ■
■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ □ ■ □ ■ □ □ □ ■ □ ■ ■ □ ■ □ ■ □
■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ □ □ □ □ ■ □ ■
■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ □ ■ ■ ■ ■ □ ■ □ ■ □ ■ □ □ □ ■ ■ □ □
■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ □ ■ □ ■ □ ■ □ ■ □ ■ □ ■ □ ■
■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ □ ■ ■ □ ■
□ □ ■ ■ □ □ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ □ □ □ ■ ■ □ □
■ ■ ■ □ ■ □ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □
■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ □ ■
■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ □ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■
□ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □
□ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ □
□ ■ ■ □ ■ ■ □ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■
□ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ □ ■ □ ■ ■ ■ □ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■
■ ■ ■ □ ■ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ □ □ ■ ■ ■ □ ■ □
■ ■ ■ ■ ■ □ ■ □ ■ □ □ ■ ■ □ □ ■ ■ ■ ■ ■ ■ □ ■ □ □ ■ ■ ■ ■ □
■ ■ ■ ■ ■ ■ □ ■ □ □ □ □ ■ □ ■ □ ■ □ □ ■ ■ □ □ □ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ □ □ □ ■ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■
step:現在の磁化=(20,0.415556)
step:現在の磁化=(21,0.455556)
step:現在の磁化=(22,0.455556)
step:現在の磁化=(23,0.413333)
step:現在の磁化=(24,0.413333)
step:現在の磁化=(25,0.402222)
step:現在の磁化=(26,0.402222)
step:現在の磁化=(27,0.451111)
step:現在の磁化=(28,0.451111)
step:現在の磁化=(29,0.446667)
現在のステップ数 : 31
□ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ □ □ ■ □ □ ■ □ ■ □ ■ ■ □ ■ ■ □ ■
□ □ □ ■ ■ □ □ ■ □ ■ ■ □ ■ □ □ ■ □ ■ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ □ ■ ■ □ ■ □ □ ■ □ □ □ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ □
□ ■ ■ ■ ■ ■ □ □ □ ■ ■ □ □ ■ ■ □ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■
■ ■ □ ■ ■ ■ ■ □ □ ■ ■ □ □ □ ■ □ ■ □ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ □
■ □ □ ■ □ □ ■ □ ■ ■ □ ■ □ ■ ■ ■ ■ ■ □ ■ □ ■ ■ □ ■ □ □ ■ ■ ■
□ □ ■ □ ■ □ □ ■ □ ■ ■ ■ □ ■ ■ □ ■ □ □ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■
■ □ □ ■ ■ ■ □ □ ■ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
□ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ □ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ □ ■ ■ ■
□ ■ ■ □ ■ ■ ■ ■ □ ■ □ ■ □ ■ □ ■ □ □ ■ □ ■ ■ ■ ■ □ ■ ■ ■ □ □
■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ □ ■ ■ □ ■ ■ ■ □ □ ■ ■ ■ □ ■ □
■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ □
■ ■ ■ ■ □ □ ■ ■ □ ■ □ □ ■ ■ □ □ ■ ■ ■ ■ ■ ■ □ ■ □ ■ □ □ ■ ■
■ ■ ■ ■ ■ □ □ ■ ■ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ □ □ ■ □ □
■ ■ ■ ■ □ ■ ■ □ ■ ■ □ □ ■ ■ ■ ■ □ ■ ■ ■ ■ □ □ ■ ■ □ ■ ■ ■ □
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■
□ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■
■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ □ □ □ □ ■ ■ ■ □
■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ □ □ □ ■ ■ □ ■ □ □
■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ □ □ ■ □ ■ □
■ □ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ □ ■ □ ■ ■ ■
■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ □ ■ □
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ □ ■ ■ ■ ■ ■
■ ■ ■ □ □ ■ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■
■ ■ ■ ■ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ □ ■ □ ■ ■
■ □ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■
■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ □ □
step:現在の磁化=(30,0.446667)
step:現在の磁化=(31,0.415556)
step:現在の磁化=(32,0.415556)
step:現在の磁化=(33,0.386667)
step:現在の磁化=(34,0.386667)
step:現在の磁化=(35,0.422222)
step:現在の磁化=(36,0.422222)
step:現在の磁化=(37,0.42)
step:現在の磁化=(38,0.42)
step:現在の磁化=(39,0.393333)
現在のステップ数 : 41
□ ■ ■ □ □ □ □ ■ □ □ □ ■ □ □ □ □ □ □ □ □ ■ ■ □ ■ ■ ■ ■ ■ □ □
□ ■ ■ □ □ □ ■ ■ ■ □ □ ■ □ ■ □ ■ □ ■ □ ■ □ □ ■ ■ ■ ■ ■ ■ □ □
■ □ ■ ■ □ ■ □ ■ ■ □ □ □ ■ ■ ■ □ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
□ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
■ □ ■ □ ■ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■ ■ □ ■ □ □ □ ■ ■ ■ □ □ □ ■
□ ■ ■ □ □ ■ ■ ■ ■ □ □ ■ ■ ■ □ ■ □ □ □ ■ ■ ■ ■ □ □ ■ ■ □ ■ ■
□ □ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■ □ ■ □ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □
□ □ ■ ■ ■ ■ □ ■ □ □ ■ ■ □ ■ □ ■ ■ ■ ■ □ ■ □ ■ □ ■ □ ■ □ ■ ■
□ □ □ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ □ □ □ □ □ ■ ■ ■
□ ■ □ □ □ ■ □ □ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ □ ■ ■ □ ■
■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ □ ■ ■ □ □ □ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ □ □ □ □ ■ ■ □ □ □ ■ □ ■ □ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ □ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■ ■
■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
□ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ □ ■ □ ■ ■ □ □ ■ ■ ■ ■ ■ □ ■ ■ □ ■ □
■ ■ ■ ■ □ ■ □ ■ □ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ □ ■ ■ ■
■ ■ ■ ■ □ ■ ■ □ □ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■
□ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
□ □ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■
■ □ □ □ ■ □ ■ ■ ■ □ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■
□ □ ■ □ □ ■ ■ □ □ ■ ■ ■ □ ■ ■ ■ □ ■ ■ □ ■ ■ ■ □ ■ □ □ ■ ■ ■
■ □ ■ □ □ □ ■ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ □ □
□ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ □ ■ □ □ ■ ■ ■ ■ □ ■ □ □ ■ ■ ■ ■ □ □
■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □
□ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ □ □ ■ □ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■
■ ■ ■ ■ ■ ■ □ □ ■ ■ □ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
□ ■ □ ■ ■ ■ □ ■ □ ■ □ □ □ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ □
step:現在の磁化=(40,0.393333)
step:現在の磁化=(41,0.422222)
step:現在の磁化=(42,0.422222)
step:現在の磁化=(43,0.44)
step:現在の磁化=(44,0.44)
step:現在の磁化=(45,0.415556)
step:現在の磁化=(46,0.415556)
step:現在の磁化=(47,0.388889)
step:現在の磁化=(48,0.388889)
step:現在の磁化=(49,0.38)
現在のステップ数 : 51
□ □ □ □ □ □ ■ □ □ ■ ■ □ □ □ □ ■ ■ ■ □ □ □ □ □ ■ ■ ■ ■ □ ■ □
□ ■ □ ■ ■ ■ ■ □ ■ □ □ ■ ■ □ □ □ □ □ □ □ □ ■ □ ■ ■ ■ □ ■ ■ ■
■ □ ■ ■ ■ □ ■ ■ □ □ ■ □ □ □ ■ ■ □ ■ □ □ □ □ ■ □ ■ ■ ■ ■ ■ ■
□ ■ ■ □ □ □ □ □ ■ □ □ □ □ □ □ □ ■ □ ■ ■ ■ □ □ ■ ■ □ □ ■ ■ □
■ ■ ■ □ ■ □ □ □ □ □ □ □ □ □ □ □ □ ■ □ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■
■ □ ■ ■ ■ ■ ■ □ □ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ ■ ■ ■
■ □ ■ ■ □ ■ □ ■ □ ■ ■ □ □ □ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■
■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □
■ ■ ■ □ □ ■ □ ■ ■ ■ ■ □ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■
■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □
■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ □ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ ■ ■ □ ■ ■ ■ ■
□ ■ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ □ ■
■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■
■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
□ ■ ■ ■ □ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ □ ■ ■ ■ ■ □
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ □
□ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ □ ■ ■ □ ■ □ □ ■ □ ■ ■ ■
■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ □ ■
■ ■ ■ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ □
□ ■ ■ ■ □ □ ■ ■ □ □ ■ ■ ■ ■ ■ □ ■ □ ■ ■ □ ■ ■ □ □ ■ □ □ ■ ■
□ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ □ ■ □ □ ■ ■ ■ ■ ■ ■ ■
■ ■ □ ■ □ □ □ ■ □ ■ ■ □ □ □ ■ ■ ■ ■ □ □ ■ □ □ □ ■ ■ ■ □ ■ ■
■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ □ □ □ ■ □ □ □ □ ■ □ ■ ■ □ ■ ■ □ ■ ■
■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ □ □ ■ □ □ □ ■ ■ □ ■ ■
■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ □ ■ ■ ■ □ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ □ ■ □ ■ ■ □ ■ □ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ □ ■ □ □ ■ ■
■ □ ■ □ ■ ■ □ □ ■ ■ □ ■ □ □ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ □ ■
step:現在の磁化=(50,0.38)
step:現在の磁化=(51,0.415556)
step:現在の磁化=(52,0.415556)
step:現在の磁化=(53,0.395556)
step:現在の磁化=(54,0.395556)
step:現在の磁化=(55,0.422222)
step:現在の磁化=(56,0.422222)
step:現在の磁化=(57,0.413333)
step:現在の磁化=(58,0.413333)
step:現在の磁化=(59,0.377778)
現在のステップ数 : 61
■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ □ ■ □ ■ ■ □ □ □ □ □ ■ □ □ □ ■ ■ ■ ■
■ ■ ■ ■ □ ■ ■ ■ ■ □ □ ■ ■ ■ □ ■ ■ □ □ ■ □ □ ■ □ □ □ □ □ ■ □
■ ■ ■ ■ ■ ■ □ ■ □ □ ■ □ ■ □ □ □ □ ■ □ □ ■ □ □ □ □ □ ■ ■ ■ ■
■ □ ■ ■ ■ ■ ■ □ ■ □ □ ■ □ □ □ ■ □ ■ □ ■ □ ■ ■ ■ □ □ □ ■ □ ■
■ ■ □ □ ■ ■ □ □ ■ □ ■ □ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■
■ ■ □ ■ □ ■ ■ □ □ ■ □ □ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □
□ ■ ■ ■ ■ □ ■ ■ □ ■ □ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
■ ■ □ ■ □ □ ■ □ ■ ■ ■ ■ □ ■ ■ □ □ □ □ ■ ■ ■ ■ □ ■ ■ ■ ■ □ □
□ ■ □ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ □ □ ■
■ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ □ ■
■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ ■ ■ □ ■ ■ ■ ■ □ □ □ ■ ■
■ ■ □ ■ ■ □ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ □ □ ■ □ ■ □ ■ □ ■ ■ ■ ■
□ □ ■ ■ □ ■ □ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ □ ■ ■ ■
■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ □ ■ □ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ □ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
■ ■ ■ □ □ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■
■ ■ ■ ■ □ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ □ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ □ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ □
■ ■ □ ■ □ ■ ■ ■ ■ ■ □ □ ■ □ ■ ■ □ ■ ■ ■ □ □ ■ ■ ■ ■ □ ■ ■ □
□ ■ □ ■ □ □ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
■ ■ □ □ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ □ ■ □ ■ □ ■ ■ ■ ■ ■ □ □ ■ ■
□ □ □ □ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ □ □ ■ □ □ ■ ■ □ □ ■ ■ ■ ■
□ □ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ ■ ■ ■ □ □ ■ □ ■ □ □ ■ ■ □ ■ ■ ■ ■
■ □ ■ ■ ■ ■ □ □ ■ ■ □ □ □ □ □ □ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ □ ■ ■ □ □ ■ □ □ ■ ■ ■ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ □ □ □ ■ ■ □ ■ □ □ □ □ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■
□ □ □ ■ ■ □ □ ■ ■ □ ■ ■ ■ ■ □ □ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □
■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ □ □ □ □ ■ ■ ■ ■ ■ □ ■ ■ ■
step:現在の磁化=(60,0.377778)
step:現在の磁化=(61,0.395556)
step:現在の磁化=(62,0.395556)
step:現在の磁化=(63,0.402222)
step:現在の磁化=(64,0.402222)
step:現在の磁化=(65,0.404444)
step:現在の磁化=(66,0.404444)
step:現在の磁化=(67,0.38)
step:現在の磁化=(68,0.38)
step:現在の磁化=(69,0.402222)
現在のステップ数 : 71
□ □ □ ■ □ ■ ■ □ ■ ■ ■ □ □ □ □ □ □ ■ ■ ■ ■ □ □ ■ ■ □ ■ ■ □ ■
□ ■ □ □ □ ■ □ ■ □ ■ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■ □ ■ ■ □ ■ ■ □ ■
■ □ □ ■ □ ■ ■ □ ■ ■ □ ■ □ □ ■ ■ ■ □ ■ □ ■ □ □ □ □ ■ ■ □ ■ ■
■ ■ □ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ □ □ □ ■ □ ■ ■ ■ □ ■ □ ■
■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ □ □ ■ ■ ■ □ ■ □ □ ■ ■ □ ■ ■ □ □ □ ■
■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■
□ ■ □ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ □
■ □ ■ □ □ ■ □ ■ □ □ □ ■ □ □ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■
■ □ □ ■ □ ■ □ ■ ■ □ ■ ■ ■ □ ■ ■ □ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■
■ ■ □ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ □ ■ ■ ■ ■ ■ □ □ ■ □ ■ □ ■ ■ ■ □
□ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
□ ■ ■ ■ ■ □ ■ □ □ ■ □ ■ ■ ■ □ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■
■ □ ■ □ □ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ □ □ ■ □ ■ □ ■ ■ ■ ■ ■ □
□ ■ □ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■
■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ ■ ■ ■ ■ □ ■ ■ ■ ■
□ □ □ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ □ ■
■ ■ □ □ □ □ ■ ■ ■ □ ■ ■ ■ □ □ ■ □ ■ ■ □ ■ □ □ ■ ■ ■ □ ■ ■ □
■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ ■ ■ ■ ■ □ ■ □ □ ■ □ ■ ■ ■ ■ □ ■
■ ■ □ ■ □ ■ □ ■ ■ ■ ■ □ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ □ □ ■ □ ■ ■ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ □ □ ■ □ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■
■ □ ■ □ ■ ■ □ ■ □ ■ □ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■
□ □ □ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ □ □ ■ ■ ■ ■ ■ □
□ ■ ■ ■ □ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■
■ ■ □ □ ■ □ □ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ □
■ □ □ ■ □ ■ □ ■ ■ ■ □ □ □ □ □ ■ □ ■ ■ □ ■ □ □ □ ■ ■ ■ ■ ■ □
step:現在の磁化=(70,0.402222)
step:現在の磁化=(71,0.453333)
step:現在の磁化=(72,0.453333)
step:現在の磁化=(73,0.455556)
step:現在の磁化=(74,0.455556)
step:現在の磁化=(75,0.522222)
step:現在の磁化=(76,0.522222)
step:現在の磁化=(77,0.5)
step:現在の磁化=(78,0.5)
step:現在の磁化=(79,0.513333)
現在のステップ数 : 81
□ □ □ ■ ■ □ ■ ■ ■ ■ ■ □ □ ■ ■ □ □ □ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ □
■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ □ ■ ■ ■ ■ □ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■
■ ■ □ □ ■ □ ■ □ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■
□ □ ■ □ □ □ ■ □ ■ □ ■ □ ■ □ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■
□ ■ □ □ ■ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ □ □ ■ ■ ■ □ □ ■ ■ ■ ■ □ ■ ■
□ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ ■ ■ ■ □ □ □ ■ ■ ■ ■ □ ■ ■ □ ■ ■
■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □
□ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ □ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □
□ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
□ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
□ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ □ □ ■ ■ □ ■ □ ■ ■ ■ □ □ ■ ■ □
□ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ □ □ □ ■ □ ■ ■ ■ □ □ ■ ■ □
■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □
□ ■ ■ ■ □ □ ■ ■ □ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ □ □ ■
■ ■ ■ ■ ■ ■ □ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■
□ □ ■ ■ ■ ■ □ □ □ ■ □ □ ■ ■ ■ □ ■ □ □ □ ■ □ □ ■ □ ■ ■ ■ ■ ■
■ □ ■ ■ ■ ■ ■ □ ■ ■ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ □ ■ □ ■ ■
■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ □ ■ ■ ■
□ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ □ ■ ■ ■
■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ □ ■ □ □ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■
□ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ □ □ □ ■ □ □ ■ □ ■ □ ■ ■ □ ■ □ ■
□ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ □ □ □ ■ □ □ □
□ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ □ ■ □ ■ ■ □ ■ ■ □ □ ■ □ ■
step:現在の磁化=(80,0.513333)
step:現在の磁化=(81,0.575556)
step:現在の磁化=(82,0.575556)
step:現在の磁化=(83,0.524444)
step:現在の磁化=(84,0.524444)
step:現在の磁化=(85,0.506667)
step:現在の磁化=(86,0.506667)
step:現在の磁化=(87,0.497778)
step:現在の磁化=(88,0.497778)
step:現在の磁化=(89,0.493333)
現在のステップ数 : 91
■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ □ ■ □ □ ■ □ □ ■ ■ ■ □ □ □
■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■
□ ■ ■ ■ ■ □ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ □ ■ □ □ ■ ■ ■ ■ □ □ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ □ ■ ■ ■ □ ■ □ ■
□ ■ □ ■ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■
□ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ ■ ■ ■ ■ ■ □
□ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■
□ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □
■ ■ □ ■ □ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ □ ■ □ □ ■ ■ □
■ ■ ■ □ ■ ■ □ □ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ □
□ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ □ ■ ■ □ ■ ■ ■ ■ □
□ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ □ □ ■ □ ■ ■ ■ ■ ■ □ □ ■ ■ □ ■ □
■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■
□ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □
□ □ ■ ■ ■ ■ ■ ■ □ ■ □ ■ ■ □ ■ □ ■ □ ■ □ ■ ■ ■ □ ■ ■ ■ ■ ■ □
■ ■ □ □ ■ ■ □ □ □ □ ■ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ □ ■ □ ■ ■ ■ □ □
■ ■ □ ■ ■ ■ ■ ■ ■ □ □ ■ ■ □ ■ □ ■ □ ■ □ □ ■ ■ ■ ■ ■ □ □ ■ □
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■
□ ■ ■ ■ ■ □ ■ □ ■ ■ □ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■
■ ■ ■ ■ ■ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □
□ ■ ■ ■ □ ■ □ ■ ■ ■ ■ ■ □ □ ■ □ ■ ■ ■ ■ □ ■ ■ ■ ■ ■ ■ ■ □ ■
□ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ □ ■ ■ □ ■ □ □ ■ ■ □ ■ ■
□ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ □ ■ ■ □ ■ ■ □ ■ ■ ■ □ ■ ■
□ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ ■ ■ □ ■ ■ □ ■ ■ ■ ■ ■ ■ □ ■ ■ □ □
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■
□ □ ■ ■ ■ ■ ■ □ □ □ ■ ■ ■ □ □ ■ □ ■ ■ ■ □ ■ ■ ■ □ ■ ■ ■ ■ □
■ □ ■ ■ ■ ■ □ ■ □ ■ □ ■ ■ □ □ ■ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ ■
■ □ □ ■ ■ ■ ■ ■ ■ □ □ □ □ □ □ ■ □ ■ □ ■ ■ ■ □ □ ■ □ □ ■ ■ □
■ ■ ■ ■ □ ■ □ □ ■ ■ ■ □ □ □ ■ ■ ■ ■ □ □ □ ■ □ ■ ■ ■ ■ □ ■ □
step:現在の磁化=(90,0.493333)
step:現在の磁化=(91,0.477778)
step:現在の磁化=(92,0.477778)
step:現在の磁化=(93,0.468889)
step:現在の磁化=(94,0.468889)
step:現在の磁化=(95,0.491111)
step:現在の磁化=(96,0.491111)

C++ - 磁化-温度データから磁気エントロピー変化の温度依存性計算 -

各磁場におけるM-T(磁化-温度)データから、マクスウェルの式を用いて磁気エントロピー変化
を計算するクラス。

温度T、磁場Hにおける磁気エントロピー変化ΔSは
マクスウェルの方程式


離散データに対しては



使い方は
1.温度-磁化のデータをタブもしくはカンマで区切ったフォーマットで各磁場ごとにファイルを準備をする。
※このときファイル名は●T.▲としておく(●は磁場の大きさ(単位はテスラ)、▲は拡張子(なんでもOK)、例:3.5T.txt)
2.selectDataFolder()で上記のデータが保存されているディレクトリを選択する。
3.readAllDataFileName()で上記のファイル名規則に従ったファイル名のみが読み込まれる。
※読み込まれるファイル名規則はisValidDataFileName(const char *file_name)内で正規表現であらわしているので、そこを変更すれば読み込まれるファイル名規則を変更できる。
4.readAllMTData()で3で保存したファイル名を用いて各ファイルからデータを読み込む
5.calculateDerivative()で磁化の温度微分を求める(dM/dT計算)
6.interpolateWithConstantTemperatureInterval(2.0)で引数(この場合2)で指定した温度間隔でデータを線形補間する。
7.calculateMagneticEntropy(2.0)で引数(この場合2テスラ)で指定した磁場における磁気エントロピー変化の温度依存性を計算しメモリに保存する。ここで異なる磁場(引数)に対して複数回実行可能。
8.save()で7で計算した各磁場の磁気エントロピー変化の温度依存性をファイルに保存する。保存先フォルダを指定するダイアログが表示される。




#include
#include
#include
#include
#include
#include
#include
#include
#pragma comment(lib, "User32.lib")
#pragma comment(lib, "Shell32.lib")
#pragma comment(lib, "Ole32.lib")
using namespace std;

class MTData //Temperature vs Magnetization Data
{
public:
double mMagneticField;
vector mTemperature;
vector mMagnetization;
vector mDerivative;
int mTemperatureIndexOffset;
};

bool operator<(const MTData& data1, const MTData data2)
{
return data1.mMagneticField < data2.mMagneticField;
}

bool operator>(const MTData& data1, const MTData data2)
{
return data1.mMagneticField > data2.mMagneticField;
}

class STData // Temperature vs MagneticEntropy Data
{
public:
double mMagneticField;
vector mTemperature;
vector mEntropy;
};

class MagneticEntropyCalculater
{

private:
bool mIsDataFolderPathSet;
bool mIsOutputFolderPathSet;
string mDataFolderPath;
string mDataFolderFullPath;
string mOutputFolderPath;
string mOutputFolderFullPath;
vector mDataFileNameList;
vector mMagneticFieldList;
vector mMTDataList;
vector mSTDataList;
double mTemperatureInterval;
double mMinTemperature;
double mMaxTemperature;
public:
MagneticEntropyCalculater();
bool selectDataFolder();
bool readAllDataFileName();
void readAllMTData();
void showMTData(double magneticField);
void calculateDerivative();
void interpolateWithConstantTemperatureInterval(double temperatureInterval);
void calculateMagneticEntropy(double maxField);
bool save();
private:

void readMTData(string filePath);
bool isValidDataFileName(const char *file_name);
template T findMaxValue(vector &values);
template T findMinValue(vector &values);
int findNearTmperatureIndex(double temperature, MTData& mtdata);
double calculateLinearInterpolcationFromAdjacentMagnetizationData(double temperature, MTData& mtdata);
double calculateLinearInterpolcationFromAdjacentDerivativeData(double temperature, MTData& mtdata);
void setTemperatureIndexOffset(double minTemperature);
double integrateWithRespectToFieldAtConstantTemperature(int index, double maxField);
bool selectOutputFolder();
};

MagneticEntropyCalculater::MagneticEntropyCalculater()
{
mDataFolderPath.reserve(MAX_PATH);
mDataFolderFullPath.reserve(MAX_PATH);
mIsDataFolderPathSet = false;
mIsOutputFolderPathSet = false;
}

bool MagneticEntropyCalculater::selectDataFolder()
{

BROWSEINFO binfo;
LPITEMIDLIST idlist;
char dataFolderPath[MAX_PATH], dataFolderFullPath[MAX_PATH];

binfo.hwndOwner = NULL;
binfo.pidlRoot = NULL;
binfo.pszDisplayName = (LPSTR)dataFolderPath;
binfo.lpszTitle = "M-Tデータが保存されているフォルダを選択してください";
binfo.ulFlags = BIF_RETURNONLYFSDIRS;
binfo.lpfn = NULL;
binfo.lParam = 0;
binfo.iImage = 0;

mDataFolderPath = dataFolderPath;

if((idlist=SHBrowseForFolder(&binfo))==NULL)
{
MessageBox(NULL,"M-Tデータが保存されているフォルダを選択してください","キャンセル",MB_OK);
return false;
}
else
{
SHGetPathFromIDList(idlist,dataFolderFullPath);
mDataFolderFullPath = dataFolderFullPath;

CoTaskMemFree(idlist);
}
mIsDataFolderPathSet = true;
return true;
}

bool MagneticEntropyCalculater::readAllDataFileName()
{
do {
if(!mIsDataFolderPathSet)
{
MessageBox(NULL, "データフォルダーが選択されていません", NULL, MB_OK);
break;
}
char buf[MAX_PATH],curdir[MAX_PATH];
WIN32_FIND_DATA wfd;
string filename;

GetCurrentDirectory(MAX_PATH, curdir);
SetCurrentDirectory(mDataFolderFullPath.c_str());
HANDLE h;
h = FindFirstFile("*", &wfd);

if (h == INVALID_HANDLE_VALUE)
{
break;
}

if (!(wfd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
{
if(isValidDataFileName((const char *)wfd.cFileName))
{
filename = wfd.cFileName;
mDataFileNameList.push_back(filename);
}
}

while (1)
{
if (FindNextFile(h, &wfd))
{
if (!(wfd.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
{
if(isValidDataFileName((const char *)wfd.cFileName))
{
filename = wfd.cFileName;
mDataFileNameList.push_back(filename);
}
}
}
else
{
break;
}
}

SetCurrentDirectory(curdir);

if (mDataFileNameList.size() == 0)
{
MessageBox(NULL,"選択フォルダ内に有効なデータが一つも見つかりませんでした", NULL, MB_OK);
break;
}
else
{
string namelist;
for (int i = 0; i < mDataFileNameList.size(); i++)
{
namelist += mDataFileNameList[i] + "\n";
}
namelist += "をデータファイルとして使用します";
MessageBox(NULL, namelist.c_str(), NULL, MB_OK);
return true;
}

} while (0);

return false;
}

void MagneticEntropyCalculater::readMTData(string fileName)
{
ifstream ifs(mDataFolderFullPath + "\\" + fileName);

if (ifs == NULL)
{
MessageBox(NULL, "ファイルが開けません", NULL, MB_OK);
return;
}

string buf;
size_t pos;
MTData mtdata;
bool bFormatError = false;

mtdata.mMagneticField = atof((fileName.substr(0, fileName.find_last_of("T"))).c_str());
while (ifs && getline(ifs, buf))
{
if ((pos = buf.find_first_of("\t")) != string::npos)
{
mtdata.mTemperature.push_back(atof((buf.substr(0, pos)).c_str()));
mtdata.mMagnetization.push_back(atof((buf.substr(pos)).c_str()));
}
else if ((pos = buf.find_first_of(",")) != string::npos)
{
mtdata.mTemperature.push_back(atof((buf.substr(0, pos)).c_str()));
mtdata.mMagnetization.push_back(atof((buf.substr(pos)).c_str()));
}
else
{
bFormatError = true;
}
}

if (bFormatError)
{
MessageBox(NULL, "データのフォーマットが正しくありません。各データはタブかカンマで区切ってください", NULL, MB_OK);
}

if (mtdata.mTemperature.size() > 1 && mtdata.mMagnetization.size() > 1)
{
mMTDataList.push_back(mtdata);
}
else
{
string str;
ostringstream os;
os << mtdata.mMagneticField;
str += os.str();
str += "Tのデータはデータ数が少なすぎるため除外しました";
MessageBox(NULL, str.c_str(), NULL, MB_OK);
}

}

void MagneticEntropyCalculater::readAllMTData()
{
mMTDataList.clear();
for (string filename : mDataFileNameList)
{
readMTData(filename);
}
sort(mMTDataList.begin(), mMTDataList.end());

}

void MagneticEntropyCalculater::showMTData(double magneticField)
{
for (MTData mtdata : mMTDataList)
{
if (mtdata.mMagneticField == magneticField)
{
cout << "********* Magnetic Field : " << magneticField << " ****************" << endl;
cout << "Temperature" << "\t" << "Magnetization" << "\t" << "Derivative" << endl;
for (int i = 0; i < mtdata.mDerivative.size(); i++)
{

cout << mtdata.mTemperature[i] << "\t\t" << mtdata.mMagnetization[i] << "\t\t" << mtdata.mDerivative[i] << endl;

}
cout << "***************************************************" << endl;
return;
}
}
cout << magneticField << "Tのデータはありません" << endl;
}

bool MagneticEntropyCalculater::isValidDataFileName(const char *file_name)
{
string name;
double magneticField;
name = file_name;

name = name.substr(0, name.find_last_of("."));
regex pattern("^\\d+(\\.\\d+)?[T]$");
smatch match;

if (!regex_match(name, match, pattern))
{
return false;
}

name = name.substr(0, name.find_last_of("T"));
mMagneticFieldList.push_back(atof(name.c_str()));
return true;
}

void MagneticEntropyCalculater::calculateDerivative()
{
for (int j = 0; j < mMTDataList.size(); j++)
{

for (int i = 1; i < mMTDataList[j].mTemperature.size(); i++)
{

mMTDataList[j].mDerivative.push_back( (mMTDataList[j].mMagnetization[i] - mMTDataList[j].mMagnetization[i-1]) / (mMTDataList[j].mTemperature[i] - mMTDataList[j].mTemperature[i-1]));

}
}
}

void MagneticEntropyCalculater::interpolateWithConstantTemperatureInterval(double temperatureInterval)
{

double minTemperature, maxTemperature, mod, m, d;
vector newTemperature, newMagnetization, newDerivative;
int index;

mTemperatureInterval = temperatureInterval;

mMinTemperature = DBL_MIN;
mMaxTemperature = DBL_MAX;

for (int j = 0; j < mMTDataList.size(); j++)
{

newTemperature.clear();
newMagnetization.clear();
newDerivative.clear();

mod = fmod(findMinValue(mMTDataList[j].mTemperature),temperatureInterval);

if (mod != 0.0)
{
minTemperature = mMTDataList[j].mTemperature[0] - mod + temperatureInterval;
}
else
{
minTemperature = mMTDataList[j].mTemperature[0];
}

if (mMinTemperature < minTemperature)
{
mMinTemperature = minTemperature;
}

mod = fmod(findMaxValue(mMTDataList[j].mTemperature),temperatureInterval);
maxTemperature = mMTDataList[j].mTemperature[mMTDataList[j].mTemperature.size()-1] - mod;

if (mMaxTemperature > maxTemperature)
{
mMaxTemperature = maxTemperature;
}

for (double temperature = minTemperature; temperature <= maxTemperature; temperature += temperatureInterval)
{


m = calculateLinearInterpolcationFromAdjacentMagnetizationData(temperature, mMTDataList[j]);
d = calculateLinearInterpolcationFromAdjacentDerivativeData(temperature, mMTDataList[j]);

newTemperature.push_back(temperature);
newMagnetization.push_back(m);
newDerivative.push_back(d);
//mMTDataList[j].mDerivative.push_back( (mMTDataList[j].mMagnetization[i] - mMTDataList[j].mMagnetization[i-1]) / (mMTDataList[j].mTemperature[i] - mMTDataList[j].mTemperature[i-1]));

}

mMTDataList[j].mTemperature = newTemperature;
mMTDataList[j].mMagnetization = newMagnetization;
mMTDataList[j].mDerivative = newDerivative;
}

setTemperatureIndexOffset(mMinTemperature);
}


template T MagneticEntropyCalculater::findMaxValue(vector &values)
{
T maxVal;

if (values.size() == 0)
{
return NULL;
}

maxVal = values[0];

for (int i = 1; i < values.size(); i++)
{
if (maxVal < values[i])
{
maxVal = values[i];
}
}

return maxVal;
}

template T MagneticEntropyCalculater::findMinValue(vector &values)
{
T minVal;

if (values.size() == 0)
{
return NULL;
}

minVal = values[0];

for (int i = 1; i < values.size(); i++)
{
if (minVal > values[i])
{
minVal = values[i];
}
}

return minVal;
}

int MagneticEntropyCalculater::findNearTmperatureIndex(double temperature, MTData& mtdata)
{
if (mtdata.mTemperature.size() == 0 || mtdata.mTemperature.size() == 1)
{
return 0;
}

for (int i = 0; i < mtdata.mTemperature.size(); i++)
{
if ( (mtdata.mTemperature[i] - temperature) * (mtdata.mTemperature[i+1] - temperature) <= 0.0)
{
return i;
}
}

return -1;
}


double MagneticEntropyCalculater::calculateLinearInterpolcationFromAdjacentMagnetizationData(double temperature, MTData& mtdata)
{
double ratio;
int index;

index = findNearTmperatureIndex(temperature, mtdata);

if (index + 1 > mtdata.mMagnetization.size() || index < 0)
{
return 0.0;
}
else if (index + 1 == mtdata.mMagnetization.size())
{
return mtdata.mMagnetization[index];
}
else
{
ratio = (temperature - mtdata.mTemperature[index])/( mtdata.mTemperature[index+1] - mtdata.mTemperature[index]);

return ( ((1 - ratio) * mtdata.mMagnetization[index]) + (ratio * mtdata.mMagnetization[index + 1]));
}
}

double MagneticEntropyCalculater::calculateLinearInterpolcationFromAdjacentDerivativeData(double temperature, MTData& mtdata)
{

double ratio;
int index;

index = findNearTmperatureIndex(temperature, mtdata);

if (index + 1 > mtdata.mDerivative.size() || index < 0)
{
return 0.0;
}
else if (index + 1 == mtdata.mDerivative.size())
{
return mtdata.mDerivative[index];
}
else
{
ratio = (temperature - mtdata.mTemperature[index])/( mtdata.mTemperature[index+1] - mtdata.mTemperature[index]);

return ( ((1 - ratio) * mtdata.mDerivative[index]) + (ratio * mtdata.mDerivative[index + 1]));
}


}

void MagneticEntropyCalculater::setTemperatureIndexOffset(double minTemperature)
{

for (int i = 0; i < mMTDataList.size(); i++)
{
mMTDataList[i].mTemperatureIndexOffset = (int)(-(mMTDataList[i].mTemperature[0] - minTemperature)/mTemperatureInterval);

}

}

void MagneticEntropyCalculater::calculateMagneticEntropy(double maxField)
{
STData stdata;
int i;
double temperature;

stdata.mMagneticField = maxField;
for (i = 0, temperature = mMinTemperature; temperature <= mMaxTemperature; temperature += mTemperatureInterval, i++)
{
stdata.mTemperature.push_back(temperature);
stdata.mEntropy.push_back(integrateWithRespectToFieldAtConstantTemperature(i, maxField));
}

/*
for (i = 0; i < stdata.mTemperature.size(); i++)
{
cout << stdata.mTemperature[i] << endl;
}
for (i = 0; i < stdata.mTemperature.size(); i++)
{
cout << stdata.mEntropy[i] << endl;

}
*/

for (int i = 0; i < mSTDataList.size(); i++)
{
if (mSTDataList[i].mMagneticField == maxField)
{
mSTDataList[i] = stdata;
return;
}
}

mSTDataList.push_back(stdata);

return;
}

double MagneticEntropyCalculater::integrateWithRespectToFieldAtConstantTemperature(int index, double maxField)
{
double entropy = 0.0;
for (int i = 0; mMTDataList[i+1].mMagneticField <= maxField; i++)
{
entropy += 0.5*(mMTDataList[i+1].mDerivative[index + mMTDataList[i+1].mTemperatureIndexOffset] + mMTDataList[i].mDerivative[index + mMTDataList[i].mTemperatureIndexOffset]) * (mMTDataList[i+1].mMagneticField - mMTDataList[i].mMagneticField);
}

return entropy;
}

bool MagneticEntropyCalculater::save()
{

if (!selectOutputFolder())
{
return false;
}

for (STData stdata : mSTDataList)
{
ostringstream os;
os << stdata.mMagneticField;

ofstream out(mOutputFolderFullPath + "\\" + "S-T_" + os.str() + "T.txt");
for (int i = 0; i < stdata.mTemperature.size(); i++)
{
out << stdata.mTemperature[i] << "\t" << stdata.mEntropy[i] << endl;
}
}
return true;
}

bool MagneticEntropyCalculater::selectOutputFolder()
{
BROWSEINFO binfo;
LPITEMIDLIST idlist;
char outputFolderPath[MAX_PATH], outputFolderFullPath[MAX_PATH];

binfo.hwndOwner = NULL;
binfo.pidlRoot = NULL;
binfo.pszDisplayName = (LPSTR)outputFolderPath;
binfo.lpszTitle = "S-Tデータ保存先フォルダを選択してください";
binfo.ulFlags = BIF_RETURNONLYFSDIRS;
binfo.lpfn = NULL;
binfo.lParam = 0;
binfo.iImage = 0;

mOutputFolderPath = outputFolderPath;

if((idlist=SHBrowseForFolder(&binfo))==NULL)
{
return false;
}
else
{
SHGetPathFromIDList(idlist,outputFolderFullPath);
mOutputFolderFullPath = outputFolderFullPath;

CoTaskMemFree(idlist);
}
mIsOutputFolderPathSet = true;
return true;
}

int main(void)
{
MagneticEntropyCalculater mec;
do {
if(!mec.selectDataFolder()) //データファイルが存在するフォルダを選択。選択されなかった場合は終了。
{

break;
}
if(!mec.readAllDataFileName()) //選択されたフォルダから有効なファイル名のみ保存(有効なファイル名は●T.● 例:0.5T.txt , 3T.csv)
{
MessageBox(NULL, "データファイル名の取得に失敗しました", NULL, MB_OK);
break;
}
mec.readAllMTData(); //それぞれのファイルからMTデータを読み込む
mec.calculateDerivative(); //dM/dTを計算
mec.interpolateWithConstantTemperatureInterval(2.0); //指定した温度間隔でデータを線形補間
//mec.showMTData(0.01);
//mec.showMTData(0.02);
mec.calculateMagneticEntropy(2.0); //引数で指定した磁場の磁気エントロピー変化の温度依存性を計算する
mec.calculateMagneticEntropy(0.5);

mec.save(); //calculateMagneticEntropy()で計算した結果をtxtファイルに保存する
} while (0);
return 0;
}

Java android - Toastメモ1 -

別スレッドからToast.makeText().show()するときhandler.postで行うべし


Handler handler = new Handler();
handler.post(new Runnable(){
@Override
public void run() {
Toast.makeText(getActivity(), "test", Toast.LENGTH_LONG).show();
}
});

Java android - 簡易ストップウオッチ -


プロジェクト作成においてConpile WithをAPI 8、ThemeをNone、Blank Activityで作成していたのですが、
ADT更新したら作成できなくなりました...●rz


StopWatch_1.png

↑のような簡易ストップウォッチ
Startボタンを押したらbRunをtrueにし、スレッドを作成してbRunがtrueのあいだwhileループを開始。
whileループ内では、TextViewのテキストを変更するため、handlerのpostにTextViewに経過時間を表示するための処理を
実装したRunnableを引数として渡している。
最初handler.postのあとのThread.sleepを書かずに実行したら非常に更新が遅く(6秒間隔くらい)、stopをおしてもなかなか反応しなかった。
whileのループごとにcountを1ずつ増やしていき、countの値も表示させたら(右の値)、1回の更新ごとにcountがかなり増えていたのでpostの処理が間に合ってないのかと思い、post処理の後にsleepを入れたらスムーズに動くようになった

StopWatch.java

package net.ollyolly.stopwatch1;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.os.Build;

public class MainActivity extends ActionBarActivity {

private static Button btnStart;
private static Button btnStop;
private static TextView txtTime;
private static long startTimestamp;
private static Thread countupThread;
private static Handler handler = new Handler();
private static Boolean bRun = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}

/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {

static int count;

public PlaceholderFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);

btnStart = (Button)rootView.findViewById(R.id.btnStart);
btnStop = (Button)rootView.findViewById(R.id.btnStop);
txtTime = (TextView)rootView.findViewById(R.id.txtTime);
btnStart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
startTimestamp = System.currentTimeMillis();
btnStart.setEnabled(false);
btnStop.setEnabled(true);
bRun = true;
countupThread = new Thread(new Runnable(){
@Override
public void run() {

while(bRun) {
count++;
handler.post(new Runnable(){
public void run() {
txtTime.setText(String.format("%.2f, %d", (System.currentTimeMillis() - startTimestamp)*0.001, count));

}
});
try {
Thread.sleep(50);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
countupThread.start();
}
});

btnStop.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View view) {
bRun = false;
btnStart.setEnabled(true);
btnStop.setEnabled(false);
}
});
return rootView;
}
}

}



fragment_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="net.ollyolly.stopwatch1.MainActivity$PlaceholderFragment" >

<TextView
android:id="@+id/txtTime"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textSize="30sp"
android:gravity="center"
android:text="" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<Button
android:id="@+id/btnStart"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Start" />

<Button
android:id="@+id/btnStop"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Stop"
android:enabled="false" />

</LinearLayout>

</LinearLayout>

PHP - 仮登録→登録完了URLつきメールをGMail経由で送信→1時間以内にURLをクリックしたら登録完了

実行すると$Toに対して、ランダムに生成した$uniqidをURLにクエリとして追加して(http://***/**.php?id=uniqid)本文に記載しGMail経由でメールを送信する。その際、タイムスタンプ、メールアドレス、uniqidをデータベースに保存しておく。
http://***/**.php?id=uniqidという形でアクセスがあったら、$_GET['id']の値を調べてデータベースにそのuniqidをもつレコードがあるか調べ、存在したら登録完了の処理(register())を実行する。
アクセスがあるたびにrefreshRegisterData()をまず最初に行い一時間以上経過したレコードに対して全て削除を行っている。



<?php
require_once("Mail.php");
require_once("Mail/mime.php");
require_once("Mail/mime.php");


$db_username = 'root';
$db_password = 'dbpassword';

function register($id, $mailaddress) {
echo 'メールアドレス : ' . $mailaddress . '<br>';
echo '登録しました';

try {
global $db_username;
global $db_password;
$db = 'mysql:dbname=WebApplication;host=localhost';
$pdo = new PDO($db, $db_username, $db_password);
$nowtime = time();
$sql_command = 'DELETE from RegisterID where id = ?';
$smtp = $pdo->prepare($sql_command);
$args[] = $id;
$smtp->execute($args);

$pdo = null;
} catch (Exception $e) {
echo 'データーベース削除エラー : ' . $e->getMessage();
}
}

function refreshRegisterData() {
try {
global $db_username;
global $db_password;
$db = 'mysql:dbname=WebApplication;host=localhost';
$pdo = new PDO($db, $db_username, $db_password);
$nowtime = time();
$sql_command = 'DELETE from RegisterID where ? - time > 3600';
$smtp = $pdo->prepare($sql_command);
$args[] = $nowtime;
$smtp->execute($args);

$pdo = null;
} catch (Exception $e) {
echo 'データーベース更新エラー : ' . $e->getMessage();
}
}

function updateRegisterData($id, $mailaddress) {
try {
global $db_username;
global $db_password;
$db = 'mysql:dbname=WebApplication;host=localhost';
$pdo = new PDO($db, $db_username, $db_password);
$nowtime = time();
$sql_command = 'INSERT INTO RegisterID (id, time, mailaddress) VALUES (?, ?, ?)';
$smtp = $pdo->prepare($sql_command);
$args[] = $id;
$args[] = time();
$args[] = $mailaddress;
$smtp->execute($args);

$pdo = null;
} catch (Exception $e) {
echo 'データーベース追加エラー : ' . $e->getMessage();
}
}

refreshRegisterData();


if (isset($_GET['id'])) {

try {
global $db_username;
global $db_password;
$db = 'mysql:dbname=WebApplication;host=localhost';
$pdo = new PDO($db, $db_username, $db_password);
$nowtime = time();
$sql_command = 'SELECT * FROM RegisterID WHERE id = ?';
$smtp = $pdo->prepare($sql_command);
$args[] = $_GET['id'];
$smtp->execute($args);
$result = $smtp->fetch(PDO::FETCH_ASSOC);
$pdo = null;

if($result != null) {

register($result['id'], $result['mailaddress'] );

} else {
echo 'idが不正です';
}
} catch (Exception $e) {
echo 'id取得エラー  : ' . $e->getMessage();
}


exit();
}


mb_language("japanese");
mb_internal_encoding("utf8");

$To = 'to@gmail.com';
$url = 'http://192.168.0.4/PHP/RegisterConfirm.php';
$uniqid = md5(uniqid(rand(),1));

$params = array(
'host' => 'tls://smtp.gmail.com',
'port' => 465,
'auth' => true,
'protocol' => 'SMTP_AUTH',
'debug' => false,
'username' => 'from',
'password' => 'mailpassword',
);
$headerParams = array (
'To' => $To,
'From' => 'prog',
'Subject' => mb_encode_mimeheader('登録確認'),
);

$body = <<<EOS
<html>
<head>
<meta http-equiv="Content-Type" Content="text/html;charset=UTF-8">
</head>
<body>
<p>一時間以内に下記のURLをクリックして登録を完了してください</p>
<a href="
EOS;

$body .= $url . '?id=' . $uniqid;

$body .= '">' . $url . '?id=' . $uniqid . '</a></body></html>';



$mimeObject = new Mail_Mime("\n");
$mimeObject->setHTMLBody($body);

$bodyParam = array(
"head_charset" => "ISO-2022-JP",
"html_charset" => "utf8"
);

$body = $mimeObject->get($bodyParam);
$headers = $mimeObject->headers($headerParams);

$smtp = Mail::factory('smtp', $params);
$return = $smtp->send($To, $headers, $body);

if (PEAR::isError($return)){

echo("メールを送信できませんでした".$return->getMessage());
} else {
echo 'メールを' . $To . 'に送信しました';
updateRegisterData($uniqid, $To);
}

PHP - Android端末から位置情報を受け取ってデータベースに保存&最新位置をgoogle mapに表示

前回の記事のサーバーに位置情報を送信するAndroidアプリからデータを受け取ってユーザーネーム、緯度、経度、タイムスタンプをMySQLデーターベースに保存&最新位置をgoogle map上に表示するプログラム

androidからは
http://*****/PHP/LocationLogger.php?username=○&latitude=○&longitude=○& timestamp=○
というかたちでデータが送られてくるので
$_GET['username'],$_GET['latitude'],$_GET['longitude'],$_GET['timestamp']がセットされてたらMySQLデータベースに
保存し終了。

http://*****/PHP/LocationLogger.phpという形でアクセスしたら閲覧モードで最新位置をデータベースから検索しgoogle map上に下のように表示する
google mapはjQueryを使用

LocationLogger.png



<?php

$db_username = 'root';
$db_password = 'passwd';

$latestLatitude = 0;
$latestLongitude = 0;


function saveLocation() {
try {
global $db_username;
global $db_password;
$db = 'mysql:dbname=LocationLog;host=localhost';
$pdo = new PDO($db, $db_username, $db_password);
$sql_command = 'INSERT INTO LocationLog (username, latitude, longitude, timestamp) VALUES(?, ?, ?, ?)';
$smtp = $pdo->prepare($sql_command);
$args[] = $_GET['username'];
$args[] = $_GET['latitude'];
$args[] = $_GET['longitude'];
$args[] = $_GET['timestamp'];
$smtp->execute($args);

$pdo = null;
} catch (Exception $e) {
}
}

function getLatestPosition($username) {
try {
global $db_username;
global $db_password;
global $latestLatitude;
global $latestLongitude;
$db = 'mysql:dbname=LocationLog;host=localhost';
$pdo = new PDO($db, $db_username, $db_password);
$sql_command = 'SELECT * from LocationLog where username=? ORDER BY timestamp DESC';
$smtp = $pdo->prepare($sql_command);
$args[] = $username;
$smtp->execute($args);

$result = $smtp->fetch(PDO::FETCH_ASSOC);
echo 'USERNAME : '.$username.'<br>';
echo 'TIME : '.gmdate("Y/m/d H:i:s", 9*3600+$result['timestamp']/1000);
$latestLatitude = $result['latitude'];
$latestLongitude = $result['longitude'];

$pdo = null;
} catch (Exception $e) {
echo '位置情報の読み込みに失敗しました';
}
}

if(isset($_GET['username']) && isset($_GET['latitude']) && isset($_GET['longitude']) && isset($_GET['timestamp'])) {

saveLocation();
exit();
}

getLatestPosition('pondelion');

?>


<link rel="stylesheet" type="text/css" href="../../style.css" />
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/mint-choc/jquery-ui.css" rel="stylesheet">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.min.js" type="text/javascript"></script>

<script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="../../js/jquery.gmap3.js"></script>
<script type="text/javascript">
$(function() {
$('#gmap').gmap3({

latitude: <?php print $latestLatitude; ?>,
longitude: <?php print $latestLongitude; ?>,
zoom: 16,
navigationControl: true,
mapTypeControl: true,
scaleControl: true,
markers: [
{
latitude: <?php print $latestLatitude; ?>,
longitude: <?php print $latestLongitude; ?>,
title: 'headquoter',
content: '<div><p>headquoter</p></div>'
}
]
});

//ボタンによる地図操作
$('#backMapbase').click(function() {
$.gmap3.panTo($("#gmap"), {
latitude: <?php print $latestLatitude; ?>,
longitude: <?php print $latestLongitude; ?>
});
return false;
});
});


</script>


<div id="gmap"></div>
<p><input id="backMapbase" type="button" value="元の場所へもどる" /></p>

Java android - GPS位置情報をサーバーに転送 -

GPSで取得した緯度と経度情報をサーバーにクエリで送信するプログラム
位置送信開始ボタンを押すと位置情報をサーバーに送り続けるサービスLocationSenderServiceを開始する。
AndroidManifest.xmlにパーミッションとして
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

<service android:name="LocationSenderService"></service>
を追加する必要あり

LocationLoggerAndroid.png


GPSTest1.java

package com.example.gpstest1;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class GPSTest1 extends Activity implements OnClickListener {

private Button btnSendStart;
private Button btnSendStop;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gpstest1);

btnSendStop = (Button)findViewById(R.id.btnSendStop);
btnSendStart = (Button)findViewById(R.id.btnSendStart);

btnSendStop.setOnClickListener(this);
btnSendStart.setOnClickListener(this);

}

@Override
protected void onDestroy() {

Intent locationSenderService = new Intent(GPSTest1.this, LocationSenderService.class);
stopService(locationSenderService);

super.onDestroy();
}

@Override
public void onClick(View view) {
// TODO Auto-generated method stub
if (view == btnSendStop) {
Intent locationSenderService = new Intent(GPSTest1.this, LocationSenderService.class);
stopService(locationSenderService);

btnSendStop.setEnabled(false);
btnSendStart.setEnabled(true);
} else if (view == btnSendStart) {
Intent locationSenderService = new Intent(GPSTest1.this, LocationSenderService.class);
startService(locationSenderService);

btnSendStop.setEnabled(true);
btnSendStart.setEnabled(false);

}
}

}



LocationSenderService.java

package com.example.gpstest1;

import java.io.IOException;

import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Service;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.widget.Toast;

public class LocationSenderService extends Service implements LocationListener {

private final String server = "http://192.168.0.4/";
private final String path = "PHP/LocationLogger.php";
private String username = "pondelion";
private LocationManager lm;

@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}

@Override
public void onCreate() {
super.onCreate();
lm = (LocationManager)getSystemService(LOCATION_SERVICE);

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 0, this);
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 60000, 0, this);

Toast.makeText(this, "サービス開始", Toast.LENGTH_LONG).show();

}

@Override
public void onDestroy() {
lm.removeUpdates(this);

}

@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
String url = server
+ path
+ "?username="
+ username
+ "&latitude="
+ location.getLatitude()
+ "&longitude="
+ location.getLongitude()
+ "×tamp="
+ System.currentTimeMillis();

try {
HttpClient httpClient = new DefaultHttpClient();
httpClient.execute(new HttpGet(url));
Toast.makeText(getApplicationContext(), "位置を送信しました", Toast.LENGTH_LONG).show();
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "Error : " + e.getMessage(), Toast.LENGTH_LONG).show();
}
}

@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub

}

@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub

}

}

アフィリエイト・SEO対策
検索フォーム
ブロとも申請フォーム
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。