精华内容
下载资源
问答
  • 数值分析中直接三角分解法matlab程序 %直接三角分解法(1)function [x,y,L,U]=nalu(a,b)n=length(a);x=zeros(n,1);y=zeros(n,1);U=zeros(n,n);L=eye(n,n);U(1,:)=a(1,:);L(2:n,1)=a(2:n,1)/U(1,1);for k=2:nU(k,k:n)=...

    41528d3028836879cd698677c3999917.gif数值分析中直接三角分解法matlab程序

    %直接三角分解法(1)function [x,y,L,U]=nalu(a,b)n=length(a);x=zeros(n,1);y=zeros(n,1);U=zeros(n,n);L=eye(n,n);U(1,:)=a(1,:);L(2:n,1)=a(2:n,1)/U(1,1);for k=2:nU(k,k:n)=a(k,k:n)-L(k,1:k-1)*U(1:k-1,k:n);L(k+1:n,k)=(a(k+1:n,k)-L(k+1:n,1:k-1)*U(1:k-1,k))/U(k,k);endfor i=2:ny(1,1)=b(1,1);y(i,1)=b(i,1)-L(i,1:i-1)*y(1:i-1,1);endy(:,1);for i=n-1:-1:1x(n,1)=y(n,1)/U(n,n);x(i,1)=(y(i,1)-U(i,i+1:n)*x(i+1:n,1))/U(i,i);end x(:,1);clear all;clc;A=[1,2,3;2,5,2;3,1,5];b=[14;18;20];[x,y,L,U]=nalu(A,b);function [x,y,L,U]=sanjiao(a,b)n=length(a);x=zeros(n,1);y=zeros(n,1);L=eye(n,n);U=zeros(n,n); %L,U·Ö½âU(1,:)=a(1,:);L(2:n,1)=a(2:n,1)/U(1,1);for j=2:nU(j,j:n)=a(j,j:n)-L(j,1:j-1)*U(1:j-1,j:n);L(j+1:n,j)=(a(j+1:n,j)-L(j+1:n,1:j-1)*U(1:j-1,j))/U(j,j);end%Çó½â£¬ÁíUx=y,Ly=by(1,1)=b(1,1);for i=2:n y(i,1)=b(i,1)-L(i,1:i-1)*y(1:i-1,1);end x(n,1)=y(n,1)/U(n,n);for i=n-1:-1:1 x(i,1)=(y(i,1)-U(i,i+1:n)*x(i+1:n,1))/U(i,i);end clear all;a=[1,2,3;2,5,2;3,1,5];b=[14;18;20];[x,y,L,U]=sanjiao(a,b);xy

    展开全文
  • 数值分析中直接三角分解法matlab程序直接三角分解法 ( )% 1function [x,y,L,U] nalu (a,b)n length (a);x zeros(n,1);y zeros(n,1);U zeros(n,n);L eye (n,n);U (1,:) a (1,:);L (2:n,1) a (2:n,1)/U (1,1);fo...

    数值分析中直接三角分解法matlab程序

    直接三角分解法 ( )

    % 1

    function [x,y,L,U] nalu (a,b)

    n length (a);

    x zeros(n,1);y zeros(n,1);

    U zeros(n,n);L eye (n,n);

    U (1,:) a (1,:);

    L (2:n,1) a (2:n,1)/U (1,1);

    for k 2:n

    U (k,k:n) a (k,k:n)-L (k,1:k-1)*U (1:k-1,k:

    n);

    L (k+1:n,k) (a (k+1:n,k)-L (k+1:n,1:k-1)*U

    (1:k-1,k))/U (k,k);

    end

    for i 2:n

    y (1,1) b (1,1);

    y (i,1) b (i,1)-L (i,1:i-1)*y (1:i-1,1);

    end

    y (:,1);

    for i n-1:-1:1

    x (n,1) y (n,1)/U (n,n);

    x (i,1) (y (i,1)-U (i,i+1:n)*x (i+1:n,1))/U

    (i,i);

    end

    x (:,1);

    clear all;

    clc;

    A [1,2,3;2,5,2;3,1,5];

    b [14;18;20];

    [x,y,L,U] nalu (A,b);

    function [x,y,L,U] sanjiao (a,b)

    n length (a);

    x zeros(n,1);

    y zeros(n,1);

    L eye (n,n);

    U zeros(n,n);

    %L,U ·Ö½â

    U (1,:) a (1,:);

    L (2:n,1) a (2:n,1)/U (1,1);

    for j 2:n

    U (j,j:n) a (j,j:n)-L (j,1:j-1)*U (1:j-1,j:

    n);

    L (j+1:n,j) (a (j+1:n,j)-L (j+1:n,1:j-1)*U

    (1:j-1,j))/U (j,j);

    end

    %Çó½â£¬ÁíUx y,Ly b

    y (1,1) b (1,1);

    for i 2:n

    y (i,1) b (i,1)-L (i,1:i-1)*y (1:i-1,1);

    end

    x (n,1) y (n,1)/U (n,n);

    for i n-1:-1:1

    x (i,1) (y (i,1)-U (i,i+1:n)*x (i+1:n,1))/U

    (i,i);

    end

    clear all;

    a [1,2,3;2,5,2;3,1,5];

    b [14;18;20];

    [x,y,L,U] sanjiao (a,b);

    x

    y

    展开全文
  • 直接三角分解法

    2012-03-11 08:54:25
    数值分析 直接三角分解法,大学数值分析课程里的重要算法
  • C语言数据分析直接三角分解法.cpp
  • LU分解法,列主元三角分解法MATLAB代码,有详细注释,易于理解
  • LU分解法且是列主元三角分解法MATLAB代码,有详细注释,顺着思路看容易理解
  • 这是数值计算第二章的第四个程序---Doolittle直接三角分解法
  • Doolittl三角分解法

    2011-11-01 23:10:34
    追赶法即Doolittle三角分解法,用于求解对角线性方程组,程序运行成功
  • 列主元三角分解法在matlab中的实现.doc
  • 直接三角分解法 Matrix Factorization method ;LU 分解;LU 分解;LU 分解存在唯一性;PLU 分解;注;计算LU分解;计算LU分解;LU分解算法;例用矩阵的Doolittle分解解方程组;求解三对角方程组的追赶法 Thomas method for ...
  • 文章目录一、三角分解法1.1 三角分解法1.2 matlab算法二、题目2.1 题目2.2 输入输出格式2.3 样例输入输出2.4 思路和要点2.5 代码2.6 结果 一、三角分解法 问:高斯偏序选主元、上三角回代解法已经可以解一切线性...

    @数值分析之线性方程组AX=B求解

    一、三角分解法

    问:高斯偏序选主元、上三角回代解法已经可以解一切线性方程组,为什么还要三角分解法呢?
    答:如果是单独处理一个方程组,三角分解和高斯分解的区别只是,三角分解保存了分解因子但如果多次求解某个系数矩阵A相同,列矩阵B不同的方程组,就省去三角分解过程。同时A可以直接使用,节省了资源。

    1.1 三角分解法

    三角分解法:A = LU,AX=B,即LUX=B,令Y=UX,即LY=B,先前向替代求解Y,在回代求解X。该算法关键是将A拆分为下三角L(L(k,k)=1)和上三角U的矩阵乘,在分解A的过程中,将分解因子L、U保存在一个矩阵R中,只保存L的非0非1部分,U的非0部分。
    为了避免和高斯消去同样的问题,三角分解法也采用偏序选主元策略,只是在变换A的过程中,还要保存行变换信息

    1.2 matlab算法

    在这里插入图片描述

    二、题目

    2.1 题目

    为求解一个线性方程组,首先采用偏序选主元策略的三角分解法构造矩阵L,U和P,再用前向替换法对方程组LY=PB求解Y,最后用回代法对方程组UX=Y求解X。

    2.2 输入输出格式

    【输入形式】在屏幕上依次输入方阵阶数n,系数矩阵A和常数矩阵B。

    【输出形式】先输出LU分解结果,再输出方程解。

    2.3 样例

    输入

    4
    1 2 4 1
    2 8 6 4
    3 10 8 8
    4 12 10 6
    21
    52
    79
    82

    输入说明:输入:第1行为方阵阶数4,第2行至5行为系数矩阵A,第6行至9行为常数矩阵B。

    输出

    [[ 4. 12. 10. 6. ]
    [ 0.5 2. 1. 1. ]
    [ 0.25 -0.5 2. 0. ]
    [ 0.75 0.5 0. 3. ]]
    [[1.]
    [2.]
    [3.]
    [4.]]

    输出说明:第1至第4行输出LU分解结果,,第5行至第8行依次输出方程解:x1, x2, x3, x4。

    2.4 思路和要点

    (1)要注意,三角分解法与高斯消去不同。高斯分解采用偏序选主元时,是对[A|B]增广矩阵变换,而三角分解法只对A行交换。所以在A交换行时,要保存交换行索引,便于解下三角矩阵时,找到B中的对应行。
    (2)三角分解的核心在于构建这个分解因子——两个三角矩阵,在代码中,我将两个矩阵合在了一个矩阵中,也就是LU分解结果。只保存了上三角非0的部分和下三角中非1非0的部分。同时因为互不干扰,为了节省内存,可以将LU保存在A上。

    2.5 代码

    import numpy as np
    
    def lufact(A,R):
        n = len(A)
        for i in range(n):# 对i列处理
            row = np.argmax(abs(A[i:,i]))
            A[[i, row+i], :] = A[[i+row, i], :]
            R[i],R[row+i] = R[row+i],R[i]
            #因为交换的只是系数矩阵A的行,所以将A中行交换的信息保存,使得与B匹配
            #每次交换行并不影响X的值的顺序,保证了backsub时不用考虑行交换
            for k in range(i+1,n):  #对第k行处理
                m = A[k,i]/A[i,i]
                A[k,i] = m
                temp = m*A[i,i+1:]
                A[k,i+1:] =A[k,i+1:] -  temp
        return A
    
    def forsub(A,B,R,Y):#下三角前向替代
        n = len(Y)
        Y[0] = B[R[0]]
        for i in range(1,n):
            temp = np.reshape(A[i,0:i],(1,len(Y[0:i]))).dot(Y[0:i])
            Y[i] = B[R[i]]-temp
        return Y
    
    def backsub(A, X): #上三角回代求解
        #因为每一位处理后的Y都能得到对应位的x,所以可以在X矩阵中替换,节省资源
        n = len(X)
        X[n - 1] = X[n - 1] / A[n - 1, n - 1]
        for i in range(n - 2, -1, -1):
            temp = np.reshape(A[i, i + 1:], (1, len(X[i + 1:]))).dot(X[i + 1:])
            # 截断的A虽然看似可以和X想点乘,但是程序会判断为形状不同,所以要重新赋予形状
            X[i] = (X[i] - temp) / A[i, i]
        return X
        
    def main():
        n = int(input())
        A = np.zeros([n,n],dtype = np.double)
        B = np.zeros([n,1],dtype = np.double)
        X = np.zeros([n,1],dtype = np.double)
        R = np.arange(n)  #A发生行交换后保存交换的行索引,使得与B匹配
        for i in range(n):
            A[i,:] = np.array(input().split(),dtype = np.double)
        for i in range(n):
            B[i] = np.array(input(),dtype = np.double)
        lufact(A,R)
        forsub(A,B,R,X)
        backsub(A,X)
        print(A)
        print(X)
        
    if __name__ == '__main__':
        main()    
    

    2.6 结果

    样例:
    在这里插入图片描述

    展开全文
  • 解方程组的直接法(2)__三角分解法_cpp源代码_数值计算 数值分析实验报告(四) 一. 实验名称: 解方程组的直接法(2) 二. 实验目的: 三角分解法 三. 题目:(验证用) 准确值为x1 = 3;x2 = -1;x3 = 0;x4 = 2 四....
  • Gauss消去法、列主元素消去法、Doolittle三角分解法c++程序,编写Gauss消去法类、列主元素消去法类、Doolittle三角分解法类,再通过run.cpp主程序调用,并且把求解的每一步都打印出来了。
  • Doolittle三角分解法,与上面的Guass列选主元消去法有着一些联系,至少前面的输入代码是差不多的:题目: 2、Doolittle三角分解法 [ 2 10 0 -3 ] [-3 -4 -12 13] [ 1 2 3 -4 ] [ 4 14 9 -13]

    此题目的直接三角分解法,与上面的Guass列选主元消去法有着一些联系,至少前面的输入代码是差不多的:题目:
    2、Doolittle三角分解法
    [ 2 10 0 -3 ]
    [-3 -4 -12 13]
    [ 1 2 3 -4 ]
    [ 4 14 9 -13]

                                                                                    有了前面的基础,这个题目就比较简单了,根据实验书给的算法,一步一步解决就OK了:
    1.输入矩阵的维数,接着输入矩阵A,再进行一行一列的计算
    2.计算u的第一行,再计算L的第一列....后面的就不多bb了,根据指导书上用一个循环就可以实现u的所有行的值,以及L的所有列的值.talk is cheap,let’s show my code. 下面上自己的代码(唯一的问题就是自己不会GUI图形编程,只怪当初懒,半途而废了..)
     Doolittle三角分解法代码:
                                                                      

    /********************************************
        > File Name: Doolittle.c
        > Author:chendiyang
        > School:WUST_CST_1501班
        > Myblog:www.chendsir.com
        > Mail:1441353519@qq.com 
        > Created Time: 2017年04月18日 星期二 9时15分56秒
     ************************************************************************/
    #include <stdio.h>
    #include <math.h>
    #define MAX 20
    
    int main()
    {
        int n;
        int i,j,k;
        int mi;
        double mx,tmp;
        static double a[MAX][MAX],b[MAX],x[MAX],y[MAX];
        static double l[MAX][MAX],u[MAX][MAX];
        printf("\n 输入方程组的维数:");//输入AX=b的维数
        scanf("%d",&n);
        if(n>MAX)
        {
            return 1;
         } 
         if(n<=0)
         {
            return 1;
         }
         //输入矩阵的值
         printf("\n请输入A矩阵的值:"); 
         for(i=0;i<n;i++)
           for(j=0;j<n;j++) 
             scanf("%lf",&a[i][j]);
          //输入L矩阵的对角线的值
          for(i=0;i<n;i++)
          l[i][i]=1;
          for(k=0;k<n;k++)
          {
          //计算u的第一行到第K行元素    
              for(j=k;j<n;j++)
              {
                  u[k][j]=a[k][j];
                  for(i=0;i<=k-1;i++)
                  u[k][j]-=(l[k][i]*u[i][j]);
                //  u[k][j]/=l[k][k];
              }
    
    
            //计算L的第一列到第K列元素
              for(i=k+1;i<n;i++)
              {
                 l[i][k]=a[i][k];
                 for(j=0;j<=k-1;j++)
                 l[i][k]-=(l[i][j]*u[j][k]);
                 l[i][k]/=u[k][k];
              }
    
          }
          //解方程组Ly=b
          for(i=0;i<n;i++)
          {
              y[i]=b[i];
              for(j=0;j<=i-1;j++)
              y[i]-=(l[i][j]*y[j]);
              //y[i]/=l[i][i];
          }
          //解方程组Ux=y
          for(i=n-1;i>=0;i--)
          {
              x[i]=y[i];
              for(j=i+1;j<n;j++)
              x[i]-=(u[i][j]*x[j]);
              x[i]/=u[i][i];
          }
          //输出运行结果 
              printf("solution is :\n");
              printf("矩阵L的值如下:\n");
              for(i=0;i<n;i++)
            {  
                printf("[");
                for(j=0;j<n;j++)
              {
                  printf("%lf ",l[i][j]);
              }
              printf("]\n");
            }
             printf("矩阵u的值如下:\n");
              for(i=0;i<n;i++)
            {  
                printf("[");
                for(j=0;j<n;j++)
              {
                  printf("%lf ",u[i][j]);
              }
              printf("]\n");
            }
              return 0;    
    
    }
                         我们的题目是这个:
    

    [ 2 10 0 -3 ]
    [-3 -4 -12 13]
    [ 1 2 3 -4 ]= L(单位下三角矩阵) *   U(上三角矩阵)
    [ 4 14 9 -13]
    运行结果如下图:
    这里写图片描述 
    如果我的算法没有问题的话,L和U的结果应该是正确的,会算的可以手算验证一下,我个人是不会的,虽然算法能看懂,但做题就难死我了,上课也没去听讲.实验一到此为止,是完成了,翘了好几节课,今天英语课被点名了,好衰啊,我本学期第一次翘就点,这运气没谁了...

    展开全文
  • %直接三角分解法1 function [x,y,L,U]=nalu(a,b) n=length(a; x=zeros(n,1;y=zeros(n,1; U=zeros(n,n;L=eye(n,n; U(1)=a(1; L(2:n,1)=a(2:n,1)/U(1,1; for k=2:n U(k,k:n)=a(k,k:n)-L(k,1:k-1*U(1:k-1,k:n; L(k+1:n,...
  • Python 方程组求解的三角分解法模块代码 模块 import numpy as np 代码 import numpy as np def matrix_deal(matrix): lens = len(matrix) # 创建两个全零的矩阵,大小与待求解矩阵相同 matrix_l = np.zeros(...
  • LU下三角分解法

    2013-05-11 15:34:07
    gauss分解法的下三角分解求矩阵的解,经典的doolittle算法
  • 三角分解法解线性方程组,有公式说明, 例题解法, 还有在的源程序,在软件madlab上运行
  • 【问题描述】为求解一个线性方程组,首先采用偏序选主元策略的三角分解法构造矩阵L,U和P,再用前向替换法对方程组LY=PB求解Y,最后用回代法对方程组UX=Y求解X。【输入形式】在屏幕上依次输入方阵阶数n,系数矩阵A和...
  • 第一篇:三角分解法(线性方程组求解) 【问题描述】为求解一个线性方程组,首先采用偏序选主元策略的三角分解法构造矩阵L,U和P,再用前向替换法对方程组LY=PB求解Y,最后用回代法对方程组UX=Y求解X。 【输入形式】...
  • 三角分解法(线性方程组求解)

    千次阅读 2020-04-15 13:45:46
    为求解一个线性方程组,首先采用偏序选主元策略的三角分解法构造矩阵L,U和P,再用前向替换法对方程组LY=PB求解Y,最后用回代法对方程组UX=Y求解X。 输入形式 在屏幕上依次输入方阵阶数n,系数矩阵A和常数矩阵B。 ...
  • 【问题描述】为求解一个线性方程组,首先采用偏序选主元策略的三角分解法构造矩阵L,U和P,再用前向替换法对方程组LY=PB求解Y,最后用回代法对方程组UX=Y求解X。 【输入形式】在屏幕上依次输入方阵阶数n,系数矩阵A...
  • 三角分解法求解线性方程组 【问题描述】为求解一个线性方程组,首先采用偏序选主元策略的三角分解法构造矩阵L,U和P,再用前向替换法对方程组LY=PB求解Y,最后用回代法对方程组UX=Y求解X。 【输入形式】在屏幕上依次...
  • Gauss消元之直接三角形分解法基本介绍若能通过正交变换,将系数矩阵A分解为A=LU,其中L是单位下三角矩阵(主对角线元素为1的下三角矩阵),而...因此三角分解法的关键问题在于系数矩阵A的LU分解。矩阵能LU分解的充分条...
  • 矩阵三角分解法(LU分解)

    万次阅读 2018-01-13 16:52:42
    矩阵分解法是高斯消元法的变形,它的复杂度和高斯消元法一样都是O(n^3),但是矩阵分解法在处理线性方程组系(具有相同的系数矩阵,但是右端项不同的方程组)时,运算比较方便。  下面是矩阵分解原理的原理:   ...
  • 用列主元高斯消去法和列主元三角分解法解线性方程 【目的和意义】 高斯消去法是一个古老的求解线性方程组的方法,但由它改进得到的选主元的高斯消去法则是目前计算机上常用的解低阶稠密矩阵方程组的有效方法。 用...
  • * 一、直接法概述 直接法是将原方程组化为一个或若干个三角形 方程组的方法,共有若干种. 对于线性方程组 其中 系数矩阵 未知量向量 常数项 根据Cramer...则 都是三角 形方程组 上述方法称为直接三角形分解法 §2...
  • 最近数值计算学了Guass列主消元法和三角分解法解线性方程组,具体原理如下: 1、Guass列选主元消去法对于AX=B 1)、消元过程:将(A|B)进行变换为,其中是上三角矩阵。即: k从1到n-1 a、列选主元 选取第k列...
  • 1. 矩阵三角分解法 实现代码 2. LU分解 2.1 基本步骤 2.2 LU分解的计算公式 2.3 LU分解的结果表示 实现代码 3. 选主元的LU分解 3.1 基本原理 3.2 算法过程描述 实现代码 4. 对称正定矩阵的Cholesky分解 4.1 基本原理...
  • 解线性方程组地矩阵三角分解法* 第五章解线性方程组的直接方法 计算方法 —— 矩阵三角分解法 * 本讲内容 一般线性方程组 LU 分解与 PLU 分解 对称正定线性方程组 平方根法--Cholesky 分解 对角占优三对角线性方程...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,250
精华内容 6,500
关键字:

三角分解法