1. 程式人生 > >matlab norm向量和矩陣的範數

matlab norm向量和矩陣的範數

一、向量的範數

    首先定義一個向量為:a=[-568, -10]

1.1 向量的1範數

    向量的1範數即:向量的各個元素的絕對值之和,上述向量a1範數結果就是:29MATLAB程式碼實現為:norma1);

1.2 向量的2範數

       向量的2範數即:向量的每個元素的平方和再開平方根,上述a2範數結果就是:15MATLAB程式碼實現為:norma2);

1.3 向量的無窮範數

    向量的負無窮範數即:向量的所有元素的絕對值中最小的:上述向量

a的負無窮範數結果就是:5MATLAB程式碼實現為:norma-inf);
    向量的正無窮範數即:向量的所有元素的絕對值中最大的:上述向量a的負無窮範數結果就是:10MATLAB程式碼實現為:normainf);

二、矩陣的範數

    首先我們將介紹數學中矩陣的範數的情況,以矩陣A = [ -1 2 -34 -6 6] 為例。

2.1 矩陣的1範數

  矩陣的1範數即:矩陣的每一列上的元素絕對值先求和,再從中取個最大的,(列和最大),上述矩陣A1範數先得到[5,8,9],再取最大的最終結果就是:9MATLAB

程式碼實現為:normA1);

2.2 矩陣的2範數

  矩陣的2範數即:矩陣ATA的最大特徵值開平方根,上述矩陣A2範數得到的最終結果是:10.0623MATLAB程式碼實現為:normA2);

2.3 矩陣的無窮範數

     矩陣的無窮範數即:矩陣的每一行上的元素絕對值先求和,再從中取個最大的,(行和最大),上述矩陣A1範數先得到[616],再取最大的最終結果就是:16MATLAB程式碼實現為:normAinf);

   接下來我們要介紹機器學習的低秩,稀疏等一些地方用到的範數,一般有核範數,

L0範數,L1範數(有時很多人也叫1範數,這就讓初學者很容易混淆),L21範數(有時也叫2範數),F範數。上述範數都是為了解決實際問題中的困難而提出的新的範數定義,不同於前面的矩陣範數。

2.4 矩陣的核範數

    矩陣的核範數即:矩陣的奇異值(將矩陣svd分解)之和,這個範數可以用來低秩表示(因為最小化核範數,相當於最小化矩陣的秩——低秩),上述矩陣A最終結果就是:10.9287 MATLAB程式碼實現為:sum(svd(A))

2.5 矩陣的L0範數

   矩陣的L0範數即:矩陣的非0元素的個數,通常用它來表示稀疏,L0範數越小0元素越多,也就越稀疏,上述矩陣A最終結果就是:6

2.6 矩陣的L1範數

     矩陣的L1範數即:矩陣中的每個元素絕對值之和,它是L0範數的最優凸近似,因此它也可以表示稀疏,上述矩陣A最終結果就是:22MATLAB程式碼實現為:sum(sum(abs(A)))

2.7 矩陣的F範數

   矩陣的F範數即:矩陣的各個元素平方之和再開平方根,它通常也叫做矩陣的L2範數,它的有點在它是一個凸函式,可以求導求解,易於計算,上述矩陣A最終結果就是:10.0995MATLAB程式碼實現為:normA‘fro’

2.8 矩陣的L21範數

  矩陣的L21範數即:矩陣先以每一列為單位,求每一列的F範數(也可認為是向量的2範數),然後再將得到的結果求L1範數(也可認為是向量的1範數),很容易看出它是介於L1L2之間的一種範數,上述矩陣A最終結果就是:17.1559MATLAB程式碼實現為: norm(A(:,1),2) + norm(A(:,2),2) + norm(A(:,3),2)