使用逻辑向量,我被要求编写一个评估分段函数的函数,然后编写一个脚本,通过调用它来绘制该函数的图形。所以我得到的逻辑向量如下(从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))
答案 0 :(得分: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
但是,如果您希望让代码正常工作,则必须删除代码开头的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