数值计算实验报告

您所在的位置:网站首页 高斯赛德尔迭代计算方法 数值计算实验报告

数值计算实验报告

2024-02-17 20:26| 来源: 网络整理| 查看: 265

 

 数值实验报告

 

----------------------个人作业,如果有后辈的作业习题一致,可以参考学习,一起交流,请勿直接copy

一、    实验目的

了解并分析LU分解法的优点; 追赶法的应用与其与LU分解法的对比; 认识迭代法收敛的含义以及迭代法初值和方程组系数矩阵性质对收敛速度的影响。

二、    实验题目

 

 

 

三、    实验原理

l  LU分解:

·如果对A(0)x = b(0)施行第一次消元后化为A(1)x = b(1),则存在L1,使得

L1A(0)=A(1),L1b(0)= b(1)

一般地,进行k次消元化后为A(k)x = b(k), 则有

LkA(k-1)=A(k),Lkb(k-1)= b(k)

                  

重复这一过程,最后得到

                            Ln-1…L2L1A(0) = A(n-1)

                            Ln-1…L2L1b(0) = b(n-1)

                     将上三角形矩阵A(n-1)记为U,则 A=LU ,其中

        

 

 

为下三角矩阵。利用高斯消元法实质上产生了一个将A分解为两个三角形矩阵相乘的因式分解,称为A的三角形分解或LU分解。

 

      ·矩阵分解不一定采用高斯消元法,以下为直接计算的计算公式:

 

 

把增广矩阵A 采用LU 分解格式,即可得到与原方程同解的方

程组。即 Ax=b ⇒ LUx = b ⇒  Ux= L−1b,由U为上三角矩阵,而后回代即可求出原方程的解。

 

l  追赶法:

 

求解Ax = b 等价于解两个二对角线方程组

                            Ly = b

                            Ux =y

自上而下解方程组Ly = b 形象地被称为“追”。

                                                        y1 = b1/l11

                            yi =bi-lii-1yi-1/lii,  i = 2, 3, … ,n

自下而上解方程组Ux = y 形象地被称为“赶”。

                                                        xn=yn

                            xi =yi-uii+1xi+1,  i = n-1, … ,2,1

习惯上,上述求解方法称为“追赶法”。

 

l  迭代法:

 

·雅克比迭代雅克比迭代法基本思想与迭代法相同是一种逐次逼近的方法。首先给定一个较粗糙的初值,然后采用迭代公式,进行多次迭代,直到满足所要求的精度为止。

 

 

·高斯-赛德尔迭代法基本思想基本与雅克比迭代法相同

 

 

四、    实验内容

 求矩阵A的LU分解的主函数如下:

  L = new double[n];

    U = new double[n];

 

    for (int i = 0; i < s; i++)

    {

        for (int j = 0; j < s; j++)

        {

            if (i == j)

                L[i*s+j] = 1;

            if (i < j)

                L[i*s+j] = 0;

            if (i > j)

                U[i*s+j] = 0;

 

            U[0*s+j] = a[0*s+j];

            L[i*s+0] = a[i*s+0] / U[0*s+0];

        }

    }

 

    for (int k = 1; k < s; k++)

    {

 

        for (int j = k; j < s; j++)

        {

            tmp = 0;

            for (int m = 0; m < k; m++)

            {

                tmp += L[k*s+m] * U[m*s+j];

            }

 

            U[k*s+j] = a[k*s+j] - tmp;

        }

 

        for (int i = k+1; i < s; i++)

        {

            tmp = 0;

            for (int m = 0; m < k; m++)

            {

                tmp += L[i*s+m] * U[m*s+k];

            }

 

            L[i*s+k] = ( a[i*s+k] - tmp ) / U[k*s+k];

        }

 

    }

 

――――――LU矩阵求逆矩阵的代码如下:

//L矩阵求逆

         for(int j=0;j



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3