线性方程组求解解

2428人阅读
线性方程组求解库
求解线性方程组 Ax=b,常用的方法包括 直接解法(一般是对 A 进行矩阵分解)和 迭代法。常用的数值计算平台,如 Matlab,Octave,numpy 中都支持对线性方程组的求解,以 Matlab 的性能最优,支持的方法也最多,直接求解时用 x=b\A 会根据 A 的性质(如对称、稀疏)选择最优的算法,在用迭代求解时还可以先进行不完全分解来加速收敛速度。
下面总结一下我所知道的开源的求解线性方程组的相关的数值计算库,一般都是 Fortran 或 C/C++开发。
BLAS(Basic Linear Algebra Subprograms)&
blas 是许多数值计算软件库的核心, 一般是用 Fortran77 实现, 支持矩阵、向量基本操作。也有 C/C++的封装。
据说性能最优的 BLAS 实现是 gotoBLAS。
Sparse BLAS&
BLAS的 Sparse matrix 版本。见到的都是 NIST 版本,C++的,netlib 上的 是一个 Fortran 版本。
LAPACK(Linear Algebra PACKage)&
专用于线性运算的,如求解 AX=b, 矩阵分解、求逆,求矩阵特征值、奇异值等,在 www.netlib.org/lapack/ 是 Fortran 版本的,应用很广,但还未见到针对 Sparse matrix 的版本。
可以在分布内存的计算机上并行求解线性问题,即并行版的 LAPACK。
SuiteSparse&
SuiteSparse 是 Prof. Tim Davis的 Sparse matrix solver 的程序包,涉及希疏矩阵分解,大多用 C 开发,提供 Matlab 接口。Matlab 中的很多数希疏矩阵函数的原型都可以在其中找到。性能非常出色。强烈推荐看看他的主页!
TNT(Template Numerical Toolkit)&
C++的数值计算库,目标很大,据说还要集成 LAPACK++,Sparselib++,IML++,MV++。但目前还很薄弱,也就是定义了一些数据结构,求解线性方程组的能力基本没有,Sparse matrix 的操作功能也没有。
Sparselib++&
C++的 Sparse matrix 库,与 sparse BLAS 差不多,多了对矩阵的 preconditioner功能,可以配合 IML++ 做线性方程组的迭代求解。
IML++(Iterative Methods Library)&
C++的。支持对 dense or sparse 的线性方程组的迭代求解,包括
* Richardson Iteration
* Chebyshev Iteration
* Conjugate Gradient (CG)
* Conjugate Gradient Squared (CGS)
* BiConjugate Gradient (BiCG)
* BiConjugate Gradient Stabilized (BiCGSTAB)
* Generalized Minimum Residual (GMRES)
* Quasi-Minimal Residual Without Lookahead (QMR)
等方法,可配合使用 sparselib++。
ITL (The Iterative Template Library)
The ITL currently includes the following methods:
Conjugate Gradient (cg)&
Conjugate Gradient Squared (cgs)&
BiConjugate Gradient (bicg)&
BiConjugate Gradient Stabilized (bicgstab)&
Chebyshev Iteration (cheby)&
Richardson Iteration (richardson)&
Generalized Conjugate Residual (gcr)&
Generalized Minimal Residual (gmres)&
Quasi-Minimal Residual Without Lookahead (qmr)&
Transpose Free Quasi-Minimal Residual Without Lookahead (tfqmr)&
The ITL currently includes the following preconditioners:
Incomplete Cholesky (cholesky)&
Incomplete LU without fill-in (ILU)&
Incomplete LU with n fill-in and with threshold (ILUT)&
对大型、稀疏、非对称的线性系统的直接求解,用 Gauss 消去法做 LU 分解。用 C 开发。
C。可求解对称和非对称的线性问题。
基于 C++ template 的 matrix class lib,技术比较眩,性能据说也不错,但支持的操作太少,线性方程组的只有 LU 分解,和几种迭代方法,不支持 sparse matrix。
blitz++&
技术上更眩,但对线性方程组的支持很少。
GNU scientific library,很正统,但对 sparse matrix 的支持为0,性能也不突出。
MKL(intel math kernel library)非常强大,包括了优化过的 blas,LAPACK,又支持 sparse direct solver,可惜不开源,使用起来不方便。
这儿对 sparse linear system direct solve software 有非常全面的总结。
I've tested some of the libraries, with following results :
testing data : sparse symmetric positive matrix
dimension : &
density : 0.3&
non-zeros : 1284213
condition : 2.7015e+04
opencv : CV_LU 45.7s(linux)
mkl : pardiso 3.17s(win)
matlab : \ 2.57s(win)
CHOLMOD : cholmod 2.48s(linux)
and I've found that linux(ubuntu-6.10 in my workstation) is far more flexible than windows in programming and scientific research!
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:30569次
排名:千里之外
转载:17篇
(1)(2)(3)(10)(6)一元二次方程求根在线计算器
输入ax2+ bx + c = 0方程的系数a,b,c
一元二次方程(英文名:quadratic equation of one unknown)是指只含有一个未知数,并且未知数的最高次数是二次的整式方程,该方程式的一般形式是:ax?+bx+c=0(a≠0),其中,ax?是二次项,bx是一次项,c是常数项,a、b是常数。a≠0是一个重要条件,否则就不能保证该方程未知数的最高次数是二次。
当Δ=b^2-4ac≥0时,x=[-b±(b^2-4ac)^(1/2)]/2a
当Δ=b^2-4ac<0时,x={-b±[(4ac-b^2)^(1/2)]i}/2a(i是虚数单位)
一元二次方程配方法:
ax^2+bx+c=0(a,b,c是常数)
x^2+bx/a+c/a=0
(x+b/2a)^2=(b^2-4ac)/4a^2
x+b/2a=±(b^2-4ac)^(1/2)/2a
x=[-b±(b^2-4ac)^(1/2)]/2a
支持我们使用
购物支持我们。Matlab求解线性方程组、非线性方程组 实例说明_矩阵_中国百科网
您现在的位置: >
> 文章内容:
Matlab求解线性方程组、非线性方程组 实例说明
    该文章讲述了Matlab求解线性方程组、非线性方程组 实例说明.
求解线性方程组
solve,linsolve
A=[5 0 4 2;1 -1 2 1;4 1 2 0;1 1 1 1];
%矩阵的行之间用分号隔开,元素之间用逗号或空格
B=[3;1;1;0]
X=zeros(4,1);%建立一个4元列向量
X=linsolve(A,B)
diff(fun,var,n):对表达式fun中的变量var求n阶导数。
例如:F=sym('u(x,y)*v(x,y)'); %sym()用来定义一个符号表达式
diff(F); %matlab区分大小写
pretty(ans) %pretty():用习惯书写方式显示变量;ans是答案表达式
非线性方程求解
fsolve(fun,x0,options)
其中fun为待解方程或方程组的文件名;
x0位求解方程的初始向量或矩阵;
option为设置命令参数
建立文件fun.m:
function y=fun(x)
y=[x(1)-0.5*sin(x(1))-0.3*cos(x(2)), ...
x(2) - 0.5*cos(x(1))+0.3*sin(x(2))];
&&x0=[0.1,0.1];fsolve(@fun,x0,optimset('fsolve'))
...为续行符
m文件必须以function为文件头,调用符为@;文件名必须与定义的函数名相同;fsolve()主要求解复杂非线性方程和方程组,求解过程是一个逼近过程。
Matlab求解线性方程组
AX=B或XA=B
在MATLAB中,求解线性方程组时,主要采用前面章节介绍的除法运算符&/&和&&。如:
X=AB表示求矩阵方程AX=B的解;
X=B/A表示矩阵方程XA=B的解。
对方程组X=AB,要求A和B用相同的行数,X和B有相同的列数,它的行数等于矩阵A的列数,方程X=B/A同理。
如果矩阵A不是方阵,其维数是m&n,则有:
m=n 恰定方程,求解精确解;
m&n 超定方程,寻求最小二乘解;
m&n 不定方程,寻求基本解,其中至多有m个非零元素。
针对不同的情况,MATLAB将采用不同的算法来求解。
一.恰定方程组
恰定方程组由n个未知数的n个方程构成,方程有唯一的一组解,其一般形式可用矩阵,向量写成如下形式:
Ax=b 其中A是方阵,b是一个列向量;
在线性代数教科书中,最常用的方程组解法有:
(1)利用cramer公式来求解法;
(2)利用矩阵求逆解法,即x=A-1b;
(3)利用gaussian消去法;
(4)利用lu法求解。
一般来说,对维数不高,条件数不大的矩阵,上面四种解法所得的结果差别不大。前三种解法的真正意义是在其理论上,而不是实际的数值计算。MATLAB中,出于对算法稳定性的考虑,行列式及逆的计算大都在lu分解的基础上进行。
在MATLAB中,求解这类方程组的命令十分简单,直接采用表达式:x=Ab。
在MATLAB的指令解释器在确认变量A非奇异后,就对它进行lu分解,并最终给出解x;若矩阵A的条件数很大,MATLAB会提醒用户注意所得解的可靠性。
如果矩阵A是奇异的,则Ax=b的解不存在,或者存在但不唯一;如果矩阵A接近奇异时,MATLAB将给出警告信息;如果发现A是奇异的,则计算结果为inf,并且给出警告信息;如果矩阵A是病态矩阵,也会给出警告信息。
注意:在求解方程时,尽量不要用inv(A)*b命令,而应采用Ab的解法。因为后者的计算速度比前者快、精度高,尤其当矩阵A的维数比较大时。另外,除法命令的适用行较强,对于非方阵A,也能给出最小二乘解。
二.超定方程组
对于方程组Ax=b,A为n&m矩阵,如果A列满秩,且n&m。则方程组没有精确解,此时称方程组为超定方程组。线性超定方程组经常遇到的问题是数据的曲线拟合。对于超定方程,在MATLAB中,利用左除命令(x=Ab)来寻求它的最小二乘解;还可以用广义逆来求,即x=pinv(A),所得的解不一定满足Ax=b,x只是最小二乘意义上的解。左除的方法是建立在奇异值分解基础之上,由此获得的解最可靠;广义逆法是建立在对原超定方程直接进行householder变换的基础上,其算法可靠性稍逊与奇异值求解,但速度较快;
求解超定方程组
A=[2 -1 3;3 1 -5;4 -1 1;1 3 -13]
b=[3 0 3 -6]&;
x2=pinv(A)*b
可见x1并不是方程Ax=b的精确解,用x2=pinv(A)*b所得的解与x1相同。
三.欠定方程组
欠定方程组未知量个数多于方程个数,但理论上有无穷个解。MATLAB将寻求一个基本解,其中最多只能有m个非零元素。特解由列主元qr分解求得。
解欠定方程组
A=[1 -2 1 1;1 -2 1 -1;1 -2 1 5]
b=[1 -1 5]&
Warning:Rank deficient,rank=2 tol=4.
x2=pinv(A)*b
四.方程组的非负最小二乘解
在某些条件下,所求的线性方程组的解出现负数是没有意义的。虽然方程组可以得到精确解,但却不能取负值解。在这种情况下,其非负最小二乘解比方程的精确解更有意义。在MATLAB中,求非负最小二乘解常用函数nnls,其调用格式为:
(1)X=nnls(A,b)返回方程Ax=b的最小二乘解,方程的求解过程被限制在x 的条件下;
(2)X=nnls(A,b,TOL)指定误差TOL来求解,TOL的默认值为TOL=max(size(A))*norm(A,1)*eps,矩阵的-1范数越大,求解的误差越大;
(3)[X,W]=nnls(A,b) 当x(i)=0时,w(i)&0;当下x(i)&0时,w(i)0,同时返回一个双向量w。
求方程组的非负最小二乘解
A=[3.8 0.6710
-0.3 -0.7302
0.2 4.0261];
b=[-1.000 1.0];
[X,W]=nnls(A,b)
Mail: Copyright by ;All rights reserved.二次方程求根公式_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
二次方程求根公式
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢中国突破亿阶线性方程组高性能求解
发表于 16:27|
摘要:“随着科技的进步,问题的处理规模逐渐增大且精度要求日益提高。受计算能力所限,超大规模线性方程组的求解往往成为工程数值计算过程中的一大瓶颈。浪潮高性能计算应用研发团队基于CPU+MIC异构平台开发的超大规模线性方程组高性能求解系统,可在短短几分钟内完成亿阶规模矩阵的求解,这一成果...
&&随着科技的进步,问题的处理规模逐渐增大且精度要求日益提高。受计算能力所限,超大规模线性方程组的求解往往成为工程数值计算过程中的一大瓶颈。浪潮高性能计算应用研发团队基于CPU+MIC异构平台开发的超大规模线性方程组高性能求解系统,可在短短几分钟内完成亿阶规模矩阵的求解,这一成果对科学研究、工程应用以及自主可控国产CAE软件的开发都有重要意义!& 对于与浪潮联合开发的亿阶线性方程组MIC加速方案,太原理工大学博士生导师,计算数学学会常务理事、副秘书长李明给出了上述评价。
&毫不夸张的讲,大部分科学与工程问题都要归结为一个线性方程组的求解问题。&李明教授一开头说道。他介绍说,线性方程组的求解问题是一个十分古老的问题,早在中国古代数学专著《九章算术》第八章就详细记载了一次线性方程组的求解方法。时隔数千年的今天,线性方程组求解仍是众多科学与工程领域重点研究的课题之一。
超大规模线性方程组求解难
实际上,数学物理模型的求解是众多工程生产与科研领域必不可少的工作之一,如机械制造、材料加工、航空航天、汽车、土木建筑、国防军工、船舶、铁道、石化、能源、科学研究等。快速、精确地求解线性方程组可以很大程度地提高生产、研究效率。经过半个多世纪众多专家的不断探索,目前有关的方法和理论已相对比较成熟,产生了一批比较漂亮实用的算法。然而,随着科技的进步,所求解问题规模的增大,模型结构越来越复杂且对计算精度的要求日益提高,这也使得线性方程组的规模急剧增加。
& 近几年,随着计算机集群系统的发展,处理核心数量的急剧增加,计算能力的大大提高,使超大规模线性方程组的求解重现希望。国内高性能计算发展虽然势头凶猛,然而,不可否认的是高性能软件及应用方面仍有很大的提升空间。成熟的超大规模线性方程组的高性能求解工具更是凤毛麟角。
正是由于此类工具非常重要且稀缺,不得不将大量的数据与信息提供到国外有偿计算。且不论高昂的花费,大量的数据信息掌握在外人的手里,对企业和科研机构存在着很大的信息安全隐患,甚至危害国家的安全。因此,开发自主可控的高性能计算软件意义重大!
近几年,随着计算机集群系统的发展,处理核心数量的急剧增加,计算能力的大大提高,使超大规模线性方程组的求解重现希望。国内高性能计算发展虽然势头凶猛,然而,不可否认的是高性能软件及应用方面仍有很大的提升空间。成熟的超大规模线性方程组的高性能求解工具更是凤毛麟角。
新方法结合新技术突破亿阶
浪潮作为国内高性能计算产品和技术领先厂商,在MIC技术研究与应用开发方面,一直处于国内领先的地位。浪潮高性能计算应用开发团队与太原理工大学密切配合,基于CPU+MIC异构计算平台,成功完成了亿阶以上超大规模线性方程组高性能求解系统,并在实际用例的测试中出色完成求解任务。
整个开发工作,工程师们经历了目标制定、算法筛选与调整、串行设计、MPI并行设计、MIC移植及优化等一系列的考验,特别是算法的选取于优化更是整个开发工作的重中之重。一般来说,求解线性方程组的传统算法有直接法和迭代算法,浪潮工程师在经过对矩阵特性的分析并参阅了大量材料后,从众多的算法中挑选出最适合的一种Krylov子空间算法。但是Krylov子空间算法的一大特点就是不具有良好的天然可并行性,大量的MPI集合通信容易造成扩展瓶颈,而关于如何解决Krylov子空间方法集合通信量大的有效资料少之又少。在这样的困局下,浪潮工程师们密切跟踪相关研究的最新进展并根据自己的认识对标准的算法结构作了一定的调整,最后采用通信与计算相互隐藏的异步运作模式成功将大部分的进程集合通信隐藏,从而克服的研发道路上最大的一块绊脚石。
超大规模线性方程组高性能求解系统具有以下三大特色:
1. 适用范围广
高性能求解系统采用了被July称为二十世纪最伟大10大算法之一的Krylov子空间算法,也是少数几个适用于超大规模线性方程组求解的算法之一。这决定了高性能求解系统不仅可求解经有限元方法推导出的刚度矩阵对称正定(SPD)的线性方程组,同时也可求解系数矩阵非对称的线性方程组。因此,无论对于科研还是实际应用中系数矩阵正定的线性方程组原则上都可求解,且对于矩阵结构无特殊要求。
2. 计算效能出色
高性能求解系统基于MPI+OpenMP+MIC架构开发的。整个系统对硬件资源的利用效率很高,达到了70%以上,充分利用了CPU的逻辑、控制能力以及MIC众核处理设备强大的计算能力。
3. 首次实现Krylov子空间算法的MIC加速
由于系统开采用了一种Krylov子空间算法,大量的全局集合通信不可避免,使得算法的天然并行性不是十分良好,这是由算法自身决定的。在不改变算法本质思想的前提下,对算法结构做了调整,并成功隐藏了集合通信时间。首次将此算法成功移植到CPU+MIC异构集群平台上。
超大规模线性方程组高性能求解系统开发完成后,太原理工大学工程数值计算团队在 &局部径向基函数配点法(Local RBSs colloction methods)求解高维偏微分方程&课题中使用该软件,仅利用3个计算节点(每个节点内配置2*IntelXeonE5-*IntelXeon Phi 7120P),在20秒之内完成了7维问题线性方程组的求解,4分钟之内完成了8维问题线性方程组(亿阶规模)的求解,而原有的求解工具最多只能完成6维问题的求解。这一突破大大加速了太原理工大学工程数值计算团队对更高维度未知世界探索的脚步。
据了解,国内在大规模线型方程组高性能求解系统的开发中一般求解规模在百万阶量级,对于亿阶规模矩阵的求解鲜有尝试。同时,国内外目前在大规模线型方程组高性能求解系统中一般采用的是CPU+GPU异构架构,本次浪潮是将大规模线型方程组算法首次成功移植到CPU+MIC异构集群平台上。
推荐阅读相关主题:
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章

我要回帖

更多关于 线性方程组求解 的文章

 

随机推荐