File: Calling-Octave-Functions-from-Oct_002dFiles.html

package info (click to toggle)
octave 6.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 124,192 kB
  • sloc: cpp: 322,665; ansic: 68,088; fortran: 20,980; objc: 8,121; sh: 7,719; yacc: 4,266; lex: 4,123; perl: 1,530; java: 1,366; awk: 1,257; makefile: 424; xml: 147
file content (143 lines) | stat: -rw-r--r-- 5,912 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Calling Octave Functions from Oct-Files (GNU Octave (version 6.2.0))</title>

<meta name="description" content="Calling Octave Functions from Oct-Files (GNU Octave (version 6.2.0))">
<meta name="keywords" content="Calling Octave Functions from Oct-Files (GNU Octave (version 6.2.0))">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<link href="index.html" rel="start" title="Top">
<link href="Concept-Index.html" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Oct_002dFiles.html" rel="up" title="Oct-Files">
<link href="Calling-External-Code-from-Oct_002dFiles.html" rel="next" title="Calling External Code from Oct-Files">
<link href="Accessing-Global-Variables-in-Oct_002dFiles.html" rel="prev" title="Accessing Global Variables in Oct-Files">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
kbd {font-style: oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: initial; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
-->
</style>
<link rel="stylesheet" type="text/css" href="octave.css">


</head>

<body lang="en">
<span id="Calling-Octave-Functions-from-Oct_002dFiles"></span><div class="header">
<p>
Next: <a href="Calling-External-Code-from-Oct_002dFiles.html" accesskey="n" rel="next">Calling External Code from Oct-Files</a>, Previous: <a href="Accessing-Global-Variables-in-Oct_002dFiles.html" accesskey="p" rel="prev">Accessing Global Variables in Oct-Files</a>, Up: <a href="Oct_002dFiles.html" accesskey="u" rel="up">Oct-Files</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<span id="Calling-Octave-Functions-from-Oct_002dFiles-1"></span><h4 class="subsection">A.1.8 Calling Octave Functions from Oct-Files</h4>

<p>There is often a need to be able to call another Octave function from within an
oct-file, and there are many examples of such within Octave itself.  For
example, the <code>quad</code> function is an oct-file that calculates the definite
integral by quadrature over a user-supplied function.
</p>
<p>There are also many ways in which a function could be given as input.  It might
be passed as one of
</p>
<ol>
<li> Function Handle

</li><li> Anonymous Function Handle

</li><li> String
</li></ol>

<p>The code below demonstrates all four methods of passing a function to an
oct-file.
</p>
<div class="example">
<pre class="verbatim">#include &lt;octave/oct.h&gt;
#include &lt;octave/parse.h&gt;

DEFMETHOD_DLD (funcdemo, interp, args, nargout, &quot;Function Demo&quot;)
{
  int nargin = args.length ();

  if (nargin &lt; 2)
    print_usage ();

  octave_value_list newargs;

  for (octave_idx_type i = nargin - 1; i &gt; 0; i--)
    newargs(i-1) = args(i);

  octave_value_list retval;

  if (args(0).is_function_handle () || args(0).is_inline_function ()
      || args(0).is_string ())
    retval = interp.feval (args(0), newargs, nargout);
  else
    error (&quot;funcdemo: INPUT must be string, inline, or function handle&quot;);

  return retval;
}
</pre></div>

<p>The first input to the demonstration code is a user-supplied function and the
remaining arguments are all passed to the function.
</p>
<div class="example">
<pre class="example">funcdemo (@sin, 1)
&rArr; 0.84147
funcdemo (@(x) sin (x), 1)
&rArr; 0.84147
funcdemo (&quot;sin&quot;, 1)
&rArr; 0.84147
funcdemo (@atan2, 1, 1)
&rArr; 0.78540
</pre></div>

<p>When the user function is passed as a string the treatment of the function is
different.  In some cases it is necessary to have the user supplied function as
an <code>octave_function</code> object.  In that case the string argument can be used
to create a temporary function as demonstrated below.
</p>
<div class="example">
<pre class="example">std::octave fcn_name = unique_symbol_name (&quot;__fcn__&quot;);
std::string fcode = &quot;function y = &quot;;
fcode.append (fcn_name);
fcode.append (&quot;(x) y = &quot;);
fcn = extract_function (args(0), &quot;funcdemo&quot;, fcn_name,
                        fcode, &quot;; endfunction&quot;);
&hellip;
if (fcn_name.length ())
  clear_function (fcn_name);
</pre></div>

<p>There are two important things to know in this case.  First, the number of
input arguments to the user function is fixed, and in the above example is a
single argument.  Second, to avoid leaving the temporary function in the Octave
symbol table it should be cleared after use.  Also, by convention all internal
function names begin and end with the character sequence &lsquo;<samp>__</samp>&rsquo;.
</p>
<hr>
<div class="header">
<p>
Next: <a href="Calling-External-Code-from-Oct_002dFiles.html" accesskey="n" rel="next">Calling External Code from Oct-Files</a>, Previous: <a href="Accessing-Global-Variables-in-Oct_002dFiles.html" accesskey="p" rel="prev">Accessing Global Variables in Oct-Files</a>, Up: <a href="Oct_002dFiles.html" accesskey="u" rel="up">Oct-Files</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>