2017-02-22 2 views
0

z位置(z_pos)に応じて力の値を返す関数を作った。私はこれらの結果(ここではエンジニアのせん断図)をプロットしたいと思いますが、次のエラーが発生します。matplotlibで関数の結果をプロットする方法

ValueError:複数の要素を持つ配列の真理値があいまいです。私はarangeとlinspaceとそれの両方を試してみました

a.any()またはa.allを()を使用し、ここでのコードを参照してください。

import matplotlib.pyplot as plt 
import numpy as np 

#values in kN and m 
FyFL = 520 
FyRL = 1246 
L = 40. 
Lf1 = 2. 
Lf2 = 25.5 
g = 9.81 
W = 60000 
q = (3*g*W/L)/1000 #kN/m 
print q 

def int_force_y(FyFL, FyRL, L, Lf1, Lf2, q, z_pos): 

    if z_pos <= Lf1: 
     int_fc_y = -q*z_pos 
    elif z_pos > Lf1 and z_pos < Lf1+Lf2: 
     int_fc_y = -q*Lf1 + FyFL-q*z_pos 
    elif z_pos >= Lf2 and z_pos <= 40.: 
     int_fc_y = -q*Lf1 + FyFL-q*(Lf1+Lf2)-q*z_pos 
    else: 
     return "No valid z_pos" 

    return int_fc_y 

z_pos = np.arange(0,41,1) 
y = int_force_y(FyFL, FyRL, L, Lf1, Lf2, q, z_pos) 
plt.plot(z_pos,y) 
plt.show() 

ヘルプは非常に高く評価されます!

答えて

1

エラーはプロットとは関係ありませんが、int_force_yに電話すると発生します。引数z_posnp.ndarrayです。今これを例と比較すれば。 Lf1の関数では、最初のifステートメントの場合、z_posの対応する要素がLf1より小さいか等しいかどうかを各要素が示すブール値配列が返されます。いくつかの要素がより小さいか等しいかどうかを判断するには、TrueまたはFalseと判断する必要があるかどうかを判断することができず、Trueまたは.all()の場合、すべての要素がTrueの場合はTrueです。

しかし、どちらの場合でも、これらの場合は、あなたがしたいことをしません。個々の要素ごとに決定し、それに応じて対応する値をint_fc_yに設定します。 boolean indexingnp.logical_andを使用してforループまたはよりエレガントにこれを行うことができます。ちょうどあなたの結果配列の代わりのバージョンを生成するために、この機能を使用する:あなたのpythonを求めているため、問題が発生した

def int_force_y(FyFL, FyRL, L, Lf1, Lf2, q, z_pos): 
    if (z_pos>40.).any(): 
     return "No valid z_pos" 
    int_force_y = np.zeros_like(z_pos) 
    int_fc_y[z_pos<=Lf1] = -q*z_pos 
    int_fc_y[np.logical_and(z_pos > Lf1, 
          z_pos < Lf1+Lf2)] = -q*Lf1 + FyFL-q*z_pos 
    int_fc_y[np.logical_and(z_pos >= Lf2, 
          z_pos <= 40.)] = -q*Lf1 + FyFL-q*(Lf1+Lf2)-q*z_pos 
    return int_fc_y 
0

か配列が特定の値より大きいか小さい場合:

if z_pos <= Lf1: 

このかもしれませんいくつかの価値については真実であり、他のものに対しては偽であり、その文が曖昧であるか偽であるかは問わない。

あなたは試すことができます:

if np.array(z_pos <= Lf1).any(): 

または

if np.array(z_pos <= Lf1).all(): 

をあなたが望むものに応じて。 次のif文と同じです。

+0

これは、関数が1つの値を返し、すべての結果値の配列を返さないため、望ましい結果を得られません。 – jotasi

関連する問題