| 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 |  |