2016-10-19 7 views
0

私には関数[email protected](x)(1-exp(-x))./xがあるとします。私が計算したいのはfun([0,1])です。 x->0,fun->1と計算されます。しかし、単にfun([0,1])と入力すると、最初の要素はNaNになります。 fun(0)1を与えるようにコマンドを持つことは可能ですか?限界点を計算することは可能ですか?

+0

タイトルを少し編集したい場合があります。あなたの以前のものは泥のようにはっきりしていたので、私は数学的に何をしているのかに近いものに変更しました。今それが間違っているなら、謝罪してください。 – Adriaan

+0

'fun(eps)'は '1'を返しますので、実数を制限するために使うことができますが、' Inf'と '-Inf'のためにどのようにすればよいかわからないので、 limitfcn = @(fun、a)(fun(a + eps)+ fun(a-eps))/ 2'、両側で制限が異なる場合、技術的には定義されていないが、 –

答えて

0

あなたはできませんfun(0)を計算します。それは限界点ですから、明らかにMATLABはNaNの値を与えます。あなたはのアプローチx=0に無限に近づく必要がありますが、実際にはを得ることができません。それはあなたのための数学です。あなたにできることは私の知る限り知られているよう

function result = fun(x) 

result = (1-exp(-x))./x; 
result(x==0)=1; % remove the singularity if present 
+0

私ができる唯一の方法は、別の関数を書くことです。関数が有限関数として定義されている場合、制限を取得するための組み込み関数は存在しません。 –

+0

わかりません。問題は、関数が限界点に存在しないため、明らかに機能しないということです。無名関数を使用して、このような複数行の方程式を計算することはできません。したがって、完全な関数が必要です。制限ポイントを計算する['limit'](http://mathworks.com/help/symbolic/limit.html)という関数がありますが、それは記号入力を必要とするため、非常に遅いです。 – Adriaan

1

のような関数を作成し、限界の数値計算は少し文学で、数値のパッケージで対処されています。それはおそらく技術よりもまだ芸術です。

考えられる理由の1つは、限界値の計算が、任意の大きな値または任意の値に任意に近似し、任意の種類のオーバーフローまたはトランケーションエラーやその他の病状を引き起こすため、数値精度に挑戦するということです。だから、直接攻撃は実行不可能なことが多い。

場合によっては、不安定な計算を回避するための特別な機能があります。例えば、関数e^x-1はMatlabでexpm1とすぐに利用でき、expm1(x)/xの制限は(exp(x) - 1)/xよりはるかに良い見積りにつながります。

テイラー近似は参考になる場合がありますが、良い解決法ではしばしば記号計算が必要になります。与えられた場合、簡略化の後に(e^x - 1)/x ~ 1 + x/2 + x²/6 + x³/24...を確立するだろう。

関連する問題