在Matlab中调用单独的函数

时间:2014-04-15 01:16:40

标签: matlab function function-handle

我试图调用一个允许用户输入他们选择的方程的函数,然后使用单独的函数在数值分析中使用梯形法则来近似它。

这是我的用户输入等式代码:

    function f = myf(x)
    y=@(x) input('Input Equation:  ');
    f=y(x);
    end

以下是应用梯形规则的代码:

    function T=trapez(f,a,b,n)
    h=(b-a)/n;
    x=[a+h:h:b-h];
    T=h/2*(feval(f,a)+feval(f,b)+2*sum(feval,f,x));
    fprintf('The approximation by trapezoida rule is: %f with step h: %f\n',T,h);
    end

我的问题是尝试使用第一个函数确定的等式作为第二个函数的输入。

    >> f=myfun
    Input Equation: exp(x^2)

    f = 

    @(x)exp(x^2)


    f = 

    @(x)exp(x^2)

    >> trapez(f,0,1,15)
    Error using feval
    Not enough input arguments.

    Error in trapez (line 4)
    T=h/2*(feval(f,a)+feval(f,b)+2*sum(feval,f,x));

1 个答案:

答案 0 :(得分:1)

这是输入函数的函数,

function f=myf
y=input('Input equation: ','s');
eval([ 'f=@(x)' y ';'])

并使用其他函数中的f=myf

您的trapez也需要进行一些修改:

function T=trapez(f,a,b,n)
    h=(b-a)/n;
    x=[a+h:h:b-h];
    T=h/2*(f(a)+f(b)+2*sum(arrayfun(f,x)));
    fprintf('The approximation by trapezoida rule is: %f with step h: %f\n',T,h);
    end

根据函数的输入方式,myf可能不同。如果您将输入作为例如:x^2(因此只是函数,而不是额外的语法),这应该有效。

y=input('Input equation: ','s')
eval([ 'f=@(x)' y])

示例输入/输出:

Input equation: x^2
y =
x^2
f = 
    @(x)x^2

然后您可以f(2)查找2^2

或者,如果要使用其参数输入函数,例如:@(y) y^2

y=input('Input equation: ','s')
eval(['f=' y])

和样本输出:

>> y=input('Input equation: ','s')
    eval(['f=' y])
Input equation: @(t) t^2
y =
@(t) t^2
f = 
    @(t)t^2
>> f(2)
ans =
     4