Решение нелинейных уравнений. - 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.
Объяснение кода листинга программы
- В программе используется функция F(x), которая вычисляет значение нелинейного уравнения.
- Функция SGN(Y) вычисляет знак числа Y.
- В процедуре Secant_method используются следующие переменные: i, x, y, a, b, ya.
- Переменная i инициализируется значением 0.
- Переменная b инициализируется значением 100.
- Переменная a инициализируется значением -100.
- В цикле повторяется следующий код:
- 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
- Программа завершается после выполнения всех итераций цикла.
- В конце программы сбрасывается экран с помощью функции ClrScr.
- Затем выполняется процедура Secant_method.