| MATLAB Function Reference | ![]() |
Syntax
x = lsqnonneg(C,d) x = lsqnonneg(C,d,x0) x = lsqnonneg(C,d,x0,options) [x,resnorm] = lsqnonneg(...) [x,resnorm,residual] = lsqnonneg(...) [x,resnorm,residual,exitflag] = lsqnonneg(...) [x,resnorm,residual,exitflag,output] = lsqnonneg(...) [x,resnorm,residual,exitflag,output,lambda] = lsqnonneg(...)
Description
x = lsqnonneg(C,d)
傳回使 norm(C*x-d) 為最小值的向量 x,而 x >= 0。 C 及 d 必須為實數。
x = lsqnonneg(C,d,x0)
若所有 x0 >= 0, 則將其視為起始點;否則將使用預設值。預設的起始點為原點(當 x0==[ ] 或僅有兩個輸入參數時,也會使用預設值)。
x = lsqnonneg(C,d,x0,options)
依據最佳化參數 options 的結構使結果最小化。可藉 optimset 函式來定義此參數。 lsqnonneg 使用下述的 options 結構欄位:
Display |
顯示的 層級。'off' 表示沒有輸出 ;'final' 代表只顯示最後的輸出結果; 'notify' (預設值)代表如果函式不收歛時,則顯示其輸出。 |
TolX |
x
的端點誤差容忍度。 |
[x,resnorm] = lsqnonneg(...)
回傳餘下二次平方基準(squared 2-norm)的值: norm(C*x-d)^2。
[x,resnorm,residual] = lsqnonneg(...)
回傳剩下的數,即 C*x-d。
[x,resnorm,residual,exitflag] = lsqnonneg(...)
回傳 exitflag ,其敘述 lsqnonneg 函式的結束情況:
| >0 |
表示該函式收歛於結果 x。 |
| 0 |
代表重覆計數已經超過極限了。增加容忍度(options
中的 TolX 參數)可能可以求得解。 |
[x,resnorm,residual,exitflag,output] = lsqnonneg(...)
回傳一含有下述運算資訊的結構 output:
output.algorithm |
所使用的演算法 |
output.iterations |
所使用的重覆數字 |
[x,resnorm,residual,exitflag,output,lambda] = lsqnonneg(...)
回傳雙倍的向量 lambda,lambda(i)
<= 0 當 x(i) 為(近似於)0;lambda(i)
為(近似於)0 當 x(i) > 0。
Examples
以下是 lsqnonneg 函式對 4 * 2
矩陣問題的解:
C = [0.03720.28690.68610.70710.62330.62450.63440.6170]; d = [0.85870.17810.07470.8405]; [C\dlsqnonneg(C,d)]= -2.562703.11080.6929 [norm(C*(C\d)-d)norm(C*lsqnonneg(C,d)-d)]=0.66740.9118
函式 lsqnonneg
求出的解並沒有相當符合(有較大的剩餘)最短距離的解。然而,無負數的最短距離並沒有負數的成份。
Algorithm
lsqnonneg 使用 [1]
的演算法。此演算法起始於可能的群組基礎向量(basis vectors)並計算相關的雙倍向量 lambda。為了將基準和可能的其他選擇交換,其挑選基礎向量中於 lambda
對應的最大值,直到當 lambda <= 0 為止。
See Also
The arithmetic operator \, optimset
References
Lawson, C.L. and R.J. Hanson, Solving Least Squares Problems, Prentice-Hall, 1974, Chapter 23, p. 161.
| lscov | lsqr | ![]() |