我做的是一个pls分析(就是一种数据分析),其中我用的是自己写的矩阵乘法运算,加了一点优化在里面(对含很多0元素才有效果),里面的各种函数都是自己编写的(如jian(x(),y())函数是两个数组对应元素相减),但都是用循环实现的。调试过程中,我发现有一步要计算两个4149*4149数组相乘(图中我标断点处,主过程名为test,调用pls函数,pls中调用了我自己编写的矩阵运算函数),pls函数中第一次循环时由于第一个矩阵chg是单位矩阵,我的优化有点效果(我猜的),我调试到第二次时chg不再是单位矩阵了,这下就是复杂度O(n^3)的矩阵相乘运算了,直接跑不出来了,请指教。(也尝试了内置函数mmult,同样跑死。)
我自己考虑了一些问题,但我是第一次使用vba,所以对这些也不清楚,只是感觉会影响到运行速度,不知道值不值得去改:
1、我定义的数组都没有指定类型(原因是我从单元格拉数据进我定义的single或者定义的double数组时报错类型不匹配)
2、 计算过程我用了很多中间变量,因为这些函数是自己写的,如果直接嵌套写会报错如a = mult(x,trans(y))(mult和trans都是我自己写的,因为在网上看到内置的函数如转置在数组维度很大时会出错,我尝试了一下的确转不了,后面就都自己写了)
希望能教我解决一下这个矩阵相乘跑死的问题,我所考虑的问题不知道对整个程序运行减少时间有没有帮助,目前整个程序的运行速度也比较慢,如能帮助解决有偿!!!!由于文件超过2M,无法附件上传,劳烦在百度云上下载一下。
链接:https://pan.baidu.com/s/1GQx2bEmf6VH7EL-oTho7kA
提取码:tz28
我上传的文件中pls里大循环只有一次,第二次循环时计算量很大跑死,我要解决的问题最多可能跑到10几次循环
|