如何从emacs.org模式倍频程源块内部调用函数



设置: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

我尝试过插入要处理的方程块的三种方式:

  1. 它自己的源代码块在这个之前。在主代码块之前执行
  2. 在主代码之前插入到主源代码块中。作为一个大块执行
  3. 进入主源代码块后的主代码

这些方法都不起作用。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置于引号中。

相关内容

  • 没有找到相关文章

最新更新