0

宿題として、二分法を使用して範囲内の 1 つの変数を持つ関数のルートを計算するコードを書いています。計算を行うユーザー関数を作成しましたが、関数の入力の 1 つが "fun" であると想定されており、関数と等しく設定されています。

先に進む前に、これが私のコードです。

function [ Ts ] = BisectionRoot( fun,a,b,TolMax )

%This function finds the value of Ts by finding the root of a given function within a given range to a given
%tolerance, using the Bisection Method.

Fa = fun(a);
Fb = fun(b);
if Fa * Fb > 0
    disp('Error: The function has no roots in between the given bounds')
else
    xNS = (a + b)/2;
    toli = abs((b-a)/2);
    FxNS = fun(xns);
    if FxNS == 0
        Ts = xNS;
        break
    end
    if toli , TolMax
        Ts = xNS;
        break
    end
    if fun(a) * FxNS < 0
        b = xNS;
    else
        a = xNS;
    end
end

Ts

end

入力引数は先生によって定義されているので、いじることはできません。関数を実行するに、コマンド ウィンドウでこれらの変数を設定する必要があります。そうすれば、プログラムを後で他のことに使用できます。(私は fzero() を使用してこれを行うことができると思いますが)

私の問題は、fun を何かに設定し、fun(a) または fun(b) を実行できる方法でそれを使用する方法がわからないことです。私たちの本では、彼らは f(x) を無名関数として定義することを行っています。彼らは例の問題のためにこれを行います:

F = @ (x) 8-4.5*(x-sin(x))

しかし、それをしようとすると、エラーが発生します。エラー: 予期しない MATLAB 演算子です。

投稿する前にプログラムを実行してソリューションをテストしたい場合 (私のプログラムが機能することを願っています!)、本の例からこれらの変数を使用できます。

fun = 8 - 4.5*(x - sin(x)) a = 2 b = 3 TolMax = .001

それらを使用するための本の答えは2.430664.

これに対する答えは信じられないほど簡単でわかりやすいと確信していますが、何らかの理由でそれを行う方法が見つかりません! ご協力ありがとうございました。

4

1 に答える 1

3

あなたが始めるために、あなたの例にはいくつかの構文が欠けているようです。これらのいずれかの代わりに(あなたの質問から):

fun = 8 - 4.5*(x - sin(x))  % Missing function handle declaration symbol "@"
F = @ (x) 8-4.5*(x-sin9(x))  %Unless you have defined it, there is no function "sin9"

使用する

fun = @(x) 8 - 4.5*(x - sin(x))

次に、次のように関数を呼び出します。

fun = @(x) 8 - 4.5*(x - sin(x));
a = 2;
b = 3;
TolMax = .001;
root = BisectionRoot( fun,a,b,TolMax );

デバッグするには (これを行う必要があります)、デバッガーを使用します。

  1. このコマンドdbstop if errorは実行を停止し、問題が発生した時点でファイルを開き、変数の値と関数スタックを調べることができます。

  2. エディターの「-」マークをクリックすると、ブレーク ポイントが作成され、そのポイントで関数の実行が強制的に一時停止され、内容を調べることができます。エディターの上部にあるデバッグ ボタンを使用して、コードを 1 行ずつ実行できることに注意してください。

  3. dbquitデバッグモードを終了します

  4. dbclear allすべてのブレークポイントをクリアします

于 2013-02-13T20:39:27.493 に答える