Matlab:如何实现动力系统和时间序列的方程

时间:2016-04-13 17:40:01

标签: matlab for-loop matrix time-series nonlinear-functions

我很难理解使用时间序列概念进行生物医学图像聚类和分割的技术。该课题所依据的论文是: M. Lacomi等。 al,基于的乳腺摄影图像分割 混沌映射聚类算法 download link

D维空间中有一组 N 点{ r _i}。 [0,1]中的实数变量 x _i符合每个点,成对相互作用 J _ij = exp [ - ( r _i - r _j)^ 2 / 2a ^ 2]其中a是局部长度比例。系统的时间演变由EQuation

给出

函数f与神经网络中的激活函数非常相似。 logistic map是一个单峰和单变量离散时间非线性动力系统。 我正在寻找一种更快更有效(矢量化)的方式来应用Eq(1) N = 100万个点是图像的特征。 t跨越1到10次演变。我的方式但不确定代码是否正确。我随机生成一个维数D = 50且包含100个数据点的矩阵R.

N = 100;
D = 50;
T  =10;
R = rand(N,D);
x = zeros(N,T);
y(1) = rand();
for i = 1:N   %// for loop indicating the number of sample points
    y(i+1) = 1-2*y(i)^2; %/* the iterations of the map f */
    r_1(i) = R(i,:);
    r_2(i) = R(i+1,:);
    sum_j = 0.0;
    for t = 1:T
        x(i,:)= y;
        a = var(r(i));
        J = {exp(-(r_1(i) - r_2(i+1))^2)}/2a;
        sum_j = sum_j+J*(1-2*x(i+1,t)));
        x(i,t) =  (1/c(i))*(sum_j);
    end
end

使用矩阵的小型实现,其中每行是数据元素,列是维度,这对于扩展多维图像的代码非常有用。我很难编写Eq(1)代码。

1 个答案:

答案 0 :(得分:1)

我不认为我可以在这个问题上给出一个简单的最终答案,但我绝对可以给你一些有用的提示:

  1. 提前计算一次矩阵J。其中的信息是静态的,因此您不想重新计算。同上,Ci

  2. 部分sum(Jij*yj)实际上是带有矢量的矩阵的乘积。这可以通过线性代数最快地完成,即J*y

  3. 对函数f进行向量化:而不是分别对每个元素执行f(x_i),一次执行f(x)。例如。使用f(x) = 1-2*x.^2代替.^的{​​{1}}会对x的每个元素执行幂运算符。

  4. 您可能希望将时间迭代作为外部循环。这是您需要执行的唯一顺序计算。所有其余的,你想尽可能使用矢量化和线性代数同时做(〜并行)。

  5. 这应该给你一个很好的起点。如果之后还有其他需要帮助的内容,请更新您的问题或发表评论。在这一点上,我只能这样做。部分原因是因为您的代码示例不是非常清晰/描述性的。如果有特殊原因,你可能想添加评论。

    祝你好运!

    编辑:

    代码示例:

    ^

    您并不真正需要向量% Jmod is a modification of the matrix J: % 1. Jmod(i,j) = J(i,j)/C(i) ==> the division by Ci is included % 2. Jmod(i,i) = 0 ==> the diagonal elements are zero such that the term % for i=j is not included in the sum. % Memory allocation x = zeros(N,T+1); y = zeros(N,T+1); % Initialization with your choice of x0 x(:,1) = x0; % Time iterations for t=1:T y(:,t) = 1 - 2*x(:,t).^2; x(:,t+1) = Jmod*y(:,t); end x,但为了清晰起见,我在此示例中使用了它们。