嘿,我有一个用scilab绘制我自己的功能的问题。 我想绘制以下函数
function f = test(n)
if n < 0 then
f(n) = 0;
elseif n <= 1 & n >= 0 then
f(n) = sin((%pi * n)/2);
else
f(n) = 1;
end
endfunction
后跟控制台命令
x = [-2:0.1:2];
plot(x, test(x));
我加载了该函数并收到以下错误
! - 错误21 索引无效。 在函数lala的第7行叫做:
plot(x,test(x))
你能否告诉我如何解决这个问题
答案 0 :(得分:0)
所以我现在用for循环做了。我不认为这是最好的解决方案,但我不能让其他人在运行...
function f = test(n)
f = zeros(size(n));
t = length(n);
for i = 1:t
if n(i) < 0 then
f(i) = 0;
elseif n(i) <= 1 & n(i) >= 0
f(i) = sin((%pi * n(i)/2));
elseif n(i) > 1 then
f(i) = 1;
end
end
endfunction
我想我需要找到关于这个问题的来源并使用matlab / scilab的功能和特权来结束:) 谢谢你的帮助
答案 1 :(得分:0)
原罪是
function f = test(n) (...) f(n) = (...) (...) endfunction
f
应该是函数的结果。因此,f(n)
不是&#34;函数test
对参数n
&#34;所采用的值,而是&#34; n
- 元素f
&#34;。然后Scilab可以处理这个问题;在您的测试用例中,它尝试访问非整数索引,从而导致错误。你的循环解决方案解决了这个问题。
在第一个公式中用f(n)
替换所有三个f
使其成为可行的东西......只要参数是标量(不是数组)。
如果您希望test
能够接受矢量参数而不进行循环,则问题是n < 0
是一个与n
大小相同的矢量。我的解决方案将使用逻辑数组来索引这三个条件中的每一个:
function f = test(n)
f = zeros(size(n));
negative = (n<0);//parentheses are optional, but I like them for readability
greater_than_1 = (n>1);
others = ~negative & ~greater_than_1;
f(isnegative)=0;
f(greater_than_1)=1;
f(others) = sin(%pi/2*n(others));
endfunction