name
¶name n
¶("name")
¶("name", n)
¶运行示例代码块n与函数关联name.
如果n未指定,则运行所有示例。
例如,代码块的首选位置嵌入在脚本文件中,紧挨着它执行的代码。或者,示例可以存储在Octave的加载路径上具有相同名称但没有扩展名的文件中。要将示例与常规脚本代码分开,所有行都以%!
.每个例子也必须从关键字介绍演示
用nointervening空格向左对齐前缀。该示例的其余部分可以包含arbitryOctave代码。例如
%!演示%!t=0:0.01:2*pi;%!x=sin(t);%!绘图(t,x);%!title(“正弦波的一个周期”);%!#------------------------------------------------------%!#图形窗口显示正弦波的一个周期
请注意,代码是在执行之前显示的,因此末尾的简单注释足以符号所显示的内容。对于绘图,也可以使用进行符号标题
或文本
。一般来说不必须使用disp
或输出函数
在演示中。
演示在独立的函数环境中运行,不能访问外部变量。这意味着每个演示都必须有单独的初始化代码。或者,可以将所有演示与代码组合成一个大型演示
%! input(“按<enter>继续:”,“s”);
在节之间,但不鼓励使用这种用法。作废多个初始化块的其他技术包括使用具有新的图形
每个绘图之间的命令,或使用子地块
在同一窗口中放置多个绘图。
最后,因为演示
在函数上下文中求值-不可能在代码中定义新函数。在大多数情况下,匿名函数是一个很好的替代品。如果函数块必须然后使用代码eval(示例(“函数”,n))
会让奥克塔韦托看到他们。然而,这也有其自身的问题,因为eval
一次只计算一行或一条语句。在这种情况下,函数语句必须用软件包如果1<demo-stuff>endif
这里的如果
与在同一条线上演示
例如
%!演示如果1%!函数y=f(x)%!y=x;%!endfunction%!f(3)%!endif
name
¶name n
¶("name")
¶("name", n)
¶[codestr, codeidx] =
example (…)
¶例如显示代码n与函数关联name,但不要运行它。
如果n未指定,则显示所有示例。
当使用输出参数调用时,示例以字符串的形式返回代码str具有codeidx指示了各种示例的结束位置。
有关完整解释,详见演示
.
()
¶(directory)
¶对指定的中的所有m文件执行内置测试目录.
任何C++源文件中的测试块(*.cc)也将执行以与动态链接的oct文件函数一起使用。
如果没有指定目录,请对Octave的函数搜索路径中的所有目录进行操作。
()
¶(directory)
¶为指定的中的所有m文件执行内置演示目录.
任何C++源文件中的演示块(*.cc)也将执行以与动态链接的oct文件函数一起使用。
如果没有指定目录,请对Octave的函数搜索路径中的所有目录进行操作。
(f, init, max_n, f2, tol)
¶[order, n, T_f, T_f2] =
speed (…)
¶确定表达式的执行时间(f)对于各种输入值(n).
这个n对数间距为1到最大_n.对于每个n,初始化表达式(初始化)计算以创建测试所需的任何数据。如果第二个表达式(f2)然后比较了这两个表达式的执行次数。当在没有输出参数的情况下调用时,结果将打印到stdout并以图形方式显示。
f
要计算的代码表达式。
最大_n
要运行的最大测试长度。默认值为100。或者,使用[最小值,最大值]
或指定n完全与[n1,n2,…,nk]
.
初始化
函数参数值的初始化表达式。使用k测试编号和n测试的大小。这应该计算使用的所有变量的值f。请注意初始化将首先评估k=0,所以在整个测试序列中不变的东西可以计算一次。默认值为x=随机(n1.
.
f2
一个可供选择的表达式进行评估,以便可以直接比较两个表达式的速度。默认为[]
.
tol
用于比较表达式结果的容差f和表达式f2如果tol是积极的,公差度是绝对的。如果tol是负的,公差是相对的。默认为eps
如果tol是Inf
,则不进行比较。
顺序
表达式的时间复杂性O(a*n^p)。这是一个带有字段的结构体a
和</p>
.
n
值n为其计算表达式以及执行时间大于零。
T_f
为表达式记录的非零执行时间f以秒为单位。
T_f2
为表达式记录的非零执行时间f2以秒为单位。如果需要,平均时间比简单地为平均值(T_f/T_f2)
.
执行时间图的斜率显示了症状运行时间的近似幂O(n ^p)该幂是为其近似的区域(图的后半部分)绘制的。估计的功率不是很准确,但应该足以确定算法的一般顺序。它应该表明,例如,实施是否出乎意料O(n^2)而不是O(n)因为它每次通过循环扩展一个向量,而不是预先赋值存储。在当前版本的Octave中,以下内容不是预期的O(n).
速度(“对于i=1:n,y{i}=x(i);endfor”,“”,[100010000])
但是如果你预先赋值了元胞数组y
:
速度(“对于i=1:n,y{i}=x(i);endfor”。。。“x=兰特(n,1);y=数组(大小(x));”,[100010000])
人们试图估算单个操作的成本,但这是极不准确的。你可以通过为每个人做更多的工作来提高稳定性n
例如
速度(“airy(x)”,“x=rand(n,10)”,[100000])
比较两个不同的表达式时(f, f2),如果新表达式更快,则加速比图上直线的斜率应大于1。更好的算法斜率很小。通常,对算法进行向量化不会改变执行时间图的斜率,但会使其相对于原始时间图发生偏移。例如
速度(“sum(x)”,“”,[100000]。。。“v=0;对于i=1:长度(x),v+=x(i);endfor”)
下面是一个更复杂的例子。如果有的原始版本互相关系数
使用for循环和使用FFT的第二个版本,则可以如下比较各种滞后的运行速度,或者如下比较具有不同向量长度的固定滞后的运行速率:
速度(“xcorr(x,n)”,“x=兰特(128,1);”,100,“xcorr_orig(x,n)”,-100*eps)
假设两个版本中的一个在xcorr_orig中,这将比较它们的速度和输出值。请注意,FFT版本并不准确,因此必须在比较中指定可接受的公差100*eps
在这种情况下,应该相对地计算比较,如abs((x- y) ./ y)
而不是绝对地abs(x- y)
.
类型示例(“速度”)看看一些真实的例子或者演示(“速度”)来运行它们。
版权所有 © 2024 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号