1

ユーザーが選択した方程式を入力できるようにする関数を呼び出してから、別の関数を使用して、数値解析の台形則を使用してそれを近似しようとしています。

ユーザー入力方程式のコードは次のとおりです。

    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

私の問題は、最初の関数によって決定された方程式を2番目の入力として使用しようとしています。

    >> 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));
4

1 に答える 1

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
于 2014-04-15T01:42:28.280 に答える