0

我想在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

实际上我希望我的函数是符号的也是数字的

4

1 回答 1

1

您可以使用isnumericisa(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

当然,Matlabsqrt已经适用于浮点和符号输入。它实际上使用了一种您也可以使用的不同方案:通过为每个类创建单独的函数并将每个函数放在路径上的@classname(例如@double 或@sym)文件夹中进行重载。

于 2013-11-10T17:55:50.973 回答