【问题标题】:How to call a function from inside an emacs org-mode octave source block如何从 emacs org-mode octave 源块内部调用函数
【发布时间】:2021-12-27 02:30:51
【问题描述】:

设置:Emacs 27.2/Org-mode 9.5/Octave 6.4/Win10

我有一个 octave 源块,它调用 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")

谁能告诉我如何正确地从 octave 源块内部调用外部函数?我的 org-mode 设置是否不足?

【问题讨论】:

    标签: emacs octave org-mode


    【解决方案1】:

    最简单的方法可能是使用:noweb yes 并为UseDyn 函数设置一个src 块。给那个 src 块起一个名字,例如usedyn。然后将该函数包含在主 src 块中,并在块的开头使用<<usedyn>>

    在调用ode45 时,您可能不需要或不希望将UseDyn 放在引号中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      相关资源
      最近更新 更多