首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

定义硕大无比矩阵 System.OutOfMemoryException

2012-12-14 
定义超大矩阵 System.OutOfMemoryException本人学生,vb接触不深,矩阵只会用最基本的高数运算。在用微元法计

定义超大矩阵 System.OutOfMemoryException
本人学生,vb接触不深,矩阵只会用最基本的高数运算。
在用微元法计算一个二维流体力学问题,


Dim term As Integer = NbHori * NbVert         
Dim A(term - 1, term - 1) As Double                

定义水平(NbHori)竖直(NbVert)方向上的节点数后,建立起一个矩阵用于解方程组

当NbHori = NbVert  =50时 即A为60多万项的矩阵 程序正常运行
但在设NbHori = NbVert  =100 即矩阵有1亿项时程序出现了 System.OutOfMemoryException的错误
估计是说矩阵太大了吧

后来把 配置管理器中的活动解决方案平台由“x86”转为“x64”
程序没有报错,但是时间太长被我中途停止了,而且从中断后显示的迭代次数来看似乎x64的计算计算时间要更长一些(可能是我错觉)

我的问题是
1. 上亿项的矩阵真的很大吗?
    见过一些类似的帖子,有提出优化算法的或者动用数据库建议,但实在编程经验有限,不是很懂。可以提点建议或者关键词,我可以到网上去查。

2. 程序最终要生成成exe文件, 如果我在debug的时候用x64平台生成的话,在别的机子上运行会不会有兼容性的问题,我的老师一个用xp(估计不是64位的),一个用unix。真心怕在他们的机子上跑不了。

3. 如果换种语言来写的话能不能回避这个问题



[解决办法]
NbHori = NbVert  =100 时:
A(term - 1, term - 1) As Double需要100*100*100*100*4=400000000字节=381MB,
已经很大了.

unix可以跑vb程序?

其他程序?那也受到进程可用内存的限制,系统内存的限制...数据有不同罢.
[解决办法]
引用:
NbHori = NbVert  =100 时:
A(term - 1, term - 1) As Double需要100*100*100*100*4=400000000字节=381MB,
已经很大了.

unix可以跑vb程序?

其他程序?那也受到进程可用内存的限制,系统内存的限制...数据有不同罢.

谢谢petrolor的定量解答 
- 其实我也不懂什么优化算法 这个程序只是用最简单的高斯消元解 Ax=b
因为有边界条件,不是连续的函数,所以当时只是想到先把矩阵A定义出来,再把表边界条件的几项改过来。这个思路需要很大的内存把矩阵A建出来,但当初也没想到要那么大。

- 程序最后是要生成成exe文件,我也不确定unix能不能跑exe,网上查了一下好像装个什么软件就可以了,但估计就我这毛糙的算法,老师的电脑也够呛。

还是谢谢啦
[解决办法]
以前做过矩阵,做电路分析的.现在全忘记了.

根据情况,也许可以用稀疏矩阵
[解决办法]
哈哈, 线性代数忘记得差不多了. 
不过我记得矩阵是可以拆分成多个小矩阵单独计算的吧.

热点排行