永发信息网

在使用矩阵之前需要预定义变量吗

答案:2  悬赏:0  手机版
解决时间 2021-01-25 19:50
  • 提问者网友:嗝是迷路的屁
  • 2021-01-25 01:47
在使用矩阵之前需要预定义变量吗
最佳答案
  • 五星知识达人网友:骨子里都是戏
  • 2021-01-25 02:59
矩阵A的大小会随着for循环次数增加而增加,建议预先定义A的大小,以提高运行速度
原因:
(1)Matlab存储矩阵的方式。Matlab的矩阵是以块(Block)的形式存储的,当Matlab在为即将存储的矩阵划分块时,如果没有相应大小的连续内存,即使实际内存还有剩余,也会报错“Out of Memory”。那为什么内存会不连续呢?因为计算机在使用过程中,存储单元会不断的分配和清除,内存也就被分割成不连续的区域。
(2)动态分配VS预先定义。在动态分配过程中,由于Matlab矩阵变量逐渐增大需要连续为此矩阵分配内存,但由于块的不连续性,当矩阵逐渐变大时,刚开始分配的块很可能不够,Matlab需要移动此块找到更大的块来存储,这样在移动过程中不但占用大量时间,而且很可能由于找不到足够大的块,导致“Out of Memory”;当矩阵变量预先定义其大小时,Matlab在计算之前就一次性找到最合适的块,不需要动态分配内存
全部回答
  • 1楼网友:患得患失的劫
  • 2021-01-25 04:36
参考代码: n = 5; x = sym(zeros(n)); for i=1:n     for j=1:n         cmd = sprintf('sym(''x%i%i'')',i,j);         x(i,j) = eval(cmd);     end end x 运行结果: x =  [ x11, x12, x13, x14, x15] [ x21, x22, x23, x24, x25] [ x31, x32, x33, x34, x35] [ x41, x42, x43, x44, x45] [ x51, x52, x53, x54, x55]  说明: 1、想要不同的维数,修改n即可。 2、为避免歧义,最好改一下符号的格式。例如,按照现在的写法,x
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯