在MATLAB中对for循环进行矢量化以加快执行速度

时间:2017-08-09 18:58:08

标签: matlab performance loops vectorization

我模拟了刚度矩阵的一个参数中具有不确定性的线性系统的动态响应。在代码中,它是数据集数组的ds(17)参数,它在动态系统的KK刚度矩阵中被替换。所有其他参数都是常量。

首先,我计算参数的随机高斯正态分布,并绘制结果,以查看值落入某个区间的概率。即使我计算1e6个随机样本,它也不需要花费太多时间来计算。

然后我开始计算固有频率,其中k__p刚度的平均值(在KK矩阵中表示)或ds(17)用于我的基础系统作为参考。

在定义了所需的随机样本数num = 1e3;并指定Km = 1e8;的平均值后,我进入第一个for循环,将新的随机ds(17)值替换为动态矩阵{ {1}}(这是18个自由度)并给我新的固有频率,然后我将其绘制到下一个for循环中。

使用KK我的计算机需要30秒才能给出结果,但是100个样本对于我需要的东西太少而且代表高斯分布,我想尝试至少一千个但是我的cpu无法处理,它目前已经运行超过20小时1e3,但我想我会阻止它。

我对一般编程实践有两个问题: 1.预分配acell矩阵数组(Kcell和Fcell)的正确方法是什么。 2.有没有更好的方法为数据集创建数组或列表或变量,将其输入到函数中而不是我所做的(ds数组)?

我尝试将此代码的代码保留为最小值。我很感激有关如何使我的代码更快的任何意见,谢谢。

num = 1e2

Profiler Results

0 个答案:

没有答案