繁体   English   中英

如何从 emacs 组织模式八度音程源块内部调用函数

[英]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

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

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

这些方法都没有奏效。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM