如何将变量输入的逻辑向量转换为matlab中的函数

时间:2015-09-04 23:45:29

标签: matlab

使用逻辑向量,我被要求编写一个评估分段函数的函数,然后编写一个脚本,通过调用它来绘制该函数的图形。所以我得到的逻辑向量如下(从0到1,函数的值为零,所以我避免写它。)

x=-2:6
y= (-x).*(x<0)+(x-1).*(1<x & x<=3)+(3).*(x>3);
plot(x,y)

问题在于,如果我想将其定义为函数,我就是这样做的:

x=-2:6;
function y=f(x)
y=(-x).*(x<0)+(x-1).*(1<x & x<=3)+(3).*(x>3);
end

MATLAB抱怨说它不能用这种形式写出函数。

有人可以帮忙正确编写此代码吗?

新代码

    function y=f(x)
    @(x)y=@(x)(-x).*(x<0)+(x-1).*(1<x & x<=3)+(3).*(x>3);
    end

然后我把它保存为f.m,所以在我写的命令窗口中,

x=-2:6;
[y]=f(x);
plot(x,f(x)) 

1 个答案:

答案 0 :(得分:1)

有两种方法可以让它发挥作用:

方法#1 - 匿名函数

你试过anonymous function了吗?您所要做的就是使用@运算符,然后使用函数中的任何变量...在MATLAB命令提示符中 ,输入:

>> f=@(x) (-x).*(x<0)+(x-1).*(1<x & x<=3)+(3).*(x>3);

现在您已完成操作,只需使用命令提示符中的任何输入向量/矩阵f 正常致电x

>> x = -2:6;
>> out = f(x);

我们选择out

>> out

out =

     2     1     0     0     1     2     3     3     3

方法#2 - 使用函数脚本文件

但是,如果您希望让代码正常工作,则必须删除代码开头的x=-2:6代码,然后将其放入文件中:

%// NO x=-2:6 HERE!
function y=f(x)
y=(-x).*(x<0)+(x-1).*(1<x & x<=3)+(3).*(x>3);
end

如果要在MATLAB中编写函数文件,代码的第一行必须是函数声明。您正在尝试将正常的MATLAB脚本文件改为MATLAB函数文件,这在MATLAB中是不允许的。

虽然命名不佳,但您已将此代码放入函数文件f.m ....然后您可以正常调用它:

>> x = -2:6;
>> out = f(x);

为了完成这些工作,我建议您参考MathWorks帮助页面,该页面讨论如何在MATLAB中正确编写函数文件:http://www.mathworks.com/help/matlab/matlab_prog/create-functions-in-files.html