我只是尝试在 Octave 音阶中创建我的第一个函数,它看起来如下:
function hui(x)
if(0 <= x && x <2)
retval = (1.5 * x + 2)
elseif(2<= x && x <4)
retval = (-x + 5)
elseif(4<= x && x < 6)
retval = (0.5 * x)
elseif(6<= x && x < 8)
retval = (x - 3)
elseif(8<= x && x <=10)
retval = (2 * x - 11)
endif
endfunction
但是如果我尝试使用以下方法绘制它:x=0:0.1:10;绘图(x, hui(x));
这表明女巫的情节似乎有点奇怪。
我做错了什么?
提前致谢 约翰
最佳答案
您必须原谅我对软件包的生疏,但您需要稍微更改一下代码。值得注意的是,符号 0<=x
不正确,必须是 x>=0
。自 hui
正在对向量进行操作,我相信您在构建返回值时需要考虑到这一点。
我确信有更有效的方法来对其进行矢量化,但基本上,在单步输入向量时,我将最新值添加到返回向量上,最后删除我放入的初始 0 .我放入了一个哨兵值,以防输入不满足其中一个条件(它总是采用代码中的“else”路径,因此在那里放置一些内容可能会提醒您出现错误)。
function [retval] = hui(x)
retval = 0
for i=1:size(x,2)
if(x(i)>=0 && x(i) <2)
retval = [retval (1.5 * x(i) + 2)];
elseif( x(i)>=2 && x(i) <4)
retval = [retval (-1*x(i) + 5)];
elseif(x(i)>=4 && x(i) < 6)
retval = [retval (0.5 * x(i))];
elseif(x(i)>=6 && x(i) < 8)
retval = [retval (x(i) - 3)];
elseif(x(i)>=8 && x(i) <=10)
retval = [retval (2 * x(i) - 11)];
else
retval = -999;
endif
endfor
retval = retval(2:size(retval,2));
endfunction
关于gnuplot - 我的 Octave 函数有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6084336/