численные методы. решение нелинейных уравнений

<< < (10/11) > >>

leahov:
так может правильней?

Код
while (absolute(x0-t0) < eps)
{
 x = (x0+t0)/2;
 t = f((x0+t0)/2);
 step = step + 1;
}
Label28->Caption = x;
Label30->Caption = t;
Label32->Caption = step;
 
но степ по прежнему 1

oxotnik:
значит условие выполняется только один раз
к стати в теле цикла x0, t0 и eps не меняются, поэтому условие while (absolute(x0-t0) < eps) бесполезно
ЗЫ: операция деления выполняется в 10 раз дольше операции умножения

VerZer:
Код:

//---------------------------------------------------------------------------
float f(float x)
{
//    return x*x*x + 3*x - 2;
 return x*x*x + x - 5;
}
float fdx(float x)
{//    return 3*x*x +3;
  return 3*x*x +1;
}
float fd2x(float x)
{
    return 4*x;
}
//---------------------------------------------------------------------------
void TForm1::go_combined(float x0, float t0, float epsilon, int step)
{
    if (abs(x0 - t0) < epsilon)
    {
        ListBox1->Items->Add("x: "+FloatToStr((x0+t0)/2));
        ListBox1->Items->Add("f(x): "+FloatToStr(f((x0+t0)/2)));
        ListBox1->Items->Add("steps: "+IntToStr(step));
        return;
    }
    float x = x0 - f(x0)*(t0-x0)/(f(t0)-f(x0));
    float t = t0 - f(t0)/fdx(t0);

    go_combined(x, t, epsilon, step + 1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::bExeClick(TObject *Sender)
{
  float a = StrToFloat(Edit1->Text);
  float b = StrToFloat(Edit2->Text);
  float epsilon = StrToFloat(Edit3->Text);

  if (abs(f(a)*fd2x(a)) == f(a)*fd2x(a) &&
      abs(f(b)*fd2x(b)) == f(b)*fd2x(b))
  {
    ListBox1->Items->Add("данные неверны");
    return;
  }
  else
  {
    float x0 = a;
    float t0 = b;
    if (f(x0)*fd2x(x0) > 0)
    {
      x0 = b;
      t0 = a;
    }

    ListBox1->Items->Add("===================================");
    go_combined(x0, t0, epsilon, 1);
    ListBox1->Items->Add("===================================");
    ListBox1->Items->Add("");
  }
}
//---------------------------------------------------------------------------

leahov:
oxotnik, спасибо
VerZer не реальное спасибо, ща пойду домой испробую

leahov:
ещё есть последняя просьба, как реализовать модифицированный метод ньютона (касательных) из имеющегося простого метода ньютона (он же kasat в коде). В посте 22 есть описание этих методов. Если кто знает, помогите люди добрые.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

[*] Предыдущая страница