[英]How to call a function from inside an emacs org-mode octave source block
设置:Emacs 27.2/Org-mode 9.5/Octave 6.4/Win10
我有一个八度音程源块,它调用 ODE45 函数对某些数据进行集成(见下文)。
+BEGIN_SRC octave :output results
%Times
tdat = 1:1:100;
% Initial Conditions
m0 =150000;g0 =1.51;V0=150;H0=1000;X0=0;
y0=[m0 H0 X0 V0 g0];
options = odeset('RelTol',1e-7,'AbsTol',1e-10*ones(1,5));
% Call ODE45
[t,y] = ode45('UseDyn',tdat,y0,options);
% plot and store chart.png
plot(y(:,3),y(:,2));
print -dpng chart.png;
ans = "chart.png"
#+END_SRC
它需要调用函数 UseDyn.m,其中包含要被 ODE45 积分的初始数据和方程。
function [ydot]=UseDyn(t,y);
(four lines of equations)
end
我尝试通过三种方式插入要处理的方程块:
这些方法都没有奏效。 Octave 没有看到所需的函数,也没有在源目录中创建一个单独的文件。
我的 init 文件中的八度设置如下,其中 org-babel 设置为 (octave t):
(require 'ob-octave)
(add-to-list 'load-path "c:/Users/xxxx/Octave/mingw64/bin")
有人能告诉我如何从八度音程源块内部正确调用外部函数吗? 我的组织模式设置不够吗?
最简单的方法可能是使用:noweb yes
并为UseDyn
函数设置一个 src 块。 为该 src 块命名,例如usedyn
。 然后将该函数包含在主 src 块中,并在块的开头使用<<usedyn>>
。
在调用ode45
时,您可能不需要或不希望将UseDyn
放在引号中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.