数值分析之上三角线性方程组求解

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

一、上三角回代求解算法

注意:本算法,只能求解上三角线性方程组。主要和高斯消去法(偏序选主元)、三角分解法(还要采用下三角前向替代算法)配合使用。

1.1 上三角回代思想

准备:在本章的算法中,为了求解线性方程组,我们首先将线性方程组写成AX=B的形式。(A是n×n的系数矩阵,X是n×1的未知数矩阵,B是n×1的值矩阵。)

1.1.1何为上三角矩阵,下三角矩阵?

答:简单来说,主对角线以下全0的就是上三角矩阵,主对角线以上全0的就是下三角矩阵。行列式的值为对角线元素相乘。

具体形式:

在这里插入图片描述

1.1.2 回代公式

总而言之:面对这类方程组就是由已知求未知,在第i行回代X[i+1:n],来求解X[i]。根据回代公式来计算X所有的解。下面给出回代公式证明过程。在这里插入图片描述

1.1.3 matlab算法

在这里插入图片描述

二、题目

2.1 题目

在一个上三角线性方程组基础上,进行线性方程组求解。

2.2 输入输出格式

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

【输出形式】每一行输出一个根

2.3 样例

输入

4
4 -1 2 3
0 -2 7 -4
0 0 6 5
0 0 0 3
20
-7
4
6

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

输出

[[ 3.]
[-4.]
[-1.]
[ 2.]]

输出说明:每行依次输出方程解:x1, x2, x3, x4。

2.4 思路和要点

回代过程中,让已知的X与对应的系数相乘时,可以采用numpy中的矩阵点乘函数np.dot()。但是该函数只能让两个形状相同的相乘,而对固定形状矩阵A截取出的矩阵,形状其实没有发生变化,无法相乘,这就要使用np.reshape()函数来重新定义截取出的矩阵形状。

2.5 代码

import numpy as np
def backsub(A,B,X): #上三角回代
    n = len(X)
    X[n-1] = B[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] = (B[i]-temp)/A[i,i]
    return X

def main():
    num = int(input())
    A = np.zeros([num,num],dtype = np.double)
    B = np.zeros([num,1],dtype = np.double)
    X = np.zeros([num,1],dtype = np.double)
    for i in range(num):
        A[i,:] = np.array(input().split(),dtype = np.double)
    for i in range(num):
        B[i] = np.array(input(),dtype = np.double)
    backsub(A,B,X)
    print(X)

if __name__ == '__main__':
    main()

2.6 结果

样例:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值