【数值分析】高斯-赛德尔方法、规范化幂法、原点移位法

【数值分析】高斯-赛德尔方法、规范化幂法、原点移位法

题目

要求

代码实现过程不能调用任何库函数自带的“线性 方程组求解、特征值求解库函数”

利用高斯-赛德尔方法求解上述线性方程组

使用Python编程求解矩阵A与列向量b

import numpy as np
import sympy as spdef create_matrix(n = 12):"""计算n阶矩阵(n为偶数) n默认为12"""matrix = np.zeros((n, n))       # 初始化一个n*n矩阵# 填充矩阵for i in range(1, n+1):# 数组下标从0开始 matrix[i-1, i-1] = 3            # 主对角元元素if i < n:matrix[i-1, i] = -1         # 超对角元元素if i > 1:matrix[i-1,i-2] = -1        # 次对角元元素if i != n/2 and i != n/2 + 1:matrix[i-1, n-i] = 1/2      # 副对角元元素return matrixprint("--------- 矩阵A ---------")
matrix_A = create_matrix()
print(matrix_A)# 将 numpy 数组转换为 sympy 矩阵
# sympy_matrix_A = sp.Matrix(matrix_A)
# latex_A = sp.latex(sympy_matrix_A)
# print(latex_A)def create_matrix_b(n = 12):"""计算n维列向量b(n为偶数) 默认n=12 """matrix_b = np.zeros((n, 1))         # 初始化一个n*1矩阵matrix_b[0, 0] = 2.5matrix_b[-1, 0] = 2.5for i in range(1, n-1):matrix_b[i, 0] = 1.5matrix_b[n//2-1, 0] = 1             # 整除 有效索引matrix_b[n//2, 0] = 1               # 整除 有效索引return matrix_bprint("-----------向量 b-----------------")
matrix_b = create_matrix_b()
print(matrix_b)# 将 numpy 数组转换为 sympy 矩阵
# sympy_matrix_b = sp.Matrix(matrix_b)
# latex_b = sp.latex(sympy_matrix_b)
# print(latex_b)
# 

运行上述程序,可得

高斯—赛德尔方法求解上述线性方程组


def gauss_seidel(A, b, x0, tol=1e-5, max_iter=100):"""高斯-赛德尔迭代法求解线性方程组 Ax = b参数:\nA           -- 系数矩阵\nb           -- 常数列向量\nx0          -- 初始解向量\ntol         -- 容忍误差(误差限)\nmax_iter    -- 最大迭代次数(防止不收敛)\n返回:x           -- 迭代得到的解向量n           -- 迭代次数"""D = np.diag(np.diag(A))                 # 主对角元矩阵L = -np.tril(A, -1)                     # 下三角矩阵(不包含主对角元) lower triangular matrixU = -np.triu(A, 1)                      # 上三角矩阵(不包含主对角元) upper triangular matrixB = np.linalg.inv(D-L) @ U              # 迭代矩阵# print(np.round(B, 4))# print(sp.latex(sp.Matrix(np.round(B, 4))))f = np.linalg.inv(D-L) @ bx = x0.copy()                           # 复制初始解向量for iter_num in range(max_iter):x_new = B @ x + f# 检查是否满足容忍误差if np.linalg.norm(x_new - x, np.inf) < tol:n = iter_num                    # 迭代次数return x_new, nx = x_new  # 更新解向量print("不收敛")# 调用函数A = create_matrix()         
b = create_matrix_b()x0 = np.zeros((12, 1))
x, n = gauss_seidel(A, b, x0)
print("迭代次数为: {},近似解为{}".format(n, x))

计算结果

规范化幂法求解迭代矩阵的模最大特征值

def normalized_power_method(A, x0, tol=1e-5, max_iter=100):"""规范化幂法求解矩阵A的按模最大特征值参数:\nA           -- 迭代矩阵\nx0          -- 初始非零向量\ntol         -- 容忍误差(误差限)\nmax_iter    -- 最大迭代次数(防止不收敛)\n返回:lambda_max  -- 模最大特征值\nx           -- 迭代得到的特征向量\nn           -- 迭代次数\n"""x = x0.copy()for iter_num in range(max_iter):m = np.linalg.norm(x, np.inf)x /=  m                                     # 归一化x_new = A @ x# 检查是否满足误差限if np.linalg.norm((x_new / np.linalg.norm(x_new, np.inf) - x), np.inf) < tol:lambda_max = np.linalg.norm(x_new, np.inf)return lambda_max, x, iter_numx = x_newprint("不收敛")# 调用函数
A = create_matrix()
D = np.diag(np.diag(A))                 # 主对角元矩阵
L = -np.tril(A, -1)                     # 下三角矩阵(不包含主对角元) lower triangular matrix
U = -np.triu(A, 1)                      # 上三角矩阵(不包含主对角元) upper triangular matrixB = np.linalg.inv(D-L) @ U              # 迭代矩阵x0 = np.ones((12, 1))
lambda_max, x, n = normalized_power_method(B, x0)
print("迭代矩阵模最大特征值: ",lambda_max)
print("模最大特征值的近似解: ", x)
print("迭代步数: ", n)

计算结果

原点移位法加速

# origin accelerate
def origin_acc_normalized_power_method(A, x0, lambda_0, tol=1e-5, max_iter=1000):"""使用原点平移法的加速算法\n规范化幂法求解矩阵A的按模最大特征值参数:\nA           -- 迭代矩阵\nx0          -- 初始非零向量\nlambda_0    -- 试算参数\ntol         -- 容忍误差(误差限)\nmax_iter    -- 最大迭代次数(防止不收敛)\n返回:lambda_max  -- 模最大特征值\nx           -- 迭代得到的特征向量\nn           -- 迭代次数\n"""A = A - lambda_0 * np.eye(12)x = x0.copy()list = []for iter_num in range(max_iter):m = np.linalg.norm(x, np.inf)x /=  m                                     # 归一化x_new = A @ xlist.append(np.linalg.norm(x_new, np.inf) + lambda_0)# 检查是否满足误差限if np.linalg.norm((x_new / np.linalg.norm(x_new, np.inf) - x), np.inf) < tol:lambda_max = np.linalg.norm(x_new, np.inf)for item in list:print(item)return lambda_max + lambda_0, x, iter_numx = x_newprint("不收敛")A = create_matrix()
D = np.diag(np.diag(A))                 # 主对角元矩阵
L = -np.tril(A, -1)                     # 下三角矩阵(不包含主对角元) lower triangular matrix
U = -np.triu(A, 1)                      # 上三角矩阵(不包含主对角元) upper triangular matrixB = np.linalg.inv(D-L) @ U              # 迭代矩阵x0 = np.ones((12, 1))
lambda_max, x, n = origin_acc_normalized_power_method(B, x0, 0.1)
print("迭代矩阵模最大特征值: ",lambda_max)
print("模最大特征值的近似解: ", x)
print("原点移位法迭代步数: ", n)

运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/60960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CUDA】了解GPU架构

目录 一、初步认识 二、Fermi架构 三、Kepler 架构 3.1 动态并行 3.2 Hyper-Q 一、初步认识 SM&#xff08;Streaming Multiprocessors&#xff09;是GPU架构中非常重要的部分&#xff0c;GPU硬件的并行性就是由SM决定的。以Fermi架构为例&#xff0c;其包含以下主要组成…

64位程序调用32位dll解决方案

最近在做64位代码移植&#xff0c;发现很多老代码使用到了第三方的32位dll;而且这些第三方32位dll库已经年代久远&#xff0c;原开发商已不再了&#xff1b;所以急切的需要在64位主程序 中使用老的32位dll;查询很多解决方案 发现目前只有使用com 进程外组件的方法可以解决此问题…

【HOT100第五天】搜索二维矩阵 II,相交链表,反转链表,回文链表

240.搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 先动手写写最简单方法&#xff0c;二重循环。 class Solution { public:bool searchMa…

模板元函数应用:输出字符串。

看下面三个字符串&#xff0c;s1,s2,s3 &#xff1a; string s1 "逆天邪神";wstring s2 _t("焚星妖莲");_string s3 "焚绝尘"; 在控制台输出字符串&#xff0c;可能的一个方案是&#xff1a; void print_test(const wstring& s) {std::…

pytest | 框架的简单使用

这里写目录标题 单个文件测试方法执行测试套件的子集测试名称的子字符串根据应用的标记进行选择 其他常见的测试命令 pytest框架的使用示例 pytest将运行当前目录及其子目录中test_*.py或 *_test.py 形式的所有 文件 文件内的函数名称可以test* 或者test_* 开头 单个文件测试…

【C++】类和对象-深度剖析默认成员函数-上

> &#x1f343; 本系列为初阶C的内容&#xff0c;如果感兴趣&#xff0c;欢迎订阅&#x1f6a9; > &#x1f38a;个人主页:[小编的个人主页])小编的个人主页 > &#x1f380; &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 > ✌️ &#x1f91e; &#x1…

Web性能优化:从基础到高级

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Web性能优化&#xff1a;从基础到高级 Web性能优化&#xff1a;从基础到高级 Web性能优化&#xff1a;从基础到高级 引言 基础优…

当 docker-compose.yaml 文件部署时,Dify 线上版本升级过程

如果线上 Dify 是通过 docker-compose.yaml 文件部署的&#xff0c;那么当 Dify 版本升级时该如何操作呢&#xff1f;官方已经给出了 Docker compose 和 Source Code 两种方式。相对而言&#xff0c;前者更简单些&#xff0c;至少不需要安装依赖包和迁移数据库文件。为了更加具…

如何让手机ip变成动态

在数字化浪潮中&#xff0c;手机已成为我们日常生活中不可或缺的一部分。无论是浏览网页、使用社交媒体还是进行在线购物&#xff0c;手机都扮演着举足轻重的角色。然而&#xff0c;在享受网络带来的便利时&#xff0c;我们也需要关注网络安全和隐私保护。静态IP地址可能让手机…

vue3 如何调用第三方npm包内部的 pinia 状态管理库方法

抛砖引玉: 如果在开发vue3项目是, 引用了npm第三方包 ,而且这个包内使用了Pinia 状态管理库,那我们如何去调用 npm内部的 Pinia 状态管理库呢? 实际遇到的问题: 今天在制作npm包时遇到的问题,之前Vue2版本的时候状态管理库用的Vuex ,当时调用npm包内的状态管理库很简单,直接引…

Linux笔记---调试工具GDB(gdb)

1. gdb的概念 GDB&#xff0c;全称GNU Debugger&#xff0c;是一个功能强大的开源调试工具&#xff0c;广泛用于Unix和类Unix系统&#xff0c;以及Microsoft Windows和macOS平台。GDB允许开发者在程序执行过程中查看内部运行情况&#xff0c;帮助定位和修复程序中的错误。 gd…

编译器gcc/g++

gcc 只用来编译C g 编译C/C 1.预处理&#xff08;进行宏替换/去注释/条件编译/头文件展开等&#xff09; 先创建 code.c 文件 -E --> 从现在开始&#xff0c;进行程序的翻译&#xff0c;一旦预处理做完&#xff0c;就停下来 -o --> 表明 -o 后面的文件名称 code…

一.安装版本为19c的Oracle数据库管理系统(Oracle系列)

1.数据库版本信息&#xff1a; 版本信息&#xff1a; 或者直接由命令查出来&#xff1a; 2.操作系统的版本信息 3.安装包下载与上传 可以去oracle官网下载也可以从其他人的百度网盘链接中下载&#xff1a; 使用xftp工具或者其他的工具&#xff08;mobaxterm&#xff09;上传到l…

DimensionX 部署笔记

目录 生成视频用CogVideoX-5b-I2V 推理代码&#xff1a; DimensionX 生成视频用CogVideoX-5b-I2V 推理代码&#xff1a; 可以生成&#xff0c;从左向右旋转的&#xff0c;也可以生成从上往下旋转的&#xff1a; import torch from diffusers import CogVideoXImageToVideo…

uni-app移动端与PC端兼容预览PDF文件

过程遇到的问题 1、如果用的是最新的版本的pdfjs的话&#xff0c;就会报Promise.withResolvers 不是一个方法的错误&#xff0c;原因是Promise.withResolvers是ES15新特性&#xff0c;想了解可参考链接&#xff0c;这里的解决方案是将插件里的涉及到Promise.withResolvers的地…

Node.js | Yarn下载安装与环境配置

一、安装Node.js Yarn 是 Node.js 下的包管理工具&#xff0c;因此想要使用 Yarn 就必须先下载 Node.js。 推荐参考&#xff1a;Node.js | npm下载安装及环境配置教程 二、Yarn安装 打开cmd&#xff0c;输入以下命令&#xff1a; npm install -g yarn检查是否安装成功&…

开源TTS语音克隆神器GPT-SoVITS_V2版本地整合包部署与远程使用生成音频

文章目录 前言1.GPT-SoVITS V2下载2.本地运行GPT-SoVITS V23.简单使用演示4.安装内网穿透工具4.1 创建远程连接公网地址 5. 固定远程访问公网地址 前言 本文主要介绍如何在Windows系统电脑使用整合包一键部署开源TTS语音克隆神器GPT-SoVITS&#xff0c;并结合cpolar内网穿透工…

[Docker#11] 容器编排 | .yml | up | 实验: 部署WordPress

目录 1. 什么是 Docker Compose 生活案例 2. 为什么要使用 Docker Compose Docker Compose 的安装 Docker Compose 的功能 使用步骤 核心功能 Docker Compose 使用场景 Docker Compose 文件&#xff08;docker-compose.yml&#xff09; 模仿示例 文件基本结构及常见…

鸿蒙NEXT应用示例:切换图片动画

【引言】 在鸿蒙NEXT应用开发中&#xff0c;实现图片切换动画是一项常见的需求。本文将介绍如何使用鸿蒙应用框架中的组件和动画功能&#xff0c;实现不同类型的图片切换动画效果。 【环境准备】 电脑系统&#xff1a;windows 10 开发工具&#xff1a;DevEco Studio NEXT B…

【spring 】Spring Cloud Gateway 的Filter学习

介绍和使用场景 Spring Cloud Gateway 是一个基于 Spring Framework 5 和 Project Reactor 的 API 网关&#xff0c;它旨在为微服务架构提供一种简单而有效的方式来处理请求路由、过滤、限流等功能。在 Spring Cloud Gateway 中&#xff0c;Filter 扮演着非常重要的角色&#…