宿題として、二分法を使用して範囲内の 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
.
これに対する答えは信じられないほど簡単でわかりやすいと確信していますが、何らかの理由でそれを行う方法が見つかりません! ご協力ありがとうございました。