Решение нелинейных уравнений. - Pascal (7266)

Узнай цену своей работы

Формулировка задачи:

Условие задачи: Найти одним из методов с точностью е=0,0001 действительные корни уравнения ( метод биссекции, метод Ньютона, метод итерации или метод секущих. Уравнение: 3х-cosx-1=0 Кто может это решить помогите пожалуйста переделать в исходник:
uses
    CRT;
var
    E,x0,x1,y0,y1,x:real;
    imax,i,j,k,m:integer;
 
function F(x:real):real;
begin
    F := 1-exp(j*ln(abs(x)))-exp(k*ln(abs(pi*exp(m*ln(abs(x)))/4)));
end;
 
begin
    ClrScr;
        writeln('Enter j,k,m'); readln(j,k,m);
    E:=1.0E-10;
    x0:= 1; x1:= x0+(10-100)*E;
    i:=1; imax:=20;
    y0:=F(x0);
    repeat
        y1:=F(x1);
        x:=x1-(x1-x0)/(y1-y0)*y1;
                writeln('Xn+1 = ',x);
        if abs(x-x1)<E then break;
        x0:=x1; y0:=y1;
        x1:=x;  inc(i);
    until (i=imax);
 
    writeln('X = ',x+E:0:10,'; Iterates: ',i);
    readkey;
end.

Решение задачи: «Решение нелинейных уравнений.»

textual
Листинг программы
program EvgeniiSp;
uses Crt;
const e = 0.0001;
 
//-------------------------
 function F(x: real): real;
  Begin
   F:=3*x-cos(x)-1;
  End;
//-------------------------
 function SGN(Y: real): integer;
  Begin
   if Y < 0
    then SGN:=-1
    else SGN:=1;
  End;
//-------------------------
 procedure Secant_method;
  var
   i: byte;
   x,y,a,b,ya: real;
  begin
   i:=0;
   b:=100;
   a:=-100;
   repeat
    Inc(i);                    //Г*Г*Г·Г*ëî ГЁГІГҐГ°Г*öèè
    x:=(A+B)/2;                // x - ñåðåäèГ*Г* îòðåçêГ* [A,B]
    Y:=F(x); YA:=F(A);         // Г§Г*Г*Г·ГҐГ*ГЁГї ГґГіГ*êöèè Гў ñåðåäèГ*ГҐ ГЁ Г*Г* ГЄГ®Г*öå îòðåçêГ*
    if (SGN(Y)*SGN(YA)) > 0    // åñëè Г§Г*Г*ГЄГЁ ГґГіГ*êöèè Гў òî÷êГ*Гµ "A" ГЁ "x" ñîâïГ*Г¤Г*ГѕГІ
     then  A:=x  else  B:=x;   // ГІГ®,  ГЇГҐГ°ГҐГ*îñ ГЈГ°Г*Г*èöû "A",  ГЁГ*Г*Г·ГҐ  - "Г‚"
   until (Abs(B-A) < e);
   writeln('X = ',x+E:0:10,'; Êîë. ГЁГІГҐГ°Г*öèé = ',i);
  end;
 
begin
 ClrScr;
 Secant_method;
end.

Объяснение кода листинга программы

  1. В программе используется функция F(x), которая вычисляет значение нелинейного уравнения.
  2. Функция SGN(Y) вычисляет знак числа Y.
  3. В процедуре Secant_method используются следующие переменные: i, x, y, a, b, ya.
  4. Переменная i инициализируется значением 0.
  5. Переменная b инициализируется значением 100.
  6. Переменная a инициализируется значением -100.
  7. В цикле повторяется следующий код:
    • x:=(A+B)/2;
    • Y:=F(x);
    • YA:=F(A);
    • если (SGN(Y)*SGN(YA)) > 0
      • A:=x
      • иначе B:=x
    • пока abs(B-A) < e
      • writeln('X = ',x+E:0:10,'; Êîë. ГЁГІГҐГ°Г*öèé = ',i);
    • end
  8. Программа завершается после выполнения всех итераций цикла.
  9. В конце программы сбрасывается экран с помощью функции ClrScr.
  10. Затем выполняется процедура Secant_method.

Оцени полезность:

11   голосов , оценка 3.727 из 5
Похожие ответы