さまざまな方法で非合理的根を持つ関数の根を数値的に見つけるプログラムを書いています。この、非連続関数(漸近線とのすなわち機能)のために、しかし関数の漸近ではない根の検索
bool fxn1 = false;
bool fxn2 = false;
vector<float> root_list;
if(f_x(-100) < 0)
{
fxn2 = true;
}
for(float i = -99.99; i < 100.01; i += 0.01)
{
fxn1 = fxn2;
if(f_x(i) < 0)
{
fxn2 = true;
}
else
{
fxn2 = false;
}
if((fxn1 == false && fxn2 == true) || (fxn1 == true && fxn2 == false))
{
root_list.push_back(i-0.01);
root_list.push_back(i);
}
}
: は、線形補間などの方法については、私はこのコードを書いたこのため、内ルート嘘おおよその範囲を見つける必要がありますファンクションが漸近線のいずれかの側で正の値から負の値にスワップすると、コードもトリガされます。 プログラムにルートと漸近線の違いを伝える方法はありますか?予め
これはプログラミング上の問題ではなく、数学の問題です。しかし、漸近線には無限に逃げる性質があるので、 'f_x(i)<0'ならば' f_x(i + 0.005) f_x(i) 'である。 –
CompuChip
また、 'fxn2 = f_x(i)<0;で' if'文を両方とも置き換えることができます。 if(fxn1!= fxn2){...} '、9行を2行に置き換えます。 – CompuChip
符号の代わりに絶対値を見て、それが十分小さいかどうかを確認してください。 –