вторник, 8 января 2013 г.

Исследование и решение квадратного и биквадратного уравнений.


Задача

Уравнение ax4 + bx2 + c = 0 задано своими коэффициентами. Найти действительные корни

этого уравнения. ( Коэффициент а отличен от нуля ).

Метод решения задачи:
Обозначим у = х2  и решим квадратное уравнение вида ау2  + ву + с = 0. Если квадратное
уравнение действительных корней не имеет, то биквадратное уравнение также не имеет
действительных корней. Если квадратное уравнение имеет действительные корни, то
биквадратное уравнение может иметь 2 или 4 действительных корня.


Описание алгоритма решения задачи:
-          описываем переменные;
-          описываем подпрограмму исследования и нахождения действительных корней квадратного уравнения в виде процедуры KVUR;
-          задаём коэффициенты биквадратного уравнения и параметр eps, определяющий минимальное значение дискриминанта;
-          вызываем процедуру KVUR для вычисления значений у1 и у2;
-          вычисляем и печатаем значения действительных корней уравнения х1, х2, х3, х4.

 Переменные в процедуре:
а, в, с – коэффициенты квадратного уравнения;
у1, у2 – действительные корни квадратного уравнения;
d – дискриминант;
eps – минимальное значение дискриминанта.

Переменные в программе:
у1, у2 – результаты работы процедуры KVUR;
x1, x2, x3, x4 – корни биквадратного уравнения.

Программа решения задачи;

Program bi;
Const eps = 1e-4;      { задаём минимальное значение корня уравнения }
Var a,b,c,y1,eps,x1,x2,x3,x4,k: real;    { описываем глобальные переменные }

Procedure KVUR (a,b,c:real; var y1,y2,k:real); { аргументы и результаты процедуры KVUR } 
    Var d:real;
Begin
    D:= b*b-4*a*c;       { дискриминант квадратного уравнения }  
    If d>0 then            { если дискриминант больше нуля то }
 Begin
  Y1:=(-b+sqrt(d))/(2*a);   { вычисляем значение двух корней уравнения }
   Y2:=(-b-sqrt(d))/(2*a);
   End;
If  (abs(d)<eps) and (d>0) then   { если дискриминант больше нуля и меньше eps}
   Begin
   Y1:=-b/(2*a); y2:=y1;      { вычисляем значение одного корня уравнения }
    End;
If d<0 then  { если d<0 то }
Begin
 Writeln(‘ корни мнимые’); 
 K:=1;
End;      { завершаем работу процедуры }

Begin      { начало исполняемой части программы }
Writeln(‘a,b,c,eps=?’);
Readln(a,b,c,eps);        { задаём коэффициенты уравнения }
KVUR(a,b,c,y1,y2,k);
                               { вызываем процедуру KVUR с аргументами a,b,c. Результаты – у1,у2 }

If (y1<0) and (y2<0) then  { если у1<0 и у2<0 тогда }
 Writeln (‘действительных корней нет ‘)  { печатаем: «действительных корней нет» }
Else if (y1>=0) and (k=0) then   { если у1>0 тогда } 
 Begin
  X1:=sqrt(y1); writeln (‘x1=’, x1:7:5);  { вычисляем и печатаем значения х1 и х2 }
  X2:=-X1; writeln(‘x2=’,x2:7:5);
 End;
Else if (y2>=0) and (k=0) then   { если у2>0 тогда }
 Begin
  X3:=sqrt(y2); writeln(‘x3=’, x3:7:5);  { вычисляем и печатаем значения х3 и х4 }
  X4:=-x3; writeln(‘x4=’,x4:7:5);
End;
End.         { завершение работы программы }


           
Результаты тестирования программы:

    a        b        c        x1        x2        x3       x4
       
    2        -3       7        -          -            -          -
    1         5        6        -         -            -           -
   -1       -2       24      2         -2           -          -
    1        -2        1       1        -1           1         1

Комментариев нет:

Отправить комментарий