基于c语言的lu分解算法,基于C语言实现大规模节点方程的LU分解算法.doc

基于C语言实现大规模节点方程的LU分解算法

基于C语言实现大规模节点

方程的LU分解算法

班级 : 0403205班

学号 : 040320510

姓名 : 邵汉钦

完成日期 : 2006-03-25

基于C语言实现大规模节点方程的LU分解算法

[实验目的及主要内容]

通过编程实现基于C语言的大规模节点方程的LU分解算法,熟悉在电路仿真中运用的节点分析法计算机实现过程,对算法的收敛性、效率、计算过程中节省内存的手段和重要性有清晰的认识,从而能更好地运用商用大规模仿真软件或自己动手编写仿真软件。

[实验原理]

对复杂网络所建立的节点方程组,常常是高阶线性方程组,所以说,对线性电路的稳态分析,最终可归结为高阶线性方程组得求解问题。

线性方程组的解法很多,一般可以分为两大类:直接法和迭代法。直接法是通过对方程组直接进行一系列的运算而得到方程的解;迭代法是一开始就给出一个近似的解,然后通过逐次逼近来求LAE较好的近似解,迭代过程要一直进行到近似解达到预定的精度为止(即收敛到精确解)。直接法的两个基本方法是高斯消元法和LU分解法,它们也是稀疏矩阵技术的基础。

LU分解是矩阵三角化分解法之一,也称三角分解法。它是把方程中的系数矩阵分解成下三角矩阵L和上三角矩阵U的乘积

A=LU

式中,L为主对角线以上的元素均为零的下三角矩阵;U为主对角线以下的元素均为零,且主对角线元素均为1的上三角矩阵。上式展开就是:

=

则方程变为: AX=LUX=B

一旦A分解成功,我们就可以设UX=Y,方程就变成一个下三角形系统LY=B,解此方程可以用所谓“前代”的方法,即从第1个方程求出,进而从第2个方程求出,依次类推,直到求出,,…,代入第n个方程求出。然后求解上三角系统UX=Y,这样就可以用回代的方法求出X来。

LU分解法的优点主要表现在当系数矩阵A不变,即只是网络元件参数 不变,仅仅是右手边向量B变化时,即外加激励信号变化时,可以减少解方程的计算工作量。因为一旦系数矩阵分解成L和U的乘积,就可以把L,U存储起来,每次右手边向量变化时,只需做前代和回代,即可完成方程的求解。它在灵敏度计算中需要求转置的方程组时也方便得多。

下面推导对A矩阵进行LU分解的方法。

在以上推导过程中得到下式:

=

将其按矩阵乘法展开,就可以推导出

L矩阵的第1列元素

U矩阵的第1行元素

L矩阵的第2列元素

U矩阵的第2行元素

若按此方式对列和行依次交换计算下去,最终即将求出 L和U矩阵的全部元素,其通用公式为:

以上公式给出了对A矩阵进行LU分解的基本方法,在此基础上就可以编程实现LU分解法解线性方程组。

[程序设计]

按以上公式可以归纳出如下的求解线性代数方程组得LU分解算法:

输入:A,非奇异矩阵n×n。

令m=1。

计算L的第m列:

若m=n,则分解结束。

计算U的第m行:

m=m+1,返回第2步。

前代:

回代:

LU分解法的计算工作量约为。

由上述步骤可以得出如下的程序流程图:

[程序源代码]

//********************************************************************************

//------------------------基于C语言实现大规模节点方程的LU分解算法---------------

//------------------------ 0403205班 040320510 邵汉钦 ---------------

//------------------------ 完成日期:2006年3月25日 ---------------

//********************************************************************************

//程序功能描述:

//设n元线性方程组的矩阵形式为 AX=B

//输入矩阵A和B,根据LU分解法求解方程组,得到矩阵X

//********************************************************************************

//---------------------------------------------------------------------------

#include

#pragma hdrstop

#include "Unit1.h"

#include

#include

#include

#in

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值