这里下载:http://www.mwtee.com/forum-redirect-tid-614900-goto-lastpost.html#lastpost
一万未知数,VS2008下,求解时间13秒多一点,未使用omp
0)
用于求解M s = b这样的线性方程组,row表示方阵M的阶数。数据类型双精度。矩阵可以ROW X ROW存储即多行多列存储,也可以1 X ROW^2也就是1行多列存储。
void Solvef ( float * * M, int row, float *b, float * & s );
//------------------------------------------------------------------------------------------------------------------------------
void Solved ( double * * M, int row,double * b, double * & s );
//------------------------------------------------------------------------------------------------------------------------------
void Solveld ( long double * * M, int row,long double * b, double * & s );
//------------------------------------------------------------------------------------------------------------------------------
void Solvedl ( double * M, int row,double * b, double * & s );
//----------------------------------------------------------------------------------------------------------------------------
1)
工程文件需要包含:#include "windows.h",然后把MatrixSolve.dll文件复制到你的工程文件夹下。在需要使用求解器的地方写上:
typedef void ( *TSolve) ( double*, int, double*, double *& );
HINSTANCE handle;
FARPROC lpFarProc;
TSolve Solve;
handle= LoadLibrary( "MatrixSolve.dll");
if( handle == NULL )
{
FreeLibrary ( handle );
}
else
{
lpFarProc = GetProcAddress ( handle, "Solvedl" );
//使用Solvedl还是Solved或者其他的,看你的矩阵存储类型
Solve = TSolve ( lpFarProc );
// A X = B,方阵A的阶数是ROW,X是待求未知数
Solve( A, ROW, B, X );
FreeLibrary ( handle );
}
2)
如果生成文件时提示fatal error LNK1107:…….,
是FAT32系统分区的问题,如果你的硬盘式用NTFS就没有问题。。。解决方法:项目à项目属性à配置属性à清单工具à使用FAT32解决方法为 是
3)
我一般使用多行多列存储系数矩阵,这里的例子使用1行多列存储,似乎二者并不影响求解时间。我感觉多行多列存储系数矩阵稍微快一点,但是有的人的说法与我恰好相反,不知道他们使用的是什么求解器。