求解器一阶微分矩阵方程Netlogo

时间:2017-11-29 11:17:03

标签: python r netlogo

根据业务代表的邻居位置设计一个业务代表的移动。我们通常会参加这个控制协议:

x'_i(t) = ai1*x_i(t)+ +aij*x_j(t) ; j=1,..,N, 
  • Ni的总邻居。
  • aij:是常数(设计系数)。

最后我们来解决这个等式:

x'(t) = Ax(t) : A is a design matrix, x is the position of the agent.

最简单的案例之一可能是:(x,y是邻居)

x'(t) = x(t) + 2y(t)
y'(t) = 2x(t) + y(t)

有没有任何数值方法可以解决这个等式。因此,在每个滴答时间,我都可以显示x(t)y(t)

在matlab中我们有ode45求解器来做这个。但是使用Netlogo我不知道如何。使用Runge-Kutta方法,它只能使用一个变量x(t) = f(x,t)

1 个答案:

答案 0 :(得分:4)

NetLogo在处理时间方面本质上是离散的,而不是连续的。它也是以代理为中心的(因此从代理的角度制定模型规则,而不是外部的人)。

将其视为差异方程式。您可以为每个代理存储属性(在您的情况下:x,x-prime)。确定了邻居的含义(例如最近的代理,随机选择的链接另一端的代理),然后直接计算x-prime的新值并将代理的变量设置为该值。

如果您希望所有内容同时更新,您的代码可能如下所示:

turtles-own
[ x
  x-prime
  next-x
  next-x-prime
]

to setup
  clear-all
  create-turtles 10
  [ setxy random-xcor random-ycor
    set x random-float 10
    set x-prime random-float 10
  ]
  reset-ticks
end

to go
  ask turtles
  [ let partner one-of other turtles
    set next-x x + x-prime
    set next-x-prime x + 2 * [x] of partner * [x-prime] of partner
  ]
  ask turtles
  [ set x next-x
    set x-prime next-x-prime
  ]
  tick
end