我想在matlab中编写像sqrt这样的函数,无论我是传递符号还是传递数字返回值,如下代码:
>> syms x;
>> y = sqrt(x)
y =
x^(1/2)
>> y = sqrt(4)
y =
2
我的职责是:
function [ y ] = fx(x)
if -1<=x && x<=0
y=-2;
elseif 2<=x && x<=3
y=2;
else
y=0;
end
end
实际上我希望我的功能是符号也是数字
答案 0 :(得分:1)
您可以使用isnumeric
和isa(x,'sym')查看输入的类别。您可能还需要isfloat
,并且您可能还希望使用isa(x,'symfun')检测符号函数。因此,示例sqrt
函数可能如下所示:
function y=sqrt(x)
if isfloat(x)
y = sqrt(x);
elseif isa(x,'sym')
y = sqrt(x); % Same but this might be something else
else
error('sort:InvalidDatatype','Input must be floating point or symbolic.');
end
当然,Matlab的sqrt
已经适用于浮点和符号输入。它实际上使用了一个你也可以使用的不同方案:通过为每个类创建单独的函数并将每个函数放在路径上的@classname(例如@double或@sym)文件夹中进行重载。