MATLAB中ilu函数用法

目录

语法

说明

示例

不同类型的不完全 LU 分解

不完全 LU 分解的调降容差

使用 ilu 作为预条件子来求解线性系统


        ilu函数的功能是对矩阵进行不完全 LU 分解。

语法

[L,U] = ilu(A)
[L,U,P] = ilu(A)
W = ilu(A)
[___] = ilu(A,options)

说明

[L,U] = ilu(A) 用零填充执行稀疏矩阵 A 的不完全 LU 分解,并返回下三角矩阵 L 和上三角矩阵 U。

[L,U,P] = ilu(A) 还返回置换矩阵 P,并满足 L 和 U 是 P*A 或 A*P 的不完全因子。默认情况下,P 是用于不使用主元消去的不完全 LU 分解的单位矩阵。

W = ilu(A) 返回 LU 因子的非零值。输出 W 等于 L + U - speye(size(A))。

[___] = ilu(A,options) 使用结构体 options 指定的选项对 A 执行不完全 LU 分解。

        例如,通过将 options 的 type 字段设置为 "ilutp",您可以使用主元消去执行不完全 LU 分解。然后,通过将 milu 字段设置为 "row" 或 "col",可以指定保留修正不完全 LU 分解的行值总和或列值总和。这种选项组合返回置换矩阵 P,使得 L 和 U 是 "row" 选项的 A*P 的不完全因子(其中 U 是列置换的),或 L 和 U 是 "col" 的 P*A 的不完全因子(其中 L 是行置换的)。

[L,exitflag] = logm(A) 返回描述 logm 的退出条件的标量 exitflag:

示例

不同类型的不完全 LU 分解

        ilu 函数提供三种类型的不完全 LU 分解:零填充分解 (ILU(0))、Crout 版本 (ILUC),以及具有阈值调降和主元消去的分解 (ILUTP)。

        默认情况下,ilu 执行稀疏矩阵输入的零填充不完全 LU 分解。例如,求具有 7840 个非零值的稀疏矩阵的完全和不完全分解。其完全 LU 因子有 126,478 个非零值,其具有零填充的不完全 LU 因子有 7840 个非零值,与 A 的数量相同。

A = gallery("neumann",1600) + speye(1600);
n = nnz(A)n = 7840n = nnz(lu(A))n = 126478n = nnz(ilu(A))
n = 7840

        由于零填充分解能在其 LU 因子中保留输入矩阵的稀疏模式,因此分解的相对误差在 A 的非零元素模式中实质上为零。

[L,U] = ilu(A);
e = norm(A-(L*U).*spones(A),"fro")/norm(A,"fro")
e = 4.8874e-17

        然而,这些零填充因子的乘积并非原始矩阵的良好逼近。

e = norm(A-L*U,"fro")/norm(A,"fro")
e = 0.0601

        为了提高精确度,可以使用其他类型的具有填充的不完全 LU 分解。例如,使用具有 1e-6 调降容差的 Crout 版本。

options.droptol = 1e-6;
options.type = "crout";
[L,U] = ilu(A,options);

        不完全分解的 Crout 版本在其 LU 因子中具有 51,482 个非零值(少于完全分解)。在具有填充的情况下,不完全 LU 因子的乘积是原始矩阵的更好逼近。

n = nnz(ilu(A,options))
n = 51482
e = norm(A-L*U,"fro")./norm(A,"fro")
e = 9.3040e-07

        作为比较,对于相同的输入矩阵 A,具有阈值调降和主元消去的不完全分解将给出类似于 Crout 版本的结果。

options.type = "ilutp";
[L,U,P] = ilu(A,options);
n = nnz(ilu(A,options))
n = 51541
norm(P*A-L*U,"fro")./norm(A,"fro")
ans = 9.4960e-07

不完全 LU 分解的调降容差

        更改不完全 LU 分解的调降容差以分解稀疏矩阵。

        加载 west0479 矩阵,它是一个非对称的 479×479 实数值稀疏矩阵。使用 condest 估计该矩阵的条件数。

load west0479
A = west0479;
c1 = condest(A)
c1 = 1.4244e+12

        使用 equilibrate 改进矩阵的条件数。对原始矩阵 A 进行置换和重新缩放,以创建一个新矩阵 B = R*P*A*C,它具有更好的条件数且对角线元只有 1 和 -1。

[P,R,C] = equilibrate(A);
B = R*P*A*C;
c2 = condest(B)
c2 = 5.1036e+04

        指定选项以执行带有阈值调降和主元消去的 B 的不完全 LU 分解,保留行值总和不变。为了便于比较,首先将填充的调降容差指定为零,这将产生完全 LU 分解。

options.type = "ilutp";
options.milu = "row";
options.droptol = 0;
[L,U,P] = ilu(B,options);

        这种分解在逼近输入矩阵 B 时非常准确,但因子明显比 B 更稠密。

e = norm(B*P-L*U,"fro")/norm(B,"fro")
e = 1.0345e-16
nLU = nnz(L)+nnz(U)-size(B,1)
nLU = 19118
nB = nnz(B)
nB = 1887

        可以通过更改调降容差以获得不完全 LU 因子,这些因子更稀疏,但在逼近 B 时不太准确。例如,以下绘图显示了不完全因子的密度与输入矩阵的密度之比,以及不完全分解的相对误差,它们分别相对于调降容差的图。

ntols = 20;
tau = logspace(-6,-2,ntols);
e = zeros(1,ntols);
nLU = zeros(1,ntols);
for k = 1:ntolsoptions.droptol = tau(k);[L,U,P] = ilu(B,options);nLU(k) = nnz(L)+nnz(U)-size(B,1);e(k) = norm(B*P-L*U,"fro")/norm(B,"fro");
end
figure
semilogx(tau,nLU./nB,LineWidth=2)
title("Ratio of nonzeros of LU factors with respect to B")
xlabel("drop tolerance")
ylabel("nnz(L)+nnz(U)-size(B,1)/nnz(B)",FontName="FixedWidth")

如图所示:

figure
loglog(tau,e,LineWidth=2)
title("Relative error of the incomplete LU factorization")
xlabel("drop tolerance")
ylabel("$||BP-LU||_F\,/\,||B||_F$",Interpreter="latex")

如图所示:

        在此示例中,具有阈值调降的不完全 LU 分解的相对误差与调降容差处于相同的数量级(但不能保证一定会发生此情况)。

使用 ilu 作为预条件子来求解线性系统

        ​使用不完全 LU 分解作为 bicgstab 的预条件子来求解线性系统。

        加载 west0479,它是一个非对称的 479×479 实稀疏矩阵。

load west0479
A = west0479;

        定义b以使 Ax=b 的实际解是全为 1 的向量。

b = full(sum(A,2));

设置容差和最大迭代次数。

tol = 1e-12;
maxit = 20;

使用 bicgstab 根据请求的容差和迭代次数求解。指定五个输出以返回有关求解过程的信息:

  • x 是计算 A*x = b 所得的解。

  • fl0 是指示算法是否收敛的标志。

  • rr0 是计算的解 x 的相对残差。

  • it0 是计算 x 时所用的迭代次数。

  • rv0 是 ‖b−Ax‖ 的由每个二分之一迭代的残差历史记录组成的向量。

[x,fl0,rr0,it0,rv0] = bicgstab(A,b,tol,maxit); 
fl0
fl0 = 1
rr0
rr0 = 1
it0
it0 = 0

        bicgstab 未在请求的 20 次迭代内收敛至请求的容差 1e-12,因此 fl0 为 1。实际上,bicgstab 的行为太差,因此初始估计值 x0 = zeros(size(A,2),1) 是最佳解,并会返回最佳解(如 it0 = 0 所示)。

        为了有助于缓慢收敛,可以指定预条件子矩阵。由于 A 是非对称的,请使用 ilu 生成预条件子 M=L U。指定调降容差,以忽略值小于 1e-6 的非对角线元。通过指定 L 和 U 作为 bicgstab 的输入,求解预条件方程组 

options = struct("type","ilutp","droptol",1e-6);
[L,U] = ilu(A,options);
[x_precond,fl1,rr1,it1,rv1] = bicgstab(A,b,tol,maxit,L,U);
fl1
fl1 = 0
rr1
rr1 = 3.8661e-14
it1
it1 = 3

        在第三次迭代中,使用 ilu 预条件子产生的相对残差 rr1 小于请求的容差 1e-12。输出 rv1(1) 为 norm(b),输出 rv1(end) 为 norm(b-A*x1)。

        可以通过绘制每个二分之一迭代的相对残差来跟踪 bicgstab 的进度。绘制每个解的残差历史记录图,并添加一条表示指定容差的线。

semilogy((0:numel(rv0)-1)/2,rv0/norm(b),"-o")
hold on
semilogy((0:numel(rv1)-1)/2,rv1/norm(b),"-o")
yline(tol,"r--");
legend("No preconditioner","ILU preconditioner","Tolerance",Location="East")
xlabel("Iteration number")
ylabel("Relative residual")

如图所示:

提示

  • 此函数返回的不完全分解可用作通过迭代方法(例如 bicg、bicgstab 或 gmres)求解的线性系统的预条件子。​

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

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

相关文章

前端框架vBean admin

文章目录 引言I 数据库表设计1.1 用户表1.2 角色表1.3 菜单表II 接口引言 文档:https://doc.vvbin.cn/guide/introduction.html http://doc.vvbin.cn 仓库:https://github.com/vbenjs/vue-vben-admin git clone https://github.com/vbenjs/vue-vben-admin-doc 在线体验demo:…

【前段基础入门之】=>初识 HTML

文章目录 前言HTML的详情简介HTML 发展史HTML 入门1. HTML 标签元素2. HTML标签属性3. HTML的标准结构 总结 前言 在整个前端开发中,必须掌握的技术栈为: HTML ,CSS,JavaScript,它们三者,共同组成了前端开发…

JavaEE学习之--类和对象

💕粗缯大布裹生涯,腹有诗书气自华💕 作者:Mylvzi 文章主要内容:Java学习之--类和对象 类和对象 类的实例化: 1.什么叫做类的实例化 利用类创建一个具体的对象就叫做类的实例化! 当我们创建了…

简单的手机电脑无线传输方案@固定android生成ftp的IP地址(android@windows)

文章目录 abstractwindows浏览android文件环境准备客户端软件无线网络链接步骤其他方法 手机浏览电脑文件公网局域网everythingpython http.server 高级:固定android设备IP准备检查模块是否生效 windows 访问ftp服务器快捷方式命令行方式双击启动方式普通快捷方式映射新的网络位…

Kindle电子书下载功能关闭怎么办,借助calibre和cpolar搭建私有的网络书库公网访问

Kindle中国电子书店停运不要慌,十分钟搭建自己的在线书库随时随地看小说! 文章目录 Kindle中国电子书店停运不要慌,十分钟搭建自己的在线书库随时随地看小说!1.网络书库软件下载安装2.网络书库服务器设置3.内网穿透工具设置4.公网…

竞赛选题 基于深度学习的动物识别 - 卷积神经网络 机器视觉 图像识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

案例丨如何提升可视化分析能力?听听这两家企业怎么说

神策分析 2.5 版本正式发布经营分析能力以来,已有不少客户接入使用,并充分实现了可视化分析能力的提升。 本文将为大家分享两家客户的真实反馈,希望能够帮助您进一步了解神策经营分析的能力。 案例一:神策数据助力美篇打造公司级“…

基于Python+Pygame实现一个俄罗斯方块小游戏【完整代码】

俄罗斯方块,一款起源于上世纪80年代的经典电子游戏,凭借简单的规则和独特的魅力,一跃成为全球家喻户晓的经典。你知道其实只需要一些基础的编程知识,就可以自己实现它吗?今天,我们将使用Python的Pygame库&a…

第八天:gec6818arm开发板和Ubuntu中安装并且编译移植mysql驱动连接QT执行程序

一、Ubuntu18.04中安装并且编译移植mysql驱动程序连接qt执行程序 1 、安装Mysql sudo apt-get install mysql-serverapt-get isntall mysql-clientsudo apt-get install libmysqlclient-d2、查看是否安装成功,即查看MySQL版本 mysql --version 3、MySQL启动…

有了Spring为什么还需要SpringBoot呢

目录 一、Spring缺点分析 二、什么是Spring Boot 三、Spring Boot的核心功能 3.1 起步依赖 3.2 自动装配 一、Spring缺点分析 1. 配置文件和依赖太多了!!! spring是一个非常优秀的轻量级框架,以IOC(控制反转&…

@DateTimeFormat 和 @JsonFormat 的详细研究

关于这两个时间转化注解,先说结论 一、介绍 1、DateTimeFormat DateTimeFormat 并不会根据得到其属性 pattern 把前端传入的数据转换成自己想要的格式,而是将前端的String类型数据封装到Date类型;其次它的 pattern 属性是用来规范前端传入…

python每日一题(模拟用户登录验证)

1、题目 预先设定正确用户名与密码,用来验证用户是否登录成功。 第一次: ① 输入用户名与密码,如果用户名与密码正确,则提示登录成功; ② 如果用户名错误(不管密码是否正确),则需要重…

TOGAF架构开发方法—初步阶段

本章描述了满足新企业体系结构业务指令所需的准备和启动活动,包括组织特定体系结构框架的定义和原则的定义。 一、目标 初步阶段的目标是: 确定组织所需的体系结构功能: 审查进行企业架构的组织背景确定受体系结构功能影响的企业组织的元素并确定其范围确定与架构功能相交的…

10分钟设置免费海外远程桌面

前言 本教程将向您介绍如何使用 Amazon Lightsail 服务的免费套餐轻松搭建属于您的远程桌面。依托于 Amazon 全球可用区,您可以在世界各地搭建符合您配置需求的远程桌面。 本教程需要先拥有亚马逊云科技海外账户。现在注册亚马逊云科技账户可以享受12个月免费套餐…

北工大汇编——综合题(2)

题目要求 编写一个比赛得分程序。共有7 个评委,按百分制打分,计分 原则是去掉一个最高分和一个最低分,求平均值。要求: 评委的打分以十进制从键盘输入。成绩以十进制给出,并保留 1位小数。输入输出时屏幕上要有相应提…

基于海康Ehome/ISUP接入到LiveNVR实现海康摄像头、录像机视频统一汇聚,做到物联网无插件直播回放和控制

LiveNVR支持海康NVR摄像头通EHOME接入ISUP接入LiveNVR分发视频流或是转GB28181 1、海康 ISUP 接入配置2、海康设备接入2.1、海康EHOME接入配置示例2.2、海康ISUP接入配置示例 3、通道配置3.1、直播流接入类型 海康ISUP3.2、海康 ISUP 设备ID3.3、启用保存3.4、接入成功 4、相关…

代码随想录算法训练营第二天(C) | 977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵

文章目录 前言一、977.有序数组的平方二、209.长度最小的子数组三、59.螺旋矩阵总结 前言 java版: 代码随想录算法训练营第二天 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵_愚者__的博客-CSDN博客 一、977.有序数组的平方 …

python实现命令tree的效果

把所有的文档都传到了git上,但是内容过多找起来不方便,突发奇想如果能在readme中,递归列出所有文件同时添加上对应的地址,这样只需要搜索到对应的文件点击就能跳转过去了… 列出文件总得有个显示格式,所以就按照tree的来了… 用python实现命令tree的效果 首先,这是tree的效果…

坐标休斯顿,TDengine 受邀参与第九届石油天然气数字化大会

美国中部时间 9 月 14 日至 15 日,第九届石油天然气数字化大会在美国德克萨斯州-休斯顿-希尔顿美洲酒店举办。本次大会汇聚了数百名全球石油天然气技术高管及众多极具创新性的数据技术方案商,组织了上百场硬核演讲,技术专家与行业从业者共聚一…

【unity小技巧】Unity 存储存档保存——PlayerPrefs、JsonUtility和MySQL数据库的使用

文章目录 前言PlayerPrefs一、基本介绍二、Demo三、优缺点 JsonUtility一、基本使用二、Demo三、优缺点 Mysql(扩展)完结 前言 游戏存档不言而喻,是游戏设计中的重要元素,可以提高游戏的可玩性,为玩家提供更多的自由和…