SparseLM Demo示例分析

2021-07-11 02:19:04 字數 2310 閱讀 4685

編譯好sparselm後,其中的第乙個demo是chained rosenbrock function,其方程式如下:

f1=10*(x[i]*x[i]-x[i+1])

f2=x[i]-1

這個方程在jorge的文章中也寫成:

在andrew的文章中又是:

而jan vlcek寫的是:

我不是學數學的,不知道怎麼還寫了這麼多種不同的樣子的方程;此處暫且按照demo中的樣子來分析吧。

首先還是看一下執行結果:

觀察其**,和levmar使用其實是非常類似;都從乙個迭代主函式sparse sparselm_dercrs()

呼叫另外兩個函式,乙個是描述測量值和引數直接的代數關係,乙個是用來描述雅克比矩陣;唯一的區別是,雅克比矩陣在此處是乙個稀疏矩陣,其儲存方式和之前的稠密矩陣有極大的不同。

從這段話可以看出,一共有行優先(crs)和列優先(ccs)兩種儲存方式(ps.突然想起來eigen的資料就是列優先格式進行儲存的)。

現在開始一行一行的看demo的**

/* chained rosenbrock function */

//必須是偶數,這裡如此寫是因為程式中判定偶數的方式導致的

#define mchrosen 10

#define nchrosen 2*(mchrosen-1)

int main()

//呼叫迭代函式

ret=sparselm_dercrs(chainedrosenbrock,//描述關係的函式指標

chainedrosenbrock_anjaccrs, //生成crs格式代數雅克比矩陣

p, //引數初值和結果儲存指標

null, //測量值,若是零向量就設為null

m, //引數個數

0, //引數中不能調整的值的個數

n, //觀測值個數

nnz,//雅克比矩陣中非零個數

-1, //j^t*j中非零個數,如果不知道就設為-1

1000, //最大迭代次數

opts, info, //配置引數

null

//這個引數是用來向程式中傳遞額外的資料的,沒有就設定為空);

//初始化的時候當i為奇數,p[i]=-1.2;當i為偶數,p[i]=1.0;

void chainedrosenbrock(double *p, double *hx, int m, int n, void *adata)

}//雅克比矩陣

//這個應該是預設的乙個函式

void chainedrosenbrock_anjaccrs(double *p, struct splm_crsm *jac, int m, int n, void *adata)

else

} //移動到雅克比矩陣末尾

jac->rowptr[n]=l;

}

以上大概就是整個的乙個**,demo中還提供了另外三個雅克比矩陣的函式,功能類似,變化在於儲存方式(crs、css)和稀疏矩陣賦值方式。

賦值方式還可以呼叫

extern

int splm_stm_nonzeroval(struct splm_stm *sm, int i, int j, double val);

相對於來說更為直觀。

關於其他細節,以後再學習。

關於上邊提到的非常重要的細節,首先拿到struct splm_crsm的定義:

struct splm_crsm;
舉個例子:

結構體中儲存的資料應該是如下的:

nr = 5,nc = 5;

nnz = 9;

val=

colidx=

rowptr=

6 4 3 分步分析(Evaluating)示例

6.4.3 分步分析 evaluating 示例 能這像這樣自信地使用高階函式,是需要一些時間的,尤其是巢狀使用。我們將研究前面清單中的 的地,通過跟蹤幾個樣本輸入。從抽象的問題 一般情況下這段 做什麼?到具體的問題 特定情況下這段 做什麼?通常可以幫助澄清真相。如果我們第一次輸入乙個無效的值,會發...

c 實現雪花分形的示例

c 都沒人用了嗎,網上想找個現成的雪花分形 都沒找見,有c 有python,有j a的,就沒有c 的程式設計客棧,自己試試寫乙個吧。public partial class form1 form private void form1 paint object sender,painteventarg...

php自動載入autoload機制示例分享

1,自定義函式 2,spl autoload register 複製 如下 liuyuan ebuinfo var www phpgcs php autoload ll rw rw r 1 liuyuan liuyuan 800 feb 19 11 39 func autoload.php rw r...