Matlab 查找用户输入的函数的f(任意值),例如f(1)或f(2)

Matlab 查找用户输入的函数的f(任意值),例如f(1)或f(2),matlab,Matlab,这里的主要问题是在某一点上评估用户函数,因为我们不知道用户是否将在x域或其他域中输入函数 我试过这个,但不起作用: function y = f(~) y = input('Enter you function: '); end 这就是我想要的: >>f Enter you function: a^2+3*a-3 >>f(1) ans = 1 此解决方案几乎提供了您问题中的确切要求。我会觉得用这个来评估有点奇怪。您还需要将一些错误检查打包到这个文件中 classdef

这里的主要问题是在某一点上评估用户函数,因为我们不知道用户是否将在x域或其他域中输入函数

我试过这个,但不起作用:

function y = f(~)
y = input('Enter you function: ');
end
这就是我想要的:

>>f
Enter you function: a^2+3*a-3
>>f(1)
ans =
1

此解决方案几乎提供了您问题中的确切要求。我会觉得用这个来评估有点奇怪。您还需要将一些错误检查打包到这个文件中

classdef f < handle

    properties (Access = private)
        functionString = '';
    end

    methods
        function obj = f
            if nargin == 0
                obj.functionString = input('Enter your function: ', 's');
            end
        end

        function value = subsref(obj, a)
            a = a.subs{:};
            value = eval(obj.functionString);
        end

        function display(obj)

        end
    end

end
classdef
然后,您可以像这样使用该类:

>> a = f Enter your function: a^2+3*a-3 >> a(1) ans = 1 >> a(2) ans = 7 >>a=f 输入您的函数:a^2+3*a-3 >>a(1) ans= 1. >>a(2) ans= 7.
此解决方案几乎提供了您问题中的确切要求。我会觉得用这个来评估有点奇怪。您还需要将一些错误检查打包到这个文件中

classdef f < handle

    properties (Access = private)
        functionString = '';
    end

    methods
        function obj = f
            if nargin == 0
                obj.functionString = input('Enter your function: ', 's');
            end
        end

        function value = subsref(obj, a)
            a = a.subs{:};
            value = eval(obj.functionString);
        end

        function display(obj)

        end
    end

end
classdef
然后,您可以像这样使用该类:

>> a = f Enter your function: a^2+3*a-3 >> a(1) ans = 1 >> a(2) ans = 7 >>a=f 输入您的函数:a^2+3*a-3 >>a(1) ans= 1. >>a(2) ans= 7.
另一种解决方案是使用函数句柄:

>> f=@(x) x^2+3*x-3 f = @(x)x^2+3*x-3 >> f(1) ans = 1 >> f(2) ans = 7 >>f=@(x)x^2+3*x-3 f= @(x) x^2+3*x-3 >>f(1) ans= 1. >>f(2) ans= 7.
另一种解决方案是使用函数句柄:

>> f=@(x) x^2+3*x-3 f = @(x)x^2+3*x-3 >> f(1) ans = 1 >> f(2) ans = 7 >>f=@(x)x^2+3*x-3 f= @(x) x^2+3*x-3 >>f(1) ans= 1. >>f(2) ans= 7.
很酷,很好用!好的,如果我想它返回一个拉普拉斯函数的初始值(即f(0))(例如,如果我们有f(s),fs=(s^2+6*s+9)/(s^3+2*s^2-s-2),然后我们找到f(t),它等于ft=ilaplace(fs);如何在值0处找到f(t)这就是我想要的do@Eng.Fouad:将上述类中的行从
a=a.subs{:}更改为
to
t=a.subs{:}。在命令行中运行
ilaplace(fs)
,复制结果,在命令行中输入
a=f
运行上述类,并在提示输入函数时进行粘贴。@b3:是否有办法将ilaplace方法包括到类中,以便我不必复制和粘贴任何-1。这个答案没有解决提问者明显严重缺乏理解的问题,而是提供了一个极其糟糕的解决方案,没有任何警告。这是一种糟糕的编程实践,无法帮助提问者真正理解任何东西。@Colin K:很高兴看到你非常在意自己的观点,但你在做一些疯狂的假设。这是一个问答网站。我给了一个A,之后有很多机会让OP在必要时澄清。我想知道在你形成你的观点之前,你是否检查过OP是否获得了一些理解。酷,它工作得很好!好的,如果我想它返回一个拉普拉斯函数的初始值(即f(0))(例如,如果我们有f(s),fs=(s^2+6*s+9)/(s^3+2*s^2-s-2),然后我们找到f(t),它等于ft=ilaplace(fs);如何在值0处找到f(t)这就是我想要的do@Eng.Fouad:将上述类中的行从
a=a.subs{:}更改为
to
t=a.subs{:}。在命令行中运行
ilaplace(fs)
,复制结果,在命令行中输入
a=f
运行上述类,并在提示输入函数时进行粘贴。@b3:是否有办法将ilaplace方法包括到类中,以便我不必复制和粘贴任何-1。这个答案没有解决提问者明显严重缺乏理解的问题,而是提供了一个极其糟糕的解决方案,没有任何警告。这是一种糟糕的编程实践,无法帮助提问者真正理解任何东西。@Colin K:很高兴看到你非常在意自己的观点,但你在做一些疯狂的假设。这是一个问答网站。我给了一个A,之后有很多机会让OP在必要时澄清。我想知道在你形成你的观点之前,你是否检查过OP是否获得了一些理解。