已经有网站了 怎么做app/网络营销的特点分别是
目录
语法
说明
示例
线性系统的迭代解
使用指定了预条件子的 pcg
提供初始估计值
使用函数句柄代替数值矩阵
pcg函数的功能是求解线性系统 - 预条件共轭梯度法。
语法
x = pcg(A,b)
x = pcg(A,b,tol)
x = pcg(A,b,tol,maxit)
x = pcg(A,b,tol,maxit,M)
x = pcg(A,b,tol,maxit,M1,M2)
x = pcg(A,b,tol,maxit,M1,M2,x0)
[x,flag] = pcg(___)
[x,flag,relres] = pcg(___)
[x,flag,relres,iter] = pcg(___)
[x,flag,relres,iter,resvec] = pcg(___)
说明
x = pcg(A,b) 尝试使用预条件共轭梯度法求解关于 x 的线性系统 A*x = b。如果尝试成功,pcg 会显示一条消息来确认收敛。如果 pcg 无法在达到最大迭代次数后收敛或出于任何原因暂停,则会显示一条包含相对残差 norm(b-A*x)/norm(b) 以及该方法停止时的迭代次数的诊断消息。
x = pcg(A,b,tol) 指定该方法的容差。默认容差是 1e-6。
x = pcg(A,b,tol,maxit) 指定要使用的最大迭代次数。如果 pcg 无法在 maxit 次迭代内收敛,将显示诊断消息。
x = pcg(A,b,tol,maxit,M) 指定预条件子矩阵 M 并通过有效求解关于 y 的方程组 来计算 x,其中
且
。该算法不显式形成 H。使用预条件子矩阵可以改善问题的数值属性和计算的效率。
x = pcg(A,b,tol,maxit,M1,M2) 指定预条件子矩阵 M 的因子,使得 M = M1*M2。
x = pcg(A,b,tol,maxit,M1,M2,x0) 指定解向量 x 的初始估计值。默认值为由零组成的向量。
[x,flag] = pcg(___) 返回一个标志,指示算法是否成功收敛。当 flag = 0 时,收敛成功。您可以将此输出语法用于之前的任何输入参数组合。如果指定了 flag 输出,pcg 将不会显示任何诊断消息。
[x,flag,relres] = pcg(___) 还会返回相对残差 norm(b-A*x)/norm(b)。如果 flag 为 0,则 relres <= tol。
[x,flag,relres,iter] = pcg(___) 还会返回计算出 x 时的迭代次数 iter。
[x,flag,relres,iter,resvec] = pcg(___) 还会在每次迭代中返回残差范数向量(包括第一个残差 norm(b-A*x0))。
示例
线性系统的迭代解
使用采用默认设置的 pcg 求解系数矩阵为方阵的线性系统,然后在求解过程中调整使用的容差和迭代次数。
创建一个随机对称稀疏矩阵 A。还要为 Ax=b 的右侧创建一个由 A 的行总和组成的向量 b,使得实际解 x 是由 1 组成的向量。
rng default
A = sprand(400,400,.5);
A = A'*A;
b = sum(A,2);
使用 pcg 求解 Ax=b。输出显示包括相对残差 ‖b−Ax‖/‖b‖ 的值。
x = pcg(A,b);
pcg stopped at iteration 20 without converging to the desired tolerance 1e-06
because the maximum number of iterations was reached.
The iterate returned (number 20) has relative residual 3.6e-06.
默认情况下,pcg 使用 20 次迭代和容差 1e-6,对于此矩阵,算法无法在 20 次迭代后收敛。然而,残差接近容差,因此算法可能只需更多迭代即可收敛。
使用容差 1e-7 和 150 次迭代再次求解方程组。
x = pcg(A,b,1e-7,150);
pcg converged at iteration 129 to a solution with relative residual 1e-07.
使用指定了预条件子的 pcg
检查使用指定了预条件子矩阵的 pcg 来求解线性系统的效果。
创建一个对称正定带状系数矩阵。
A = delsq(numgrid('S',102));
定义 b 作为线性方程 Ax=b 的右侧。
b = ones(size(A,1),1);
设置容差和最大迭代次数。
tol = 1e-8;
maxit = 100;
使用 pcg 根据请求的容差和迭代次数求解。指定五个输出以返回有关求解过程的信息:
-
x 是计算 A*x = b 所得的解。
-
fl0 是指示算法是否收敛的标志。
-
rr0 是计算的解 x 的相对残差。
-
it0 是计算 x 时所用的迭代次数。
-
rv0 是 ‖b−Ax‖ 的残差历史记录组成的向量。
[x,fl0,rr0,it0,rv0] = pcg(A,b,tol,maxit);
fl0
fl0 = 1
rr0
rr0 = 0.0131
it0
it0 = 100
由于 pcg 未在请求的 100 次迭代内收敛至请求的容差 1e-8,因此 fl0 为 1。
为了有助于缓慢收敛,可以指定预条件子矩阵。由于 A 是对称矩阵,请使用 ichol 生成预条件子 。通过指定 L 和 L' 作为 pcg 的输入,求解预条件方程组。
L = ichol(A);
[x1,fl1,rr1,it1,rv1] = pcg(A,b,tol,maxit,L,L');
fl1
fl1 = 0
rr1
rr1 = 8.0992e-09
it1
it1 = 79
在第 79 次迭代中,使用 ichol 预条件子产生的相对残差小于规定的容差 1e-8 。输出 rv1(1) 是 norm(b) 且 rv1(end) 是 norm(b-A*x1)。
现在,使用 michol 选项创建修正的不完全 Cholesky 预条件子。
L = ichol(A,struct('michol','on'));
[x2,fl2,rr2,it2,rv2] = pcg(A,b,tol,maxit,L,L');
fl2
fl2 = 0
rr2
rr2 = 9.9618e-09
it2
it2 = 47
该预条件子优于使用零填充不完全 Cholesky 分解为本例中的系数矩阵生成的预条件子,因此 pcg 能够更快地收敛。
通过绘制从初始估计值(迭代编号 0)开始的每次残差历史记录,可以查看预条件子如何影响 pcg 的收敛速度。为指定的容差添加一个线条。
semilogy(0:length(rv0)-1,rv0/norm(b),'-o')
hold on
semilogy(0:length(rv1)-1,rv1/norm(b),'-o')
semilogy(0:length(rv2)-1,rv2/norm(b),'-o')
yline(tol,'r--');
legend('No Preconditioner','Default ICHOL','Modified ICHOL','Tolerance','Location','East')
xlabel('Iteration number')
ylabel('Relative residual')
如图所示:
提供初始估计值
检查向 pcg 提供解的初始估计值的效果。
创建一个三对角稀疏矩阵。使用每行的总和作为 Ax=b 右侧的向量,使 x 的预期解是由 1 组成的向量。
n = 900;
e = ones(n,1);
A = spdiags([e 2*e e],-1:1,n,n);
b = sum(A,2);
使用 pcg 求解 Ax=b 两次:一次是使用默认的初始估计值,一次是使用解的良好初始估计值。对两次求解均使用 200 次迭代和默认容差。将第二种求解中的初始估计值指定为所有元素都等于 0.99 的向量。
maxit = 200;
x1 = pcg(A,b,[],maxit);
pcg converged at iteration 35 to a solution with relative residual 9.5e-07.
x0 = 0.99*e;
x2 = pcg(A,b,[],maxit,[],[],x0);
pcg converged at iteration 7 to a solution with relative residual 8.7e-07.
在这种情况下,提供初始估计值可以使 pcg 更快地收敛。
返回中间结果
还可以通过在 for 循环中调用 pcg 来使用初始估计值获得中间结果。每次调用求解器都会执行几次迭代,并存储计算出的解。然后,将该解用作下一批迭代的初始向量。
例如,以下代码会循环执行四次,每次执行 100 次迭代,并在 for 循环中每通过一次后均存储解向量:
x0 = zeros(size(A,2),1);
tol = 1e-8;
maxit = 100;
for k = 1:4[x,flag,relres] = pcg(A,b,tol,maxit,[],[],x0);X(:,k) = x;R(k) = relres;x0 = x;
end
X(:,k) 是在 for 循环的第 k 次迭代时计算的解向量,R(k) 是该解的相对残差。
使用函数句柄代替数值矩阵
通过为 pcg 提供用来计算 A*x 的函数句柄(而非系数矩阵 A)来求解线性系统。
使用 gallery 生成一个 20×20 正定三对角矩阵。上对角线和下对角线上的元素都是 1,而主对角线上的元素是从 20 递减到 1。预览该矩阵。
n = 20;
A = gallery('tridiag',ones(n-1,1),n:-1:1,ones(n-1,1));
full(A)
ans = 20×2020 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 19 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 1 18 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 1 17 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 1 16 1 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 1 15 1 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 1 14 1 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 1 13 1 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 1 12 1 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 1 11 1 0 0 0 0 0 0 0 0 0⋮
由于此三对角矩阵有特殊的结构,您可以用函数句柄来表示 A*x 运算。当 A 乘以向量时,所得向量中的大多数元素为零。结果中的非零元素对应于 A 的非零三对角元素。此外,只有主对角线具有不等于 1 的非零值。
表达式 Ax 变为:
结果向量可以写为三个向量的和:
在 MATLAB® 中,编写一个函数来创建这些向量并将它们相加,从而给出 A*x 的值:
function y = afun(x)
y = [0; x(1:19)] + ...[(20:-1:1)'].*x + ...[x(2:20); 0];
end
(该函数作为局部函数保存在示例的末尾。)
现在,通过为 pcg 提供用于计算 A*x 的函数句柄,求解线性系统 Ax=b。使用容差 1e-12 和 50 次迭代。
b = ones(20,1);
tol = 1e-12;
maxit = 50;
x1 = pcg(@afun,b,tol,maxit)
pcg converged at iteration 20 to a solution with relative residual 4.4e-16.
x1 = 20×10.04760.04750.05000.05260.05550.05880.06250.06660.07140.0769⋮
检查 afun(x1) 是否产生由 1 组成的向量。
afun(x1)
ans = 20×11.00001.00001.00001.00001.00001.00001.00001.00001.00001.0000⋮
局部函数
function y = afun(x)
y = [0; x(1:19)] + ...[(20:-1:1)'].*x + ...[x(2:20); 0];
end
预条件共轭梯度法
预条件共轭梯度法 (PCG) 旨在利用对称正定矩阵的结构。其他一些算法也可以对对称正定矩阵执行运算,但 PCG 在求解这些类型的方程组方面是最快和最可靠的 [1]。
提示
-
大多数迭代方法的收敛取决于系数矩阵的条件数 cond(A)。当 A 是方阵时,可以使用 equilibrate 来改进其条件数,它本身就能使大多数迭代求解器更容易收敛。但如果您随后会对经平衡处理的矩阵 B = R*P*A*C 进行因式分解,使用 equilibrate 还可以获得质量更好的预条件子矩阵。
-
可以使用矩阵重新排序函数(如 dissect 和 symrcm)来置换系数矩阵的行和列,并在系数矩阵被分解以生成预条件子时最小化非零值的数量。这可以减少后续求解预条件线性系统所需的内存和时间。
参考
[1] Barrett, R., M. Berry, T. F. Chan, et al., Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods, SIAM, Philadelphia, 1994.
相关文章:

MATLAB中pcg函数用法
目录 语法 说明 示例 线性系统的迭代解 使用指定了预条件子的 pcg 提供初始估计值 使用函数句柄代替数值矩阵 pcg函数的功能是求解线性系统 - 预条件共轭梯度法。 语法 x pcg(A,b) x pcg(A,b,tol) x pcg(A,b,tol,maxit) x pcg(A,b,tol,maxit,M) x pcg(A,b,tol,ma…...

Veritus netbackup 管理控制台无法连接:未知错误
节假日停电,netbackup服务器意外停机后重新开机,使用netbackup管理控制台无法连接,提示未知错误。 ssh连接到服务器,操作系统正常,那应该是应用有问题,先试一下重启服务器看看。重新正常关机,重…...

安全中心 (SOC) 与 网络运营中心 (NOC)
NOC 和 SOC 之间的区别 网络运营中心 (NOC) 负责维护公司计算机系统的技术基础设施,而安全运营中心 (SOC) 则负责保护组织免受网络威胁。 NOC 专注于防止自然灾害、停电和互联网中断等自然原因造成的网络干扰,而 SOC 则从事监控、管理和保护。 NOC 提…...

WPS使用越来越卡顿
UOS统信wps频繁的使用后出现卡顿问题,通过删除或重命名kingsoft文件缓存目录。 文章目录 一、问题描述二、问题原因三、解决方案步骤一步骤二步骤三 一、问题描述 用户在频繁的使用wps处理工作,在使用一段时间后,用户反馈wps打开速度慢&…...

吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.5-2.6
目录 第四门课 卷积神经网络(Convolutional Neural Networks)第二周 深度卷积网络:实例探究(Deep convolutional models: case studies)2.5 网络中的网络以及 11 卷积(Network in Network and 11 convoluti…...

C# 解决Excel边框样式无法复制问题及实现格式刷功能
目录 问题现象 范例运行环境 解决方案 剪贴板加特殊粘贴 自定义样式 直接赋值 完美方案 小结 问题现象 在运行数据表数据导出到 EXCEL 数据输出时遇到了一个问题,开发者设计了单行细线下边框的输出模板,如下图设计: 其中 <%syst…...

前端组件化开发
假设这个页面是vue开发的,如果一整个页面都是编写在一个vue文件里面,后期不好维护,会特别的庞大,那么如何这个时候需要进行组件化开发。组件化开发后必然会带来一个问题需要进行组件之间的通信。组要是父子组件之间通信࿰…...

异步操作实现线程池
文章目录 futureasyncpromisepackage task C11线程池实现 future 在C11标准库中,提供了一个future的模板类,它表示的是一个异步操作的结果,当在多线程编程中使用异步任务的时候,使用这个类可以帮助在需要的时候获取到对应的数据处…...

长期提供APX515/B原装二手APX525/B音频分析仪
Audio Precision APx515 是一款针对生产测试而优化的高性能音频分析仪。它因其速度、性能、自动化和易用性而成为一流的仪器。它具有卓越的性能,具有 –106 dB 的典型 THDN、1M 点 FFT 和 192k 数字 I/O,以及所有 APx 系列音频分析仪的一键式自动化和易用…...

【数据库差异研究】update与delete使用表别名的研究
目录 ⚛️总结 ☪️1 Update ♋1.1 测试用例UPDATE users as a SET a.age 111 WHERE a.name Alice; ♏1.2 测试用例UPDATE users as a SET a.age 111 WHERE name Alice; ♐1.3 测试用例UPDATE users as a SET age 111 WHERE a.name Alice; ♑1.4 测试用例UPDATE us…...

idea远程连接docker
idea远程连接docker docker、ubuntu、linux、远程连接、IntelliJ idea注意!本文中开启docker远程连接的方法只能在确定环境安全的内网中使用,不可在公网服务器设置,有极大安全风险! 注意!本文中开启docker远程连接的…...

Docker 安装 ClickHouse 教程
Docker 安装 ClickHouse 教程 创建目录 首先,创建必要的目录用于存放 ClickHouse 的配置、数据和日志文件。 mkdir -p /home/clickhouse/conf mkdir -p /home/clickhouse/data mkdir -p /home/clickhouse/log chmod -R 777 /home/clickhouse/conf chmod -R 777 /…...

过渡到内存安全语言:挑战和注意事项
开放源代码安全基金会 ( OpenSSF )总经理 Omkhar Arasaratnam 讨论了内存安全编程语言的演变及其为应对 C 和 C 等语言的局限性而出现的现象。 内存安全问题已存在五十多年,它要求程序员从内存管理任务中抽离出来。 Java、Rust、Python 和 JavaScript 等现代语言通…...

在Pycharm中安装Cv2
安装OpenCV: 在Terminal中,输入以下pip命令来安装OpenCV: pip install opencv-python pip install opencv-contrib-python 如果下载速度较慢,可以考虑使用国内的pip镜像源,如清华大学源: pip install openc…...

减少重复的请求之promise缓存池(构造器版) —— 缓存promise,多次promise等待并返回第一个promise的结果
减少重复的请求之promise缓存池 —— 缓存promise,多次promise等待并返回第一个promise的结果 背景简介 当一个业务组件初始化调用了接口,统一个页面多吃使用同一个组件,将会请求大量重复的接口 如果将promise当作一个普通的对象࿰…...

cdq+bitset处理高维偏序
高维偏序 CDQ分治 假设处理的区间为 [ l , r ] [l,r] [l,r] ,CDQ分治的过程: 如果 l ≥ r l\geq r l≥r ,返回。设区间中点为 m i d mid mid ,递归处理 [ l , m i d ] [l,mid] [l,mid] 和 [ m i d 1 , r ] [mid1,r] [mid…...

敏捷开发和传统开发,你更适合哪种?
时间:2024年 10月 03日 作者:小蒋聊技术 邮箱:wei_wei10163.com 微信:wei_wei10 音频:喜马拉雅 大家好,欢迎来到“小蒋聊技术”,我是小蒋!今天我们来聊聊两个开发模式的“对决”…...

python之with
with上下文管理是什么呢? 一般都是使用系统提供的一些with语句,列如我要去读取一些数据进行分析,就可以使用with open去读取某些数据,或者我要把一些图片给他保存到某些地方,可以用with给他写入。 上下午管理器with是…...

vue3 升级实战笔记
最近要将公司项目的移动端进行 vue3 的升级工作,就顺便记录下升级过程。 项目迁移的思路 我的想法是最小改动原则。 从 vue2.x 升级到 vue3,且使用 vue3 的 选项式 API。构建工具要从 vue-cli(webpack)升级到 vite。路由需要升级到…...

利用函数模块化代码实操 ← Python
【知识点】 ● 模块化可以使代码易于维护和调试,并且提高代码的重用性。 ● 函数可以用来减少冗余的代码并提高代码的可重用性。函数也可以用来模块化代码并提高程序的质量。 ● 在 Python 中,可以将函数的定义放在一个被称为模块的文件中,这种文件的后缀…...

Java高效编程(12):重写toString方法
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 尽管 Object 类提供了 toString 方法的默认实现,但它返回的字符串通常不是类的使用者想要看到的。默认返回的字符串格式是类名加上“”符号和哈希码的十六进制表示,例如 PhoneNu…...

谷歌给到的185个使用生成式AI的案例
很多公司从利用AI回答问题,进而使用AI进行预测,向使用生成式AI Agent转变。AI Agent的独特之处在于它们可以采取行动以实现特定目标,比如引导购物者找到合适的鞋子,帮助员工寻找合适的健康福利,或在护理人员交接班期间…...

程序员如何通过专业与软技能提升核心竞争力
一、引言 随着AIGC的兴起,AI辅助编程工具如chatgpt、midjourney、claude等接二连三地涌现,编程领域的变革正逐步深化。面对这一变革,程序员们对于未来工作的前景有着种种不同的担忧和期待。他们担心AI可能取代部分编程工作,同时…...

基于YOLOv8的智能植物监测机器人
摘要:针对传统的植物病害检测方法依赖专家的经验,耗时耗力,并且准确性受限于个人的水平等问题。文中提出无线通信模块采用HTTP协议来传输数据图片,采用SoC核心处理器实现了便携化,采用对射式红外避障传感器实现自动避障功能。以YOLOv8算法为控制核心,并添加注意力机制以提…...

2024年OpenAI DevDay发布实时 API、提示缓存等新功能
就在几天前,一些重要人物如前 CTO Mira Murati 离开了 OpenAI。因此,看到 Sam Altman 在 DevDay 上登台,讨论开发者的新产品,感觉有点奇怪。 随着公司内部的这些变化,你不禁会想:我们还应该信任他吗&#…...

Raspberry Pi3B+之安装bookworm+Rpanion系统
Raspberry Pi3B之安装bookwormRpanion系统 1. 源由2. 系统安装3. 系统安装3.1 烧录系统3.2 设备接线3.3 配置无线3.4 更新系统3.5 安装git3.6 克隆Rpanion3.7 安装Rpanion 4. 系统管理5. 附录问题1:error: externally-managed-environment问题2:bookworm…...

无人机专业除理论外,飞手执照、组装、调试实操技术详解
无人机专业的学习除了丰富的理论知识外,飞手执照的获取、无人机的组装与调试等实操技术也是至关重要的。以下是对这些方面的详细解析: 一、无人机飞手执照 1. 必要性 法规要求:根据《民用无人驾驶航空器系统驾驶员管理暂行规定》等相关法规…...

【网路通信基础与实践番外二】TCP协议的流量控制和拥塞控制以及二者区别和例题
TCP协议是端对端的协议,因此在数据进行传输的过程受发送方,数据通道,接收方三方状态的影响。我们用水龙头来比喻数据发送方,水管来比喻数据通道,水桶来表示数据接收方。 图(a)表示水桶太小,来不及接受注入…...

SpringBoot3+Vue3开发后台管理系统脚手架
后台管理系统脚手架 介绍 在快速迭代的软件开发世界里,时间就是生产力,效率决定成败。对于构建复杂而庞大的后台系统而言,一个高效、可定制的后台脚手架(Backend Scaffold)无疑是开发者的得力助手。 脚手架 后台脚…...

OpenFeign微服务部署
一.开启nacos 和redis 1.查看nacos和redis是否启动 docker ps2.查看是否安装nacos和redis docker ps -a3.启动nacos和redis docker start nacos docker start redis-6379 docker ps 二.使用SpringSession共享例子 这里的两个例子在我的一个博客有创建过程,…...