解線性方程組——最速下降法及圖形化表示 | 北太天元 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)=21?xTAx?xTb+c

可以發現:

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

A A A的正定性可以保證 f ( x ) f(x) f(x)的駐點一定是極小值點。而 A x ? b = 0 Ax - b = 0 Ax?b=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?)=Ax??b=0

把解線性方程組的問題,轉化為求函數 f ( x ) f(x) f(x)的極小值點。

二、最速下降法

怎么找到這個極小值點?

已知一個多元函數沿其負梯度方向函數值下降得最快。

一種較為形象的解釋:

想象自己在半山腰上,要到山腳處:

  • 首先要找好下降方向:負梯度方向
  • 之后沿著選定方向直走
  • 走到不能再下降為止(也就是選定方向的最低點),停下來,再找新的下降方向
  • 重復上面的過程,便能到達山腳

翻譯成數學語言

  • 給定任意初值 x 0 x_0 x0?,計算殘量 r 0 = b ? A x 0 r_0 = b - Ax_0 r0?=b?Ax0?

  • 選擇 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= ?4100?1410?0141?0014? ?b= ?625?1115? ?

用最速下降法求 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+2?1?xy+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.pswp.cn/bicheng/17543.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17543.shtml
英文地址,請注明出處:http://en.pswp.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;但確切的耐溫范圍需要參考各個廠家提…