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.0372
0.2869
0.6861
0.7071
0.6233
0.6245
0.6344
0.6170]; d = [
0.8587
0.1781
0.0747
0.8405]; [C\d
lsqnonneg(C,d)]
= -2.5627
0
3.1108
0.6929 [norm
(C*(C\
d)-d)norm(
C*l
sqnonneg(C,d)-d)]=
0.6674
0.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 |