Как найти корень 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;
}