1

パラメータの 1 つが変調されるローレンツ ソリューションを作成しようとしています。

ローレンツ方程式の簡単なセットを作成する場合、odeint を使用するのは簡単です。

Multiplier = 10. # Use multiplier to widen bandwidth 

Sigma = Multiplier * 16.
Rho =   Multiplier * 45.6
Beta =  Multiplier * 4

##################################
#
#   dx/dt = Sigma(y-x)
#   dy/dt = Rho*x - y-20xz
#   dz/dt = 5xy - Beta*z
#
##################################

def f(y, t, param):
    Xi = y[0]
    Yi = y[1]
    Zi = y[2]
    Sigma = param[0]
    Rho = param[1]
    beta = param[2]    
    f0 = Sigma*(Yi -Xi)
    f1 = Rho*Xi - Yi - 20*Xi*Zi
    f2 = 5*Xi*Yi - beta*Zi
    return [f0, f1, f2]

# Initial Conditions    
X0 = 1.0
Y0 = 1.0
Z0 = 1.0
y0 = [X0, Y0, Z0]
t = np.arange(0, 10, .001)  #Create 10 seconds of data
dt = t[1] - t[0]
param = [Sigma, Rho, Beta]

# Solve the DEs
soln = odeint(f, y0, t, args = (param,))
X = soln[:, 0]
Y = soln[:, 1]
Z = soln[:, 2]

上記のコードは、単純なローレンツ システムを作成するのに完全に機能します。ここで、変調されたパラメーター ローレンツ システムを作成して、通信におけるその有効性を調べたいと思います。これは、パラメータ Beta を変調することで実行できます。Beta(t) は、「0」または「1」を表す 4.0 または 4.4 の 2 つの値のいずれかを取ることができます。

ベータを変調するために、ランダムな 1 と 0 を選択し、「1」または「0」あたり 500 サンプルで、それらをベータの 2 つの値 4.0 と 4.4 に割り当てました。

Bit_Rate = 2.
Number_of_Bits = np.int(len(X)*dt*Bit_Rate)
Number_of_samples_per_bit = np.int(1/ dt / Bit_Rate)


Bauded_Beta = []
for i in range(0, Number_of_Bits):
    Bit = np.random.randint(0,2)
    if Bit == 0:
        for j in range(Number_of_samples_per_bit):
            Bauded_Beta.append(Multiplier * 4.4)
    else:
        for k in range(Number_of_samples_per_bit):
            Bauded_Beta.append(Multiplier * 4.0)

次に、パラメーターの odeint セットへの呼び出しを次のように変更しました。 param = [Sigma, Rho, Bauded_Beta]

param = [Sigma, Rho, Bauded_Beta]

# Solve the DEs
soln = odeint(f, y0, t, args = (param,))
X = soln[:, 0]
Y = soln[:, 1]
Z = soln[:, 2]

これを実行すると、次のようなエラー メッセージが表示されます。 float の適切な配列ではありません。ValueError: 配列要素をシーケンスで設定しています。odepack.error: 関数呼び出しの結果は float の適切な配列ではありません。"

このエラーは、ベータ版が一定ではなくなったことによるものです。しかし、変調されたパラメーターを odeint に渡すにはどうすればよいですか?

4

0 に答える 0