解线性方程组——最速下降法及图形化表示 | 北太天元 or matlab

一、思路转变

A为对称正定矩阵, A x = b Ax = b Ax=b

求解向量 x x x这个问题可以转化为一个求 f ( x ) f(x) f(x)极小值点的问题,为什么可以这样:

f ( x ) = 1 2 x T A x − x T b + c f(x) = \frac{1}{2}x^TAx - x^Tb + c f(x)=21xTAxxTb+c

可以发现:

∇ f = g r a d f = A x − b \nabla f = \mathrm{grad}f = Ax - b f=gradf=Axb

A A A的正定性可以保证 f ( x ) f(x) f(x)的驻点一定是极小值点。而 A x − b = 0 Ax - b = 0 Axb=0得到的就是 f ( x ) f(x) f(x)的驻点,即:

f ( x ∗ ) = min ⁡ f ( x ) ⇔ ∇ f ( x ∗ ) = A x ∗ − b = 0 f(x^{*}) = \min f(x) \quad \Leftrightarrow \quad \nabla f(x^{*}) = Ax^{*} - b = 0 f(x)=minf(x)f(x)=Axb=0

把解线性方程组的问题,转化为求函数 f ( x ) f(x) f(x)的极小值点。

二、最速下降法

怎么找到这个极小值点?

已知一个多元函数沿其负梯度方向函数值下降得最快。

一种较为形象的解释:

想象自己在半山腰上,要到山脚处:

  • 首先要找好下降方向:负梯度方向
  • 之后沿着选定方向直走
  • 走到不能再下降为止(也就是选定方向的最低点),停下来,再找新的下降方向
  • 重复上面的过程,便能到达山脚

翻译成数学语言

  • 给定任意初值 x 0 x_0 x0,计算残量 r 0 = b − A x 0 r_0 = b - Ax_0 r0=bAx0

  • 选择 P = r 0 P = r_0 P=r0为前进方向,计算:

    α = ( r 0 , r 0 ) ( A r 0 , r 0 ) , x 1 = x 0 + α r 0 \alpha = \frac{\left(r_0, r_0\right)}{\left(Ar_0, r_0\right)}, \quad x_1 = x_0 + \alpha r_0 α=(Ar0,r0)(r0,r0),x1=x0+αr0

  • 重复上面的过程。

算法如下:

三、北太天元 or matlab实现

最速下降法解线性方程组

function [x,k,r] = Gradient_Descent(A,b,x0,e_tol,N)% 最速下降法 解线性方程组% Input: A, b(列向量), x0(初始值),e_tol: error tolerant, N: 限制迭代次数小于 N 次             % Output: x , k(迭代次数), r%   Version:            1.0%   last modified:      2024/05/19n = length(b); k = 0; R = zeros(1,N); % 记录残差r = b - A*x0;x = zeros(n,N); % 记录每次迭代结果x(:,1) = x0;norm_r = norm(r,2); R(1) = norm_r;while norm_r > e_tol && k < Nalpha = r'*r/(r'*A*r);  % 计算步长x(:,k+2) = x(:,k+1) + alpha * r;r = b - A * x(:,k+2); % 残量norm_r = norm(r,2);R(k+2)=norm_r;k = k+1;endx = x(:,1:k+1); % 返回每次的迭代结果r = R(1:k+1);   % 返回每次的残差if k>Nfprintf('迭代超出最大迭代次数');elsefprintf('迭代次数=%i\n',k);end
end

四、数值算例

下面例子中统一 $ N=100,e_tol=10^{-8},x_0 = 0 $

例1

A x = b Ax=b Ax=b
A = [ 4 1 0 0 1 4 1 0 0 1 4 1 0 0 1 4 ] b = [ 6 25 − 11 15 ] A=\begin{bmatrix} 4 & 1 & 0 & 0 \\ 1 & 4 & 1 & 0 \\ 0 & 1 & 4 & 1 \\ 0 & 0 & 1 & 4 \end{bmatrix}\quad b= \begin{bmatrix} 6 \\ 25 \\ -11 \\ 15 \end{bmatrix} A= 4100141001410014 b= 6251115

用最速下降法求 x x x ;

实现

clc;clear all,format long;
N = 100; e_tol = 1e-8;
A = [4, 1, 0, 0; 1, 4, 1, 0;  0, 1, 4, 1; 0, 0, 1, 4];
b = [6; 25; -11; 15];
x0 = [0; 0; 0; 0];
[x11, k1, r11] = Gradient_Descent(A, b, x0, e_tol, N);
x_exact = gsem_column(A, b);% 作图查看误差变化
n = length(b);
k1 = k1 + 1;% 数值解
figure(1);
plot(1:k1, x11(1,:), '-*r', 1:k1, x11(2,:), '-og', 1:k1, x11(3,:), '-+b', 1:k1, x11(4,:), '-dk');
legend('x_1', 'x_2', 'x_3', 'x_4');
title('每个数值解的变化');% 残差变化
figure(2);
plot(1:k1, r11, '-*r');
legend('残差');
title('残差变化');

运行后得到


通过这个例子可以初步看到方法是可行的.

例2

下面这个例子我将形象展示最速下降法的实现特点

A = [3 1; 1 5];
b = [-1;1];
c = 0;

对应函数: f ( x , y ) = 1 2 ( 3 x 2 + 2 ⋅ 1 ⋅ x y + 5 y 2 ) − ( − x + y ) + 0 f(x,y)=\frac{1}{2}\left(3x^2+2\cdot1\cdot xy+5y^2\right)-(-x+y)+0 f(x,y)=21(3x2+21xy+5y2)(x+y)+0

三维表示一下

clc;clear all;format long;
A = [3  1; 1 5]; 
b = [-1;1];
c = 0; 
N = 100; e_tol = 1e-8; x0 =zeros(length(b),1);%x0 =[-0.1;-0.1]x = linspace(-1,1,100); 
y = linspace(-1,1,100);
% 网格化、方便作图
[x, y] = meshgrid(x,y);
% 定义函数 f(x) = 0.5 * x' * A * x - x'*b + c
% 为了作图方便,如下定义
f=@(x,y) 0.5 * (A(1,1) * x.^2 + 2 * A(1,2) * x .* y + A(2,2) * y.^2) - (b(1) * x + b(2) * y) + c;
z = f(x,y);mesh(x,y,z)
[x11,k1,r11] = Gradient_Descent(A,b,x0,e_tol,N);figure(1)
mesh(x,y,z)
hold on
% 绘制最速下降法的每次迭代点
%scatter3(x11(1, :), x11(2, :), f(x11(1,:),x11(2,:)),'r','filled');
plot3(x11(1, :), x11(2, :), f(x11(1,:),x11(2,:)),'r-o');xlabel('x');
ylabel('y');
zlabel('f(x, y)');
title('函数的三维表示');
hold off;

运行后得到

绘制等高线图

figure(2)
hold on 
contour(x,y,z,200)
plot(x11(1, :), x11(2, :), 'r-o');
title('最速下降法特点');
colorbar;

运行后得到


为了展示更清晰,将 $ x_0 $设为 [-0.2;0] ,可以得到这样的图像

由图形可以看出,最速下降法是如何下降的.

从某一点,选定最快的下降方向,下降到不能再下降为止,再重新找新的最快的下降方向.就这样依次进行下去.

由此可以看出最速下降法的优点是容易理解和实现较为简单.

当然也可以看出它还存在很大的改进空间,在每一次选方向时,明明有着更快更好的方向(三角形任意的第三边都更快).


以上图形均在北太天元软件中绘制,matlab同样可以正常运行。

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

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

相关文章

ZooKeeper安装

安装Zookeeper 1、下载Zookeeper安装包 打开链接选择一个版本进行下载 https://zookeeper.apache.org/releases.html2、上传Zookeeper安装包到集群 输入命令 scp apache-zookeeper-3.8.4-bin.tar.gz hadoop192.168.88.100:/tmp也可以使用xftp等上传&#xff0c;物理机用u盘…

Python 网格变换之平移、旋转、缩放、变换矩阵

网格变换 一、平移1.1、代码示例1.2、结果示例二、旋转2.1、代码示例2.2、结果示例三、缩放3.1、代码示例3.2、结果示例四、变换矩阵4.1、代码示例4.2、结果示例一、平移 网格平移:将网格沿着特定的方向移动一段距离。 1.1、代码示例

Android实现无线连接ADB调试

无线连接ADB(Android Debug Bridge)进行调试,是一种方便的远程调试方式,尤其适合在没有USB线或者设备物理接触不便的情况下使用。下面是如何设置无线ADB调试的步骤: 1. 准备工作 确保你的电脑和Android设备连接在同一局域网(Wi-Fi)下。 2. 在Android设备上操作 允许…

hadoop其中一个节点坏了,用其他节点克隆的教程+datanode正常显示,但master只有1个livenodes

如果一个slave出了非常棘手的问题&#xff0c;还是用其他slave克隆吧&#xff0c;很快的。 克隆教程&#xff1a; 1.克隆后只需要&#xff1a;sudo gedit /etc/network/interfaces&#xff0c;把ip地址改好。 2.ssh不需要重新设置&#xff0c;其他东西也都不需要重新进行设置…

linux日常运维2

下载linux离线安装包---- 利用 Downloadonly 插件下载 RPM 软件包及其所有依赖包 1. 先找个可以上网的linux操作系统&#xff0c;这里是以centos7操作系统为例&#xff0c;如果要使用centos6就先安装一个centos6的系统&#xff0c;然后让他可以上网&#xff0c;后面步骤如下 a.…

《精通Stable Diffusion AI绘画:基础技巧、实战案例与海量资源一站式学习》

随着人工智能技术的迅猛发展&#xff0c;AI绘画已经成为了一个炙手可热的话题。特别是在设计、艺术和创意领域&#xff0c;AI绘画工具的出现无疑为创作者们带来了更多的可能性和便利。《Stable Diffusion AI绘画从提示词到模型出图》这本书&#xff0c;就是一本深入解析Stable …

打包迁移Python env环境

打包迁移Python env环境 平常工作中可能遇到python虚拟环境迁移的场景&#xff0c;总结了如下几个方法。适用于同架构、相同类型系统之间的python虚拟环境迁移。 方法一&#xff1a;使用pip freeze和requirements.txt 这种方法将当前环境中的所有包记录到一个文件中&#xff0c…

恢复视频3个攻略:从不同情况下的恢复方法到实践!

随着科技的进步&#xff0c;我们的生活被各种各样的数字内容所包围&#xff0c;其中&#xff0c;视频因其独特的记录性质&#xff0c;承载着许多重要的资料。但不管是自媒体人还是普通人日常生活随手一拍&#xff0c;都会遇到误删视频的情况。为了帮助您找回手机视频&#xff0…

从零学爬虫:使用比如说说解析网页结构

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、网页结构概述 示例&#xff1a;查看网页结构 三、使用比如说说解析网页 1.…

windows10更改文件默认打开软件

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️感谢大家点赞&#x1f44d;&…

使用ollama + webui+docker 运行任意大模型

&#x1f3e1; Home | Open WebUI 如果您的计算机上有 Ollama&#xff0c;请使用以下命令&#xff1a; docker run -d -p 3000:8080 --add-hosthost.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/o…

【Vue】跨域问题解决

Vue列文章目录 【Vue】数据监测原理 【Vue】生命周期 【Vue】组件化编程 【Vue】组件用法 前言 … 目标 proxy代理的用法 #mermaid-svg-ZYJUqv8HPXLA3ecR {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZYJUqv8HPX…

纽曼硬盘隐藏文件丢失怎么恢复?介绍几种有效的方法

纽曼硬盘作为存储设备中的佼佼者&#xff0c;以其高性能和稳定性受到了广大用户的青睐。然而&#xff0c;在使用过程中&#xff0c;有时我们可能会遇到一些意想不到的问题&#xff0c;比如隐藏文件的丢失。这对于依赖这些文件进行工作或生活的人来说无疑是一个巨大的困扰。那么…

清华大学 | 机器人实验室 | 具身智能 | 科研实习生招聘

hi&#xff0c;我们实验室招实习生啦。欢迎简历投递~ 基本要求 1. 代码能力强&#xff0c;有公司实习经验者优先 2. 熟练掌握python语言、pytorch框架 3. 具备大模型调试或使用经历&#xff0c;掌握提示词编写技巧 4. 具备nlp、transformer构建调试经验 5. 了解机器人基础…

旋转矩阵00

题目链接 旋转矩阵 题目描述 注意点 将图像旋转 90 度不占用额外内存空间 解答思路 需要找到将图像旋转90度的规律&#xff0c;为了不占用额外内存空间&#xff0c;可以先将图像上下翻转&#xff0c;然后再将图像沿着主对角线进行翻转&#xff0c;得到的就是旋转90度之后的…

pdf打开方式怎么设置默认?分享这几种设置方法

pdf打开方式怎么设置默认&#xff1f;你是否曾遇到过打开PDF文档时&#xff0c;默认的打开程序并非你所需要的&#xff0c;从而影响了工作效率&#xff1f;别担心&#xff0c;本文将为你详细解读如何设置PDF的默认打开方式&#xff0c;让你的工作更加高效便捷。 首先&#xff0…

OrangePi AIpro 开箱初体验及语音识别样例

OrangePi AIpro 开箱初体验及语音识别样例 一、 前言 首先非常感谢官方大大给予这次机会&#xff0c;让我有幸参加此次活动。 OrangePi AIpro联合华为精心打造&#xff0c;采用昇腾AI技术路线&#xff0c;具体为4核64位处理器AI处理器&#xff0c;集成图形处理器&#xff0c;…

2951. 找出峰值

找出数组中的峰值 给你一个下标从 0 开始的数组 mountain 。你的任务是找出数组 mountain 中的所有 峰值。 以数组形式返回给定数组中 峰值 的下标&#xff0c;顺序不限 。 注意 峰值 是指一个严格大于其相邻元素的元素。数组的第一个和最后一个元素 不 是峰值。 示例 1 …

Nginx的Sub模块

Nginx 是一款高性能的 Web 服务器和反向代理服务器,其灵活的模块化设计使其成为许多开发者和运维人员的首选。其中,Sub 模块作为 Nginx 的一部分,提供了强大的字符串替换和正则匹配功能,本文将深入探讨 Sub 模块的用途、示例以及使用中需要注意的事项。 1. Sub 模块的用途…

汽车合面合壳密封UV胶固化后一般可以耐多少度的高温和低温? 汽车车灯的灯罩如果破损破裂破洞了要怎么修复?

汽车合面合壳密封UV胶固化后一般可以耐多少度的高温和低温? UV胶固化后的耐高温和低温能力取决于具体的UV胶水品牌和型号&#xff0c;以及固化过程中的条件。一般来说&#xff0c;高品质的UV胶水在固化后可以提供较好的耐温性能&#xff0c;但确切的耐温范围需要参考各个厂家提…