Python逐个点移动,然后绘制轨道

时间:2018-04-09 12:23:02

标签: python numpy matplotlib orbit

我知道如何绘制矩阵移动的点,如下所示

%matplotlib inline

import matplotlib.pyplot as plt
import numpy as np

x=np.random.randn(2) #2*1 matrix
A=np.random.randn(2,2) #2*2 matrix
print ('the content of x:\n{}\n the content of A:\n{}'.format(x,A))

def action(pt,n):
     record=[pt]
     for i in range(n):
         pt= A@pt
         record=np.vstack([record,pt])
     plt.scatter(record[:,1],record[:,1])

action(x,100)

函数“action”将绘制类似于行的东西,但我想按矩阵移动点然后像轨道一样绘制

1 个答案:

答案 0 :(得分:0)

简短的答案:

plt.scatter(记录[:,1],记录[:,1])将在x和amp;中提供相同的值。 y尺寸&因此总会返回一条线。替换为:

X,Y = np.hsplit(record,2) plt.scatter(X,Y)

LONG ANSWER:

作为一条线出现的主要原因是你使用2个常数生成图(尽管是随机生成的)。我将使用以下示例进行说明:

>>> c
array([[ 1.,  2.],
       [ 2.,  4.]])
>>> d
array([ 3.,  4.])
>>> d@c
array([ 11.,  22.])
>>> d@c@c
array([  55.,  110.])
>>> d@c@c@c
array([ 275.,  550.])

注意所有递归操作如何在每个阶段仅将初始坐标乘以5。 如何获得非线性图?

  1. 利用我们调用循环操作的变量'i',给它一个2(抛物线)或更多的幂。

  2. 使用大于1的2个矩阵中填充的随机数。否则所有操作都会增加-ve中的幅度,或者如果b / w(-1,1)幅度减小。

  3. 使用数学函数引入非线性。例如:

  4. pt = pt + np.sin(pt)

    sin component added

    反映使用2个随机矩阵&循环遍历它们是实现曲线的唯一方法。如果这个活动独立于你的更大的程序等,那么可能通过使用生成你喜欢的曲线的数学函数来尝试不同的方法。