设置: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设置为(八度音阶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
置于引号中。