用scilab绘制自己的功能

时间:2014-11-12 21:35:30

标签: matlab function plot scilab

嘿,我有一个用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))

你能否告诉我如何解决这个问题

2 个答案:

答案 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