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

<< < (7/11) > >>

leahov:
пробывал сделать комбинированный - какая то фигня получается. Люди помогите кто чем может, чтоб закрыть эту тему, голова уже квадратная :o

leahov:
 ??? ??? ??? я не понимаю уже ничего, в голове каша какая-то. Люди добрые не бросайте меня, подскажите как сделать эти два метода  :'(

leahov:
в общем с комьинированными вроде понял как сделать, но вылазят ошибки Expression syntax возле ==. Как можно исправить?

Код
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include<math.h>
 
#include "urav.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
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;
}
float absolute(float x)
{    return x < 0 ? -x : x;
}
void chordes(float a, float b, float eps, TLabel* lbl3, TLabel* lbl4, TLabel* lbl5)
{
 if(f(a)*f(b) < 0)
   {
     ShowMessage("Хорды: a и b неправильные");
     return;
   }
 float x0 = a;
 float xf = b;
 if(f(a)*fd2x(a) > 0)
 {
   x0 = b;
   xf = a;
 }
 int step = 1;
 float x1 = x0 - f(x0)*(xf-x0)/(f(xf)-f(x0));
 while(absolute(x1-x0) > eps)
  {
    x0 = x1;
    x1 = x0 - f(x0)*(xf-x0)/(f(xf)-f(x0));
    step = step + 1;
  }
  lbl3->Caption = x1;
  lbl4->Caption = f(x1);
  lbl5->Caption = step;
}
void __fastcall TForm1::sek(float a, float b, float eps)
{
 if(f(a)*f(b) < 0)
 {
  ShowMessage("Секущие : a и b неправильные");
  return;
 }
 float x0 = a;
 float x1 = a + eps;
 if(f(a)*fd2x(a) < 0)
  {
    x0 = b;
    x1 = b - eps;
  }
 int step = 1;
 float x = x1 - f(x1)*(x1 - x0)/(f(x1) - f(x0));
 x0 = x1;
 x1 = x;
 while(absolute(x1-x0) > eps)
 {
  x = x1 - f(x1)*(x1 - x0)/(f(x1) - f(x0));
  x0 = x1;
  x1 = x;
  step = step + 1;
 }
 Label11->Caption = x1;
 Label12->Caption = f(x1);
 Label13->Caption = step;
}
 
void __fastcall TForm1::kasat(float a, float b, float eps)
{
if(f(a)*f(b) < 0)
{
 ShowMessage("Касательные: a и b неправильные");
 return;
}
float x0 = a;
if(f(a)*fd2x(a) < 0)
{
 x0 = b;
}
int step = 1;
float x1 = x0 - f(x0)/fdx(x0);
while(absolute(x1-x0) > eps)
{
 x0 = x1;
 x1 = x0 - f(x0)/fdx(x0);
 step = step + 1;
}
Label17->Caption = x1;
Label18->Caption = f(x1);
Label25->Caption = step;
}
 
void __fastcall TForm1::combi(float a, float b, float eps)
{
if (f(a)*fd2x(a)) == f(a)*fd2x(a)
and
   (f(b)*fd2x(b)) == f(b)*fd2x(b)
{
  ShowMessage("Данные: a и b неправильные");
 return;
}
float x0=a;
float t0=b;
 
if(f(a)*fd2x(a)) >0)
{
x0=b;
t0=a;
}
int step = 1;
float x = x0 - f(x0)*(t0-x0)/(f(t0)-f(x0));
float t = t0 - f(t0)/fdx(t0);
while (absolute(x0-t0) < eps)
{
 x0 = (x0+t0)/2;
 t0 = f((x0+t0)/2);
//  x1 = x0 - f(x0)/fdx(x0);
 step = step + 1;
}
 
 
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  float a, b, eps;
//  ShowMessage("Vvedite a, b, epsilon: ");
  a = StrToFloat(Edit1->Text);
  b = StrToFloat(Edit2->Text);
  eps = StrToFloat(Edit3->Text);
  chordes(a, b, eps, Label3, Label4, Label7);
  sek(a, b, eps);
  kasat(a, b, eps);
}
//---------------------------------------------------------------------------
 
 
 

leahov:
а вот не заметил, тут целый букет ошибок :D
[C++ Error] urav.cpp(117): E2188 Expression syntax
[C++ Warning] urav.cpp(125): W8066 Unreachable code
[C++ Error] urav.cpp(125): E2188 Expression syntax
[C++ Error] urav.cpp(138): E2451 Undefined symbol 'step'
[C++ Warning] urav.cpp(142): W8004 't' is assigned a value that is never used
[C++ Warning] urav.cpp(142): W8004 'x' is assigned a value that is never used

VerZer:
по синтаксису:
Код:

if (f(a)*fd2x(a)) == f(a)*fd2x(a)
 and
    (f(b)*fd2x(b)) == f(b)*fd2x(b)
 {
   ShowMessage("Данные: a и b неправильные");
  return;
Код:

  if ((f(a)*fd2x(a) == f(a)*fd2x(a)) &&
      (f(b)*fd2x(b) == f(b)*fd2x(b)))
  {
    ShowMessage("Данные: a и b неправильные");
    return;
  }
и следом:
Код:

if(f(a)*fd2x(a)) >0)
{
x0=b;
t0=a;
}
Код:

  if(f(a)*fd2x(a) > 0)
  {
    x0 = b;
    t0 = a;
  }

и по математике, извините, помочь не могу.. пока что :)

Навигация

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

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

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