2

アルキメデスのらせんを定義しようとしています: 軌道に対する接線ベクトルの傾斜角 (含む) を定義しようとしているとき (つまり、tan(incl))

エラーが発生します:

「numpy.ufunc」オブジェクトはアイテムの割り当てをサポートしていません」および「関数呼び出しに割り当てられません」

cos(incl)、およびを計算したいときに同じエラーが発生しますsin(incl)。任意の提案と役立ちます。

私のコードは次のとおりです。

T = 100    
N = 10000    
dt = float(T)/N 

D = 2     
DII = 10

    a = 2.     
    v = 0.23    
    omega = 0.2    
    r0 = v/omega    
    t = np.linspace(0,T,N+1)    
    r = v*t    
    theta = a + r/r0    
    theta = omega*t

    x = r * np.cos(omega*t)     
    y = r * np.sin(omega*t) 

    dxdr = np.cos(theta) - (r/r0)*np.sin(theta)    
    dydr = np.sin(theta) + (r/r0)*np.cos(theta)    
    dydx = (r0*np.sin(theta) + r*np.cos(theta))/r0*np.cos(theta) - r*np.sin(theta)

    np.tan[incl] = dydx    
    incl = np.arctan((dydx))

    ### Calculate cos(incl) ,sin(incl) :    
    np.sin[np.incl] = np.tan(np.incl)/np.sqrt(1 + np.tan(np.incl)*2)    
    np.cos[incl] = 1/np.sqrt(1 + np.tan(incl)*2)

 p1, = plt.plot(xx, yy)

i= 0 # this is the first value of the array

Bx = np.array([np.cos(i), -np.sin(i)])                    
By = np.array([np.sin(i), np.cos(i)])                     
n = 1000    
seed(2)

finalpositions = []

for number in range(0, 10):

  x = []    
  y = []    
  x.append(0)     
  y.append(0)

  for i in range(n):

      s = np.random.normal(0, 1, 2) 

      deltaX = Bx[0]*np.sqrt(2*DII*dt)*s[0] + Bx[1]*np.sqrt(2*D*dt)*s[1]          
      deltaY = By[0]*np.sqrt(2*DII*dt)*s[0] + By[1]*np.sqrt(2*D*dt)*s[1]

      x.append(x[-1] + deltaX)    
      y.append(y[-1] + deltaY)

  finalpositions.append([x[-1], y[-1]])

 p2, = plt.plot(finalpositions[:,0],finalpositions[:,1],'*')

plt.show()
4

1 に答える 1

0

エラーメッセージは正しいです。関数に代入しようとしています! 値のsin、cos、またはtanを表す値を計算しようとしていると思いますが、それはnp.sinなどに割り当てる必要があるという意味ではありません。あなたが望むのは、三角関数を使用してから、逆三角関数を使用して角度を取得します。

## np.tan[incl]= dydx  ## np.tan is a function, so you cannot index it like an array, and you should not assign to it.

incl = np.arctan((dydx))  ## this is all you need to get "incl"

### Calculate cos(incl) ,sin(incl) :
## NOTE: you already have the angle you need!!  No need for a complicated formulate to compute the sin or cos!
sin_incl = np.sin(incl)
cos_incl = np.cos(incl)

編集: 1 つの追加コメント...npは、多数の数値メソッドを含むモジュールです。あなたが計算するときincl、それはの一部ではありませんnp!したがって、 のように参照する必要はありませんnp.incl。を使用するだけinclです。

EDIT2:私が見つけた別の問題は、この行です:

dydx = (r0*np.sin(theta) + r*np.cos(theta))/r0*np.cos(theta) - r*np.sin(theta)

dydx を計算するには、dydr を dxdr で除算するだけですが、それはあなたのコードが行うことではありません! 次のように、分母の周りに括弧が必要です。

dydx = (r0*np.sin(theta) + r*np.cos(theta))/(r0*np.cos(theta) - r*np.sin(theta))
于 2016-02-18T15:57:19.823 に答える