1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ニュートンラフソン法と電力工学

Posted at

はじめに

電力工学では、複雑な高次方程式を解くことで物性値を解析することができる場合がある。そこで、局所解を求めることができる1次元ニュートンラフソン法を用いることで、同期発電機のV曲線とノーズカーブを描写することができるかを調査する。

ニュートンラフソン法

ニュートンラフソン法は、高次方程式などの近似解を求めるために使用されるアルゴリズムである。細かい説明は以下の記事を参照にされたい。

同期発電機のV曲線

導入

$I_f$と起電力$V_s$は以下のような比例関係がある。

V_s=kI_f

まず、以下の式は同期発電機の送電可能電力つまり、安定度の式である。

P=\frac{E_rE_s}{X}sin \delta

ゆえに、

sin\delta = \frac{Px}{V_rV_s}

次に、発電機の等価回路に余弦定理を活用すると以下のようになる。

cos \delta=\frac{-(xI_c)^2+V_r^2+V_s^2}{2V_sV_r}

これを以下の式に代入することで、$I_c$の方程式を立式する。

f(I_c)=sin^2\delta+cos^2\delta-1=0

ゆえに、この方程式の近似解をニュートンラフソン法を用いることでV曲線を描写する。ただし、これには初期解を上手く設定してあげる必要があり、短い範囲でしか正確な値を示さない。そこで、以下のようなプログラムを作成した。

プログラム

python v_curve_newton.py
import numpy as np
import matplotlib.pyplot as plt
import math
import japanize_matplotlib

h=1.0*10**-5
n=1000

x=0.1
V_r=1.0
k=1.0

P=1.0

def equation(I_c,I_f):
    
    E=k*I_f
    c=(-(x*I_c)**2+V_r**2+E**2)/(2*V_r*E)
    s=(P*x)/(E*V_r)
    
    return s**2+c**2-1

I_f_array=np.linspace(0.6,1.4,n)
I_c_array=[]
for i in range(n): 
  I_f=I_f_array[i]
  I_c=10
  while abs(equation(I_c,I_f))>1.0*10**-9:
    diff_equation = (equation(I_c+h,I_f)-equation(I_c,I_f))/h
    
    I_c=I_c-equation(I_c,I_f)/diff_equation

    #print(abs(equation(I_c,I_f)))
    #print(x)
  if I_c>0:
    I_c_array.append(I_c)
  else:
    nan = float('nan')
    I_c_array.append(nan)
plt.title("同期発電機のV曲線")
plt.xlabel("I_f")
plt.ylabel("I_c")
plt.plot(I_f_array,I_c_array)
plt.savefig("同期発電機_V曲線.png")
plt.show()

同期発電機_V曲線.png

ノーズカーブ

導入

以下に電力方程式に関する電圧の式を示す。

(V_r^2+Pr+Qx)^2+(xP-rQ)^2=(V_s V_r)^2

これを$V_r$について得くことでノーズカーブを描写することができる。

プログラム

python nose_newton.py
import numpy as np
import matplotlib.pyplot as plt
import math
import japanize_matplotlib
h=1.0*10**-10
n=10
x=1.0
r=0.0
Q=0.0
V_s=1.0
def equation(P,V_r):
    return (V_r**2+P*r+Q*x)**2+(x*P-x*Q)**2-(V_s*V_r)**2
V_r_array=np.linspace(0,1,n)
P_array=[]
for i in range(n):
  x=2.0
  V_r=V_r_array[i]
  P=1.0
  while abs(equation(P,V_r))>1.0*10**-13:
    diff_equation = (equation(P+h,V_r)-equation(P,V_r))/h
    P=P-equation(P,V_r)/diff_equation
    #print(x)
  P_array.append(P)
plt.title("ノーズカーブ")
plt.xlabel("P")
plt.ylabel("V_r")
plt.plot(P_array,V_r_array)
plt.savefig("ノーズカーブ.png")
plt.show()

これを実行すると以下のようなグラフが出力される。

ノーズカーブ.png

まとめ

今回は、ニュートンラフソン法を用いて方程式の近似解を求めた。その操作を行うことで、ノーズカーブや同期発電機のV曲線を描写することができた。ところが、初期解を上手く選定することが重要になる。それは、経験則でプロットする必要がある。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?