本人学生,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. 如果换种语言来写的话能不能回避这个问题

解决方案 »

  1.   

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

  2.   

    谢谢petrolor的定量解答 
    - 其实我也不懂什么优化算法 这个程序只是用最简单的高斯消元解 Ax=b
    因为有边界条件,不是连续的函数,所以当时只是想到先把矩阵A定义出来,再把表边界条件的几项改过来。这个思路需要很大的内存把矩阵A建出来,但当初也没想到要那么大。- 程序最后是要生成成exe文件,我也不确定unix能不能跑exe,网上查了一下好像装个什么软件就可以了,但估计就我这毛糙的算法,老师的电脑也够呛。还是谢谢啦