Как найти корень f(x)->min методом дихотомии?

есть функция f(x)= 2x^4-x+1 нужно найти min методом дихотомии с точность 0.001 и ограничениями [-1;10].

вот набросок кода, который я пытался реализовать. Но суть такова, что он находит не совсем то что нужно.. где f(a) = 4 , f(b) = 19991, ep = 0,001 , a и b = [-1;10]

private void button1_Click(object sender, EventArgs e)
{
    double a = Convert.ToDouble(textBox1.Text);
    double b = Convert.ToDouble(textBox2.Text);
    double ep = Convert.ToDouble(textBox3.Text);
    double fa = Convert.ToDouble(textBox4.Text);
    double fb = Convert.ToDouble(textBox5.Text);
    do
    {
        if (fa > fb)
            a = a + (b - a) / 2;
        else b = a + (b - a) / 2;
    }
    while (Math.Abs((b - a)) / 2 >= ep) ;
    label1.Text = Convert.ToString("f(x)=" + (a-b));
}

Ответы (1 шт):

Автор решения: Eliz

Спасибо пользователю @CrazyElf

private void button1_Click(object sender, EventArgs e)
{
    try
    {
        double a = Convert.ToDouble(textBox1.Text);
        double b = Convert.ToDouble(textBox2.Text);
        double ep = Convert.ToDouble(textBox3.Text);
        do
        {
            if (f(a) > f(b))
                a = a + (b - a) / 2;
            else b = a + (b - a) / 2;
        }
        while (Math.Abs((f(b) - f(a))) / 2 >= ep);
        label1.Text = Convert.ToString("f(x)=" + f(f((b - a)) / 2));
    }
    catch (Exception ex)
    {
        MessageBox.Show(""+ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

static double f(double x)
{
    return 2*Math.Pow(x, 4) - x + 1;
}
→ Ссылка