第 7 章 結論 105
C.2 垂直配向液晶セルに流れる過渡電流の実験結果と解析解との最小二乗
Print #5, iz * Δz, vy ’y方向の流速分布の計算結果書き込み Next iz
End If
’////////////////////////////////////////////////////////////////////////////////////
Next it
’////////////////////////////////////////////////////////////////////////////////////////
Close #1 Close #2 Close #3 Close #4 Close #5 Close #6 Close #7
Command1.Caption = "END"
End Sub
C.2 垂直配向液晶セルに流れる過渡電流の実験結果と解析
.Value = 1 End With With Check2
.Caption = "Excel"
.Value = 0 End With
π = 3.14159265358979 ’円周率
ε0 = 1 / (4 * π* (2.99792458) ^ 2 * 1000000000#) ’真空中の誘電率(F/m) End Sub
Private Sub Command1_Click() On Error GoTo Cancel
’続けて計算する場合のための処理 Close #1
Close #2 Unload Form2 Unload Form3
Δε = Text1.Text ’誘電率異方性
S = Text2.Text * 0.0001 ’電極面積(m^2) L = Text3.Text * 0.000001 ’セル厚(m)
V = Text4.Text ’印加電圧(V)
ε0Δε = ε0 * Δε
E = V / L ’電場
’データの読込み///////////////////////////////////////////////////////////////////////////
With CommonDialog1
.Filter = "テキスト|*.xy" ’表示するファイルの種類を限定
.CancelError = True ’[キャンセル]ボタンをクリックするとエラーが発生
.ShowOpen ’[ファイルを開く]ダイアログを表示
End With
’選択したファイル名を格納し,シーケンシャルアクセスの読み込み用として開く Open CommonDialog1.FileName For Input As #1
data = 0 Ip = 0
Do Until EOF(1) If data = 1 Then
Input #1, Δt, iI(data) ’ファイルのある行の値をそれぞれの値として読み込み
Else
Input #1, t_else, iI(data) End If
If iI(data) > Ip Then ’itp,tp,およびIpの値の取得 itp = data
tp = t_else Ip = iI(data) End If
data = data + 1 LoopClose #1
’/////////////////////////////////////////////////////////////////////////////////////////
’実験データの時間単位がmsのとき If Option1.Value = True Then
Δt = Δt * 0.001 tp = tp * 0.001 End If
’左端のデータの値の取得 For it = 0 To itp
If iI(it) <= Ip / 2 Then it_l = it
t_l = it * Δt End If
Next it
’右端のデータの値の取得 For it = itp To data - 1
If iI(it) >= Ip / 20 Then it_r = it
t_r = it * Δt End If
Next it
’ピーク時間以降の電流波形の面積の計算
I_tp_sum = integration(itp, data - 1, iI) ’Functionプロシジャintegrationの呼び出し tanθp = Sqr(-(S * ε0Δε * E / I_tp_sum + 1))
θp = Atn(tanθp) ’ピーク時間のチルト角
’各時間以降の電流波形の面積の計算 For it = it_l To it_r
I_sum = integration(it, data - 1, iI) ’Functionプロシジャintegrationの呼び出し cos2θb(it) = -(2 * I_sum / (S * ε0Δε * E) + 1)
Next it
’α1,α2,α3,γ3,およびθ0の測定結果書き込み用ファイルのオープン
Open "D:\vb_NLC\V" + Text4.Text + "α1α2α3γ3θ0.xy " For Output As #1
’解析解によるフィティング波形の書き込み用ファイルのオープン Open "D:\vb_NLC\V" + Text4.Text + "t_I.xy " For Output As #2
Print #2, "Time (s)", "Current (A)"
Print #2, ""
Print #2, ""
’α1,α2,α3,およびγ3の決定(テイラーの微分補正法)/////////////////////////////////////
’初期値(MBBA) α1 = -0.0215 α2 = -0.1534 α3 = -0.000773 γ3 = 0.2166 maxΔ= 1 oscillation = 0
A = S * ε0Δε ^ 2 * E ^ 3 Do While maxΔ > 0.00001
sum_α1r = 0 sum_α2r = 0 sum_α3r = 0 sum_γ3r = 0 sum_α1α1 = 0 sum_α1α2 = 0 sum_α1α3 = 0 sum_α1γ3 = 0 sum_α2α2 = 0 sum_α2α3 = 0 sum_α2γ3 = 0 sum_α3α3 = 0 sum_α3γ3 = 0 sum_γ3γ3 = 0 For it = it_l To it_r
B = (α1 * (α3 - α2) + (α2 + α3) ^ 2) * (1 - cos2θb(it) ^ 2) _ - 2 * (α2 ^ 2 + α3 ^ 2) + 2 * (α3 - α2) * (α3 + γ3)
C = α1 * (1 - cos2θb(it) ^ 2) / 2 - (α2 + α3) * cos2θb(it) + α3 + γ3 f = A * C * (1 - cos2θb(it) ^ 2) / B
r = f - iI(it)
df_dα1 = A * (1 - cos2θb(it) ^ 2) ^ 2 * (B / 2 - (α3 - α2) * C) / B ^ 2 df_dα2_1 = (1 - cos2θb(it) ^ 2) * (-α1 + 2 * (α2 + α3)) - 4 * α2 _
- 2 * (α3 + γ3)
df_dα2 = -A * (1 - cos2θb(it) ^ 2) * (cos2θb(it) * B + C * df_dα2_1) / B ^ 2 df_dα3 = A * (1 - cos2θb(it) ^ 2) * ((1 - cos2θb(it)) * B _
- C * ((1 - cos2θb(it) ^ 2) * (α1 + 2 * (α2 + α3)) _ + 2 * (γ3 - α2))) / B ^ 2
df_dγ3 = A * (1 - cos2θb(it) ^ 2) * (B - 2 * C * (α3 - α2)) / B ^ 2 sum_α1r = sum_α1r + df_dα1 * r
sum_α2r = sum_α2r + df_dα2 * r sum_α3r = sum_α3r + df_dα3 * r sum_γ3r = sum_γ3r + df_dγ3 * r
sum_α1α1 = sum_α1α1 + df_dα1 * df_dα1 sum_α1α2 = sum_α1α2 + df_dα1 * df_dα2 sum_α1α3 = sum_α1α3 + df_dα1 * df_dα3 sum_α1γ3 = sum_α1γ3 + df_dα1 * df_dγ3 sum_α2α2 = sum_α2α2 + df_dα2 * df_dα2 sum_α2α3 = sum_α2α3 + df_dα2 * df_dα3 sum_α2γ3 = sum_α2γ3 + df_dα2 * df_dγ3 sum_α3α3 = sum_α3α3 + df_dα3 * df_dα3 sum_α3γ3 = sum_α3γ3 + df_dα3 * df_dγ3 sum_γ3γ3 = sum_γ3γ3 + df_dγ3 * df_dγ3 Next it
sum_11 = sum_α1α1 sum_12 = sum_α1α2 sum_13 = sum_α1α3 sum_14 = sum_α1γ3
sum_22 = sum_α2α2 - sum_12 ^ 2 / sum_11 sum_23 = sum_α2α3 - sum_12 * sum_13 / sum_11 sum_24 = sum_α2γ3 - sum_12 * sum_14 / sum_11
sum_33 = sum_α3α3 - sum_13 ^ 2 / sum_11 - sum_23 ^ 2 / sum_22
sum_34 = sum_α3γ3 - sum_13 * sum_14 / sum_11 - sum_23 * sum_24 / sum_22
sum_44 = sum_γ3γ3 - sum_14 ^ 2 / sum_11 - sum_24 ^ 2 / sum_22 - sum_34 ^ 2 / sum_33 sum_r1 = -sum_α1r
sum_r2 = -sum_α2r - sum_12 * sum_r1 / sum_11
sum_r3 = -sum_α3r - sum_13 * sum_r1 / sum_11 - sum_23 * sum_r2 / sum_22 sum_r4 = -sum_γ3r - sum_14 * sum_r1 / sum_11 - sum_24 * sum_r2 / sum_22 _
- sum_34 * sum_r3 / sum_33 Δγ3 = sum_r4 / sum_44
Δα3 = (sum_r3 - sum_34 * Δγ3) / sum_33
Δα2 = (sum_r2 - sum_23 * Δα3 - sum_24 * Δγ3) / sum_22
Δα1 = (sum_r1 - sum_12 * Δα2 - sum_13 * Δα3 - sum_14 * Δγ3) / sum_11 α1 = α1 + Δα1
α2 = α2 + Δα2 α3 = α3 + Δα3 γ3 = γ3 + Δγ3 maxΔ = Abs(Δα1) If Abs(Δα2) > maxΔ Then
maxΔ = Abs(Δα2) End If
If Abs(Δα3) > maxΔ Then maxΔ = Abs(Δα3) End If
If Abs(Δγ3) > maxΔ Then maxΔ = Abs(Δγ3) End If
oscillation = oscillation + 1 If oscillation > 100 Then Exit Do Command1.Caption = α2
Loop
’/////////////////////////////////////////////////////////////////////////////////////////
γ1 = α3 - α2 γ2 = α2 + α3 γ4 = α3 + γ3
’理論的に成立しなければならない関係を満たさなければエラーを表示して終了 If γ1 < 0 Then GoTo Error
If γ2 + 2 * γ3 < 0 Then GoTo Error
If γ1 * (γ2 + 2 * γ3) < γ2 Then GoTo Error If α2 + 2 * α3 + γ3 < 0 Then GoTo Error If -α2 + γ3 < 0 Then GoTo Error
β1 = α1 ^ 2 + γ2 ^ 2 + 2 * α1 * γ4 β2 = γ1 ^ 2 + γ2 ^ 2 - 2 * γ1 * γ4 β3 = γ2 - γ4
β4 = γ2 + γ4
β5 = γ2 ^ 2 + α1 * γ4 β6 = α1 * γ1 + γ2 ^ 2 β7 = α1 + γ4
’θ0の決定(ニュートン法)//////////////////////////////////////////////////////////////////
θ0 = π * 0.0000000001 / 180 ’初期値 Δθ0 = π * 0.000000000001 / 180
D = ε0Δε * E ^ 2
Do While Abs(Δθ0) > π * 0.000000000000001 / 180 dS_dθ0 = 0
ddS_dθ0θ0 = 0
If α1 <> 0 And β1 > 0 Then
H = (-β5 + γ2 * Sqr(β1)) / Sqr(β1) J = (β5 + γ2 * Sqr(β1)) / Sqr(β1) θ01 = β4 * Tan(θ0) ^ 2 + β7 + Sqr(β1) θ02 = β4 * Tan(θ0) ^ 2 + β7 - Sqr(β1) θ03 = α1 * Cos(2 * θ0) + γ2 + Sqr(β1) θ04 = α1 * Cos(2 * θ0) + γ2 - Sqr(β1)
dg_dθ0_1 = β2 * (2 / Sin(2 * θ0) - H * Tan(θ0) / (Cos(θ0) ^ 2 * θ01) _ - J * Tan(θ0) / (Cos(θ0) ^ 2 * θ02)) / (2 * β3)
dg_dθ0_2 = α1 * β6 * Sin(2 * θ0) * (1 / θ03 - 1 / θ04) / Sqr(β1) dg_dθ0 = (dg_dθ0_1 + dg_dθ0_2) / D
ddg_dθ0θ0_1 = -4 * Cos(2 * θ0) / Sin(2 * θ0) ^ 2
ddg_dθ0θ0_2 = -H * (θ01 - Tan(θ0) * (-Sin(2 * θ0) * θ01 _ + 2 * β4 * Tan(θ0))) / (Cos(θ0) ^ 4 * θ01 ^ 2) ddg_dθ0θ0_3 = -J * (θ02 - Tan(θ0) * (-Sin(2 * θ0) * θ02 _ + 2 * β4 * Tan(θ0))) / (Cos(θ0) ^ 4 * θ02 ^ 2)
ddg_dθ0θ0_4 = β2 * (ddg_dθ0θ0_1 + ddg_dθ0θ0_2 + ddg_dθ0θ0_3) / (2 * β3) ddg_dθ0θ0_5 = Cos(2 * θ0) * (1 / θ03 - 1 / θ04)
ddg_dθ0θ0_6 = α1 * Sin(2 * θ0) ^ 2 * (1 / θ03 ^ 2 - 1 / θ04 ^ 2) ddg_dθ0θ0_7 = 2 * α1 * β6 * (ddg_dθ0θ0_5 + ddg_dθ0θ0_6) / Sqr(β1) ddg_dθ0θ0 = (ddg_dθ0θ0_4 + ddg_dθ0θ0_7) / D
For it = it_l To it_r
θb1 = β4 * (1 - cos2θb(it)) / (1 + cos2θb(it)) + β7 + Sqr(β1) θb2 = β4 * (1 - cos2θb(it)) / (1 + cos2θb(it)) + β7 - Sqr(β1) θb3 = α1 * cos2θb(it) + γ2 + Sqr(β1)
θb4 = α1 * cos2θb(it) + γ2 - Sqr(β1)
g1 = β2 * (-Log(Sqr((1 - cos2θb(it)) / (1 + cos2θb(it))) / Tan(θ0)) _ + H * Log(θb1 / θ01) / (2 * β4) _
+ J * Log(θb2 / θ02) / (2 * β4)) / β3
g2 = β6 * Log(θb3 * θ04 / (θb4 * θ03)) / Sqr(β1) g = (g1 + g2) / (2 * D)
dS_dθ0 = dS_dθ0 + g - Δt * it
ddS_dθ0θ0 = ddS_dθ0θ0 + dg_dθ0 ^ 2 + (g - Δt * it) * ddg_dθ0θ0 Next it
ElseIf α1 <> 0 And β1 < 0 Then θ01 = β4 * Tan(θ0) ^ 2 + β7 θ02 = α1 * Cos(2 * θ0) + γ2
dg_dθ0_1 = β2 * (1 / Sin(2 * θ0) - β5 * Tan(θ0) _ / (Cos(θ0) ^ 2 * (θ01 ^ 2 - β1)) _
- γ2 * Tan(θ0) * θ01 / (Cos(θ0) ^ 2 * (θ01 ^ 2 - β1))) / β3 dg_dθ0_2 = -2 * α1 * β6 * Sin(2 * θ0) / (θ02 ^ 2 - β1)
dg_dθ0 = (dg_dθ0_1 + dg_dθ0_2) / D
ddg_dθ0θ0_1 = -2 * Cos(2 * θ0) / Sin(2 * θ0) ^ 2
ddg_dθ0θ0_2 = β5 * (4 * β4 * Tan(θ0) ^ 2 * θ01 - (1 + 2 * Sin(θ0) ^ 2) _
* (θ01 ^ 2 - β1)) / (Cos(θ0) ^ 4 * (θ01 ^ 2 - β1) ^ 2) ddg_dθ0θ0_3 = -γ2 * ((3 * β4 * Tan(θ0) ^ 2 + β7) * (θ01 ^ 2 - β1) _
- Tan(θ0) * θ01 * (-Sin(2 * θ0) * (θ01 ^ 2 - β1) + 4 * β4 _
* Tan(θ0) * θ01)) / (Cos(θ0) ^ 4 * (θ01 ^ 2 - β1) ^ 2) ddg_dθ0θ0_4 = β2 * (ddg_dθ0θ0_1 + ddg_dθ0θ0_2 + ddg_dθ0θ0_3) / β3 ddg_dθ0θ0_5 = -4 * α1 * β6 * (Cos(2 * θ0) * (θ02 ^ 2 - β1) _
+ 2 * α1 * Sin(2 * θ0) ^ 2 * θ02) / (θ02 ^ 2 - β1) ^ 2 ddg_dθ0θ0 = (ddg_dθ0θ0_4 + ddg_dθ0θ0_5) / D
For it = it_l To it_r
θb1 = β4 * (1 - cos2θb(it)) / (1 + cos2θb(it)) + β7 θb2 = α1 * cos2θb(it) + γ2
g1 = β2 * (-Log(Sqr((1 - cos2θb(it)) / (1 + cos2θb(it))) / Tan(θ0)) _ + β5 * (Atn(θb1 / Sqr(-β1)) - Atn(θ01 / Sqr(-β1))) _
/ (Sqr(-β1) * β4) + γ2 * Log((θb1 ^ 2 - β1) _ / (θ01 ^ 2 - β1)) / (2 * β4)) / (2 * β3)
g2 = -β6 * (Atn(θb2 / Sqr(-β1)) - Atn(θ02 / Sqr(-β1))) / Sqr(-β1) g = (g1 + g2) / D
dS_dθ0 = dS_dθ0 + g - Δt * it
ddS_dθ0θ0 = ddS_dθ0θ0 + dg_dθ0 ^ 2 + (g - Δt * it) * ddg_dθ0θ0 Next it
End If
dS_dθ0 = 2 * dg_dθ0 * dS_dθ0 ddS_dθ0θ0 = 2 * ddS_dθ0θ0 Δθ0 = -dS_dθ0 / ddS_dθ0θ0 θ0 = θ0 + Δθ0
Loop
’/////////////////////////////////////////////////////////////////////////////////////////
’α1,α2,α3,γ3,およびθ0の測定結果書き込み Print #1, "α1", α1
Print #1, "α2", α2 Print #1, "α3", α3 Print #1, "γ3", γ3
Print #1, "θ0", θ0 * 180 / π
’フィッティング結果をPictureBoxへ表示/////////////////////////////////////////////////////
θ = π * (1 / 2 - 1 / 180) If Check1.Value = 1 Then
’Functionプロシジャtimeの呼び出し
t_inf = time(ε0Δε, E, θ, θ0, α1, γ2, γ4, β1, β2, β3, β4, β5, β6, β7) t_pixel = t_inf / 4000 ’ピクチャボックス内の1ピクセルあたりの時間
I_pixel = Ip / 4000 ’ピクチャボックス内の1ピクセルあたりの過渡電流
With Form2
.Show ’Form2を参照
’α1,α2,γ3,およびθ0の決定値をForm2に四捨五入して表示 .Label6.Caption = Format(α1 * 1000, "##0")
.Label7.Caption = Format(α2 * 1000, "##0") .Label8.Caption = Format(α3 * 1000, "##0") .Label9.Caption = Format(γ3 * 1000, "##0") .Label10.Caption = Format(θ0 * 180 / π, "##0.00") With .Picture1
.AutoRedraw = True
.BackColor = RGB(255, 255, 255) ’Picture1の背景を白にする
.ScaleTop = -4255 ’Picture1の上辺を-4255に設定
.ScaleLeft = -800 ’Picture1の左辺を-800に設定
.DrawWidth = 1 ’Picture1内の線幅を1に設定
.FontSize = 12 ’Picture1内の文字サイズを12に設定(基本)
.FontBold = True ’Picture1内の文字を太字に設定
Form2.Picture1.Line (0, 0)-(4255, 0), RGB(0, 0, 0) ’x軸の描画 Form2.Picture1.Line (0, -4255)-(0, 0), RGB(0, 0, 0) ’y軸の描画 Form2.Picture1.Line (0, -4255)-(4255, -4255), RGB(0, 0, 0) ’上辺横線の描画 Form2.Picture1.Line (4255, -4255)-(4255, 0), RGB(0, 0, 0) ’右辺横線の描画
’(tp,0)-(tp,Ip)間を点線で結ぶ .DrawStyle = 2
Form2.Picture1.Line (Fix(tp / t_pixel), 0)-(Fix(tp / t_pixel), _ -Fix(Ip / I_pixel)), RGB(0, 204, 255)
’(0,Ip)-(tp,Ip)間を点線で結ぶ
Form2.Picture1.Line (0, -Fix(Ip / I_pixel))-(Fix(tp / t_pixel), _ -Fix(Ip / I_pixel)), RGB(0, 204, 255) .DrawStyle = 0
’x 軸のメモリおよびラベルをPicture1に描画////////////////////////////////////
t_label = Fix(0.0001 / t_pixel) t_labels = 0
Do While t_labels <= 4255
If t_labels Mod 5 * t_label = 0 Then
Form2.Picture1.Line (t_labels, 0)-(t_labels, -150), RGB(0, 0, 0) Form2.Picture1.Line (t_labels, -4105)-(t_labels, -4255), RGB(0, 0, 0)
’ラベルがメモリの中心になるように調整 If t_labels / t_label Mod 2 = 0 Then
.CurrentX = t_labels - 150 .CurrentY = 100
Form2.Picture1.Print 0.1 * t_labels / t_label Else
.CurrentX = t_labels - 220 .CurrentY = 100
Form2.Picture1.Print 0.1 * t_labels / t_label End If
Else
Form2.Picture1.Line (t_labels, 0)-(t_labels, -100), RGB(0, 0, 0) Form2.Picture1.Line (t_labels, -4155)-(t_labels, -4255), RGB(0, 0, 0) End If
t_labels = t_labels + t_label Loop
’/////////////////////////////////////////////////////////////////////////////
’y 軸のメモリおよびラベルをPicture1に描画/////////////////////////////////////
I_label = Fix(0.000005 / I_pixel) I_labels = 0
Do While I_labels >= -4255
If I_labels Mod 2 * I_label = 0 Then
Form2.Picture1.Line (0, I_labels)-(150, I_labels), RGB(0, 0, 0) Form2.Picture1.Line (4105, I_labels)-(4255, I_labels), RGB(0, 0, 0)
’ラベルがメモリの中心になるように調整 If I_labels = 0 Then
.CurrentX = -320
.CurrentY = I_labels - 120 Form2.Picture1.Print 0
Else
.CurrentX = -450
.CurrentY = I_labels - 120
Form2.Picture1.Print -5 * I_labels / I_label End If
Else
Form2.Picture1.Line (0, I_labels)-(100, I_labels), RGB(0, 0, 0) Form2.Picture1.Line (4155, I_labels)-(4255, I_labels), RGB(0, 0, 0) End If
I_labels = I_labels - I_label Loop
’/////////////////////////////////////////////////////////////////////////////
End With ’Picture1のWith終了
End With ’Form2のWith終了
’実験結果をPicture1に描画 For it = 1 To data - 1
Form2.Picture1.Line ((it - 1) * Δt / t_pixel, _
-iI((it - 1)) / I_pixel)-(it * Δt / t_pixel, -iI(it) _ / I_pixel), RGB(0, 0, 0)
Next it
’導出したα1,α2,α3,γ3,およびθ0における過渡電流波形のPicture1への描画//////////
θ = θ0 E = V / L
Do While θ < π / 2
’Functionプロシジャtimeの呼び出し
t = time(ε0Δε, E, θ, θ0, α1, γ2, γ4, β1, β2, β3, β4, β5, β6, β7)
’過渡電流
I1 = S * (ε0Δε * Sin(2 * θ)) ^ 2 * E ^ 3
I2 = (α1 * Sin(2 * θ) ^ 2 / 2 - γ2 * Cos(2 * θ) + γ4)
I3 = (α1 * γ1 + γ2 ^ 2) * Sin(2 * θ) ^ 2 - γ1 ^ 2 - γ2 ^ 2 + 2 * γ1 * γ4 I = I1 * I2 / I3
Print #2, t, I ’解析解によるフィティング波形の書き込み
’過渡電流の計算結果をPicture1に描画
Form2.Picture1.PSet (t / t_pixel, -I / I_pixel), RGB(0, 0, 255) θ = θ + π / 1800
Loop
’/////////////////////////////////////////////////////////////////////////////////////
’グラフのキャプションをPicture1に描画/////////////////////////////////////////////////
With Form2
With .Picture1
.FontSize = 14 ’文字サイズを14に設定
’描画開始位置 .CurrentX = 2500 .CurrentY = -4000
Form2.Picture1.Print "experiment"
Form2.Picture1.Line (2000, -3850)-(2400, -3850), RGB(0, 0, 0)
’描画開始位置 .CurrentX = 2500 .CurrentY = -3600
Form2.Picture1.Print "theory"
Form2.Picture1.Line (2000, -3450)-(2400, -3450), RGB(0, 0, 255) .FontSize = 12 ’文字サイズを12に設定
’描画開始位置 .CurrentX = 2000 .CurrentY = -3200
Form2.Picture1.Print Text4.Text + "V"
’描画開始位置 .CurrentX = 2000 .CurrentY = -2900
Form2.Picture1.Print "tp"
’描画開始位置 .CurrentX = 2400 .CurrentY = -2900
Form2.Picture1.Print Format(tp * 1000, "##0.00")
’描画開始位置 .CurrentX = 2900 .CurrentY = -2900
Form2.Picture1.Print "ms"
’描画開始位置
.CurrentX = 2000 .CurrentY = -2600
Form2.Picture1.Print "Ip"
’描画開始位置 .CurrentX = 2400 .CurrentY = -2600
Form2.Picture1.Print Format(Ip * 1000000#, "##0.0")
’描画開始位置 .CurrentX = 2900 .CurrentY = -2600
Form2.Picture1.Print "μA"
.ScaleMode = vbPixels ’ ピクセル単位に設定
’描画開始位置
.CurrentX = .ScaleWidth * 7 / 16 .CurrentY = .ScaleHeight * 15 / 16 .FontSize = 16 ’文字サイズを16に設定
Form2.Picture1.Print "Time (ms)" ’x軸のキャプション
’フォントを90°回転させて表示 lngHeight = 20 ’フォントの高さ
lngWidth = 0 ’フォントの幅(高さにあった幅で描画する場合は0)
intAngle = 90
’フォントの作成 With .Font
lnghNewFont = CreateFont(lngHeight, lngWidth, intAngle * 10, _
intAngle * 10, .Weight, .Italic, .Underline, _ .Strikethrough, .Charset, 0, 0, 0, 0, .Name) End With ’FontのWith終了
’作成したフォントを選択
lnghOriginalFont = SelectObject(.hdc, lnghNewFont)
’描画開始位置
.CurrentX = .ScaleWidth / 100 .CurrentY = .ScaleHeight * 5 / 8
Form2.Picture1.Print "Current (μA)" ’y軸のキャプション
lnghNewFont = SelectObject(.hdc, lnghOriginalFont) ’ 元のフォントに戻す End With ’Picture1のWith終了
DeleteObject lnghNewFont ’ オブジェクトを破棄 End With ’Form2のWith終了
End If
’結果をExcellへ表示///////////////////////////////////////////////////////////////////////
If Check2.Value = 1 Then
’Excelの起動
Set ExObj = CreateObject("Excel.Application") ExObj.Application.Visible = True
’WorkBookの生成 ExObj.WorkBooks.Add
ExObj.Application.Cells(1, 6).Value = "α1(mPa s)"
ExObj.Application.Cells(2, 6).Value = "α2(mPa s)"
ExObj.Application.Cells(3, 6).Value = "γ3(mPa s)"
ExObj.Application.Cells(4, 6).Value = "θ0(degree)"
ExObj.Application.Cells(1, 7).Value = α1 * 1000 ExObj.Application.Cells(2, 7).Value = α2 * 1000 ExObj.Application.Cells(3, 7).Value = γ3 * 1000 ExObj.Application.Cells(4, 7).Value = θ0 * 180 / π
’Excelに計算結果を出力////////////////////////////////////////////////////////////////
For it = 1 To data - 1
ExObj.Application.Cells(it, 1).Value = it * Δt ExObj.Application.Cells(it, 2).Value = iI(it) Next it
’導出したα1,α2,α3,γ3,およびθ0における過渡電流波形のPicture1への描画//////////
iy = 1 θ = θ0 E = iv * 10 / L Do While θ < π / 2
’Functionプロシジャtimeの呼び出し
t = time(ε0Δε, E, θ, θ0, α1, γ2, γ4, β1, β2, β3, β4, β5, β6, β7)
’過渡電流
I1 = S * (ε0Δε * Sin(2 * θ)) ^ 2 * E ^ 3
I2 = (α1 * Sin(2 * θ) ^ 2 / 2 - γ2 * Cos(2 * θ) + γ4)
I3 = (α1 * γ1 + γ2 ^ 2) * Sin(2 * θ) ^ 2 - γ1 ^ 2 - γ2 ^ 2 + 2 * γ1 * γ4 I = I1 * I2 / I3
Print #2, t, I
’過渡電流の計算結果をExcelに描画
ExObj.Application.Cells(iy, 3).Value = t ExObj.Application.Cells(iy, 4).Value = I iy = iy + 1
θ = θ + π / 1800 Loop
’/////////////////////////////////////////////////////////////////////////////////////
End If
’/////////////////////////////////////////////////////////////////////////////////////////
Close #1 Close #2 Exit Sub Cancel:
With Form3 .Show
.Label1.Caption = Error(Err.Number) .Command1.Caption = "OK"
End With Close #1 Close #2 Exit Sub Error:
With Form3 .Show
.Label1.Caption = "値が条件を満たしません。"
.Command1.Caption = "OK"
End With Close #1 Close #2 Exit Sub End Sub
Private Sub Text1_Change() Unload Form2
Unload Form3
Command1.Caption = "START"
End Sub
Private Sub Text2_Change() Unload Form2
Unload Form3
Command1.Caption = "START"
End Sub
Private Sub Text3_Change() Unload Form2
Unload Form3
Command1.Caption = "START"
End Sub
Private Sub Text4_Change() Unload Form2
Unload Form3
Command1.Caption = "START"
End Sub
Private Sub Option1_Click() Unload Form2
Unload Form3
Command1.Caption = "START"
End Sub
Private Sub Option2_Click() Unload Form2
Unload Form3
Command1.Caption = "START"
End Sub
Private Sub Check1_Click() Unload Form2
Unload Form3
Command1.Caption = "START"
End Sub
Private Sub Check2_Click() Unload Form2
Unload Form3
Command1.Caption = "START"
End Sub
”Form2”
Private Sub Form_Load()
Label1.Caption = "α_1[mPa s]" ’Leslie粘性係数 Label2.Caption = "α_2[mPa s]"
Label3.Caption = "α_3[mPa s]"
Label4.Caption = "γ_3[mPa s]"
Label5.Caption = "θ_0[degree]" ’プレチルト角 Command1.Caption = "CONTINUE"
Command2.Caption = "FINISH"
End Sub
Private Sub Command1_Click() Form1.Command1.Caption = "START"
Unload Form2 End Sub
Private Sub Command2_Click() Unload Form1
Unload Form2 End Sub
”Form3”
Private Sub Command1_Click() Close #1
Close #2 Unload Form3 End Sub
”Module1”
’I_sumについてのFunctionプロシジャintegration/////////////////////////////////////////////////
Public Function integration(it_start, it_end, iI() As Double) As Double
’電流波形の面積の計算(シンプソンの数値積分) If (it_end - it_start) Mod 2 = 0 Then
I_even = 0 I_odd = 0
For it_sum = it_start + 1 To it_end - 1 If it_sum Mod 2 = 0 Then
I_even = I_even + iI(it_sum) Else
I_odd = I_odd + iI(it_sum) End If
Next it_sum
I_sum = Δt * (iI(it_start) + 4 * I_odd + 2 * I_even + iI(it_end)) / 3 Else
I_even = 0 I_odd = 0
For it_sum = it_start + 1 To it_end - 2 If it_sum Mod 2 = 0 Then
I_even = I_even + iI(it_sum) ElseI_odd = I_odd + iI(it_sum) End If
Next it_sum
I_sum = Δt * ((iI(it_start) + 4 * I_odd + 2 * I_even + iI(it_end - 1)) / 3 _ + (iI(it_end - 1) + iI(it_end)) / 2)
End If
integration = I_sum ’I_sumにintegrationの値を返す End Function
’/////////////////////////////////////////////////////////////////////////////////////////////
’tについてのFunctionプロシジャtime////////////////////////////////////////////////////////////
Public Function time(ε0Δε, E, θ, θ0, α1, γ2, γ4, β1, β2, β3, β4, β5, β6, β7) _ As Double
If α1 <> 0 And β1 > 0 Then