数值分析:对系数矩阵与向量加扰动后求出解向量

这篇博客介绍了如何使用希尔伯特矩阵进行LU分解,并探讨了矩阵元素和向量元素微小扰动对解向量的影响。作者首先通过Python实现希尔伯特矩阵和LU分解,验证了分解的正确性。接着,通过增加或减少矩阵特定元素和向量元素,观察解向量的变化,得出结论:矩阵元素的微小扰动对解向量的影响大于向量元素的扰动。
摘要由CSDN通过智能技术生成

题目

在这里插入图片描述

思路

将高斯消去法改写为紧凑形式,可以直接从矩阵A的元素计算出L,U元素的递推公式,因此可以使A分解为L和U。利用LU分解法,求解Ax=b等价于求解Ly=b和Ux=y。
我定义了一个创建希尔伯特矩阵的函数,通过输入行数(列数)来输出一个n阶的希尔伯特矩阵。
为了验证LU分解的正确性,我写了一个矩阵乘积函数,来验证L,U乘积是否等于原来的希尔伯特矩阵。
然后根据题干所给的条件,定义一个创建向量b的函数,以求得b向量的数值。
再根据Ly=b和Ux=y,利用python里面的线性代数计算库scipy-linalg,给出L、b求出y,再给出U、y求出x。

过程

调用hilmat函数,创建希尔伯特矩阵。输出该矩阵。
在这里插入图片描述
调用写好了的LU分解函数,求得L,U矩阵。
在这里插入图片描述
调用矩阵乘积函数,求得L和U的乘积。输出,并与H矩阵比较,数值相同,证明分解成功。
在这里插入图片描述
调用创建向量b的函数。创建好向量b后,输出向量b。
在这里插入图片描述
接下来,根据Ly=b,Ux=y,调用linalg.solve函数,先后求得y向量和x向量。

(b)x向量即为希尔伯特矩阵n=6时的解向量。
在这里插入图片描述

(c)手动对希尔伯特矩阵做元素的扰动。分四种情况讨论。
1.a22和a66都增加pow(10,-7)时,解向量如下。
在这里插入图片描述
2.a22和a66都减少pow(10,-7)时,解向量如下。
在这里插入图片描述
3.a22增加pow(10,-7),a66减少pow(10,-7)时,解向量如下。
在这里插入图片描述

4.a22减少pow(10,-7),a66增加pow(10,-7)时,解向量如下。

在这里插入图片描述

(d)扰动分2种情况。
1.b6增加pow(10,-4)时,解向量如下。
在这里插入图片描述
2.b6减少pow(10,-4)时,解向量如下。
在这里插入图片描述

(e)结论:无论是A中元素的扰动,还是向量b元素的扰动,对解向量的值影响都很大。在A改变的元素与b改变的元素在同一个量级,且A元素扰动量级是b元素扰动量级的1/1000的条件下,两种情况造成的解向量的变化范围相当。因此相对而言,A中元素的扰动对解向量的影响更大。

代码

# -*- coding: utf-8 -*-
"""
Created on Wed Jul 15 17:09:33 2020

@author: uygfi
"""

import numpy as np
import math
from scipy import linalg 

def matrixMul(A, B):
    if len(A[0]) == len(B):
        res = [[0] * len(B[0]) for i in range(len(A))]
        for i in range(len(A)):
            for j in range(len(B[0])):
                for k in range(len(B)):
                    res[i][j] += A[i][k] * B[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值