x=5arctg(x)-1/4 arccos(x)(x+3|x-y|+x^2)/(|x-y|z+x^2 ) нужно решение этог8о уравнения в паскале, СРОЧНО ПОМОГИТЕ
Ответы на вопрос
В записи есть переменные и , поэтому конкретное числовое значение невозможно получить, пока не заданы и .
Будем считать, что уравнение записано так:
Перенесём всё в левую часть:
Поскольку используется , обязательно должно выполняться:
Также знаменатель не должен быть равен нулю:
Ниже программа на Pascal, которая вводит значения и , просматривает промежуток и находит все корни методом половинного деления.
pascalprogram SolveEquation;uses Math;
const LeftBorder = -1.0; RightBorder = 1.0; Step = 0.001; Eps = 1E-10; DenomEps = 1E-12; MaxRoots = 100;
type TRootArray = array[1..MaxRoots] of Double;
var y, z: Double; x1, x2, f1, f2: Double; root: Double; roots: TRootArray; rootCount, i: Integer;
{ Проверка допустимости значения x } function IsValid(x: Double): Boolean; var denominator: Double; begin denominator := Abs(x - y) * z + Sqr(x);
IsValid := (x >= -1.0) and (x <= 1.0) and (Abs(denominator) > DenomEps); end;
{ Левая часть уравнения f(x) = 0 } function F(x: Double): Double; var numerator, denominator: Double; begin numerator := x + 3.0 * Abs(x - y) + Sqr(x);
denominator := Abs(x - y) * z + Sqr(x);
F := x - 5.0 * ArcTan(x) + 0.25 * ArcCos(x) * numerator / denominator; end;
{ Метод половинного деления } function Bisection(a, b: Double): Double; var middle: Double; fa, fm: Double; iteration: Integer; begin fa := F(a);
for iteration := 1 to 200 do begin middle := (a + b) / 2.0;
if not IsValid(middle) then begin { Если попали в точку разрыва, немного смещаемся } middle := middle + Eps; end;
fm := F(middle);
if Abs(fm) < Eps then begin Bisection := middle; Exit; end;
if fa * fm <= 0 then b := middle else begin a := middle; fa := fm; end;
if Abs(b - a) < Eps then Break; end;
Bisection := (a + b) / 2.0; end;
{ Проверка, не был ли корень уже найден } function IsNewRoot(value: Double): Boolean; var j: Integer; begin IsNewRoot := True;
for j := 1 to rootCount do if Abs(roots[j] - value) < 1E-6 then begin IsNewRoot := False; Exit; end; end;
begin Write('Введите y: '); ReadLn(y);
Write('Введите z: '); ReadLn(z);
rootCount := 0; x1 := LeftBorder;
while x1 < RightBorder do begin x2 := x1 + Step;
if x2 > RightBorder then x2 := RightBorder;
if IsValid(x1) and IsValid(x2) then begin f1 := F(x1); f2 := F(x2);
{ Корень находится непосредственно в точке x1 } if Abs(f1) < Eps then begin root := x1;
if IsNewRoot(root) and (rootCount < MaxRoots) then begin Inc(rootCount); roots[rootCount] := root; end; end;
{ На отрезке произошла смена знака } if f1 * f2 < 0 then begin root := Bisection(x1, x2);
if IsValid(root) and (Abs(F(root)) < 1E-7) and IsNewRoot(root) and (rootCount < MaxRoots) then begin Inc(rootCount); roots[rootCount] := root; end; end; end;
x1 := x2; end;
if rootCount = 0 then WriteLn('На промежутке [-1; 1] корни не найдены.') else begin WriteLn; WriteLn('Найдено корней: ', rootCount);
for i := 1 to rootCount do begin WriteLn( 'x', i, ' = ', roots[i]:0:10, ' Проверка f(x) = ', F(roots[i]):0:12 ); end; end;
ReadLn; end.
Например, программа запросит:
Введите y: 2 Введите z: 1
После этого она выведет найденные значения .
Если компилятор сообщает, что функция ArcCos не найдена, необходимо проверить наличие строки:
pascaluses Math;
Код предназначен для Free Pascal или PascalABC.NET. В Turbo Pascal готовой функции ArcCos может не быть, и её можно определить вручную:
pascalfunction MyArcCos(x: Real): Real; begin if x = 1.0 then MyArcCos := 0.0 else if x = -1.0 then MyArcCos := Pi else MyArcCos := Pi / 2.0 - ArcTan(x / Sqrt(1.0 - x * x)); end;
Тогда в функции F вместо:
pascalArcCos(x)
нужно написать:
pascalMyArcCos(x)
Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili

