大家好,
我正在嘗試自動化非線性回歸例程,其中一部分涉及通過列公式創建自定義模型。
我想擁有任意數量的參數,我想我已經通過將適當格式化的列表轉儲到Parameter({})部分(“Parm_Start”)來解決這個問題。 我遇到的一個問題是我不知道如何在Match()中任意設置該術語。 我嘗試使用匹配格式的Match_List {}執行此操作,但它提供了奇數輸出。
其次,我試圖用“o”前指數項和“o”求和一系列指數,使用形式A [o] * exp(-t / t [o]) - 參見下面的代碼。 A是所有適合的參數,從列Mod_Parm中提取;時間是任意長度的列和自變量;和Timeconst是一個與Mod_Parm長度相同的列(兩者都比Time短)。
我沒有得到調用基於JSL的非線性建模例程的部分,因為需要先修復它。
謝謝!
Mod_Parm_list={};
Parm_start={};
Parm_list={};
Match_list={};
b=1;
for(m=1,m<=num_exp,m++,
Mod_Parm_list[m]="A"||char(m);
Parm_start[m]=parse("Parm_"||Mod_Parm_list[m]||" = -0.1");
Parm_list[m]="Parm_"||Mod_Parm_list[m];
Match_list[b]=Mod_Parm_list[m];
Match_list[b+1]=parse(Parm_list[m]);
b=b+2;
);
dt << NewColumn("I_model",Format ("Scientific"),Set Property( "Expand Formula", 1 ),
Formula
(Parameter(
{Parm_start},
I_DC - Summation(o=1,num_exp,
Match(:Mod_Parm,
"A1", Parm_A1,
"A2", Parm_A2,
"A3", Parm_A3,
"A4", Parm_A4,
"A5", Parm_A5,
"A6", Parm_A6
)*Exp(-:Time/:TimeConst[o])
)
)
)
);
對於後代,我想補充說,解決方案的一部分可以在這裡找到:
https://community.jmp.com/t5/Discussions/How-to-pass-a-variable-into-a-formula/td-p/52344
也就是說,我的部分問題是沒有將“I_DC”定義為表變量,並假設列公式將理解表達式。 這是該部分的更新:
I_DC = 3; //Using only this value in the column formula is wrong
dt = Current Data Table();
dt << set Table Variable( "I_DC_form", I_DC ); //Allows the parameter to be used later in the col formula expression
Mod_Parm_list={};
Parm_start={};
Parm_list={};
Match_list={};
b=1;
for(m=1,m<=num_exp,m++,
Mod_Parm_list[m]="A"||char(m);
Parm_start[m]=parse("Parm_"||Mod_Parm_list[m]||" = -0.1");
Parm_list[m]="Parm_"||Mod_Parm_list[m];
Match_list[b]=Mod_Parm_list[m];
Match_list[b+1]=parse(Parm_list[m]);
b=b+2;
);
dt << NewColumn("I_model",Format ("Scientific"),Formula(
Parameter(
{T1 = 1, T2 = 1, T3 = 1, T4 = 1, T5 = 1, T6=1},
:I_DC_form + T1 * Exp( -:Time / 0.004 ) + T2 * Exp( -:Time / 0.01 ) + T3 * Exp( -:Time / 0.1 )
+ T4 * Exp( -:Time / 1 ) + T5 * Exp( -:Time / 10 ) + T6 * Exp( -:Time / 100 ))
)
);