compile 函数导入外部表达式后编译不了怎么办呢?
mathematica吧
全部回复
仅看楼主
level 2
K2大少 楼主
In[72]:= f = 5 - r^2 - r;
ff[r_] := 5 - r^2;
cf1 = Compile[{{r, _Real}}, f]
cf2 = Compile[{{r, _Real}}, ff[r]]
cf1[2]
cf2[2]
Out[74]= CompiledFunction[{11, 14., 5470}, {
Blank[Real]}, {{3, 0, 0}, {3, 0, 1}}, {{5, {2, 0,
0}}}, {0, 1, 4, 0, 0}, {{46,
Function[{r}, f], 3, 0, 0, 3, 0, 1}, {1}},
Function[{r}, f], Evaluate]
Out[75]= CompiledFunction[{11, 14., 5470}, {
Blank[Real]}, {{3, 0, 0}, {3, 0, 1}}, {}, {0, 0, 2, 0, 0}, {{47, ff,
3, 0, 0, 3, 0, 1}, {1}},
Function[{r},
ff[r]], Evaluate]
\:6B63\:5728\:8BA1\:7B97In[72]:= CompiledFunction::cfse: 被编译表达式 5-r-r^2 应该是一个 machine-size real number.
\:6B63\:5728\:8BA1\:7B97In[72]:= CompiledFunction::cfex: 在说明 1 中不能完成外部计算;继续未编译的计算.
Out[76]= 5 - r - r^2
Out[77]= 4.
2024年05月21日 11点05分 1
level 2
K2大少 楼主
2024年05月21日 12点05分 2
吧务
level 15
f = 5 - r^2 - r;
ff[r_] := 5 - r^2;
cf1 = Compile[{{r, _Real}}, f // Evaluate]
cf2 = Compile[{{r, _Real}}, ff[r] // Evaluate]
cf3 = Hold@Compile[{{r, _Real}}, ff[r]] /. DownValues@ff // ReleaseHold
对Compile感兴趣的话,请看看精品区《【教程】怎样编译/编译的通用规则/学会这6条,你也会编译》那帖。
嗯?你说最新的FunctionCompile能不能用?可以是可以,但是个人不太推荐,毕竟还是试验功能:
func = Function[Typed[arg, "Real64"],
Typed[DownValuesFunction[ff], {"Real64"} -> "Real64"][arg]];
funcComp = FunctionCompile[func]
速度倒是还可以的:
ff[2.] // RepeatedTiming
(* {9.6703*10^-7, 1.} *)
cf1[2.] // RepeatedTiming
(* {2.99034*10^-7, -1.} *)
funcComp[2.] // RepeatedTiming
(* {2.50344*10^-7, 1.} *)
2024年06月01日 03点06分 4
1