IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> решение кубического уравнения
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


в общем пишу курсовик, нужна помощь
задание решение уравнений с одной переменной
линейное уравнение типа ax+b=0
квадратное уравнение ax^2+bx+c=0
были решены, загвоздка в кубическом уравнении x^3+ax^2+bx+c=0
прошу помочь решить, заранее спасибо

вот листинг программы
var a,b,c,d,x1,x2,x3,q,r,t : real;
begin
label14.Caption := '';
label15.Caption := '';
label16.Caption := '';
if radiobutton3.Checked = true then //ax+b=0
begin
a:=strtofloat(edit7.text);
b:=strtofloat(edit8.text);
x1:=-b/a;
label14.Caption :=floattostr (x1);
end
else if radiobutton2.Checked = true then //ax2+bx+c=0
begin
a:=strtofloat(edit4.text);
b:=strtofloat(edit5.text);
c:=strtofloat(edit6.text);
D:=b*b-4*a*c ;
if D>=0 then
begin
x1:=(-b-sqrt(d))/2*a;
x2:=(-b+sqrt(d))/2*a;
label14.Caption := floattostr(x1);
label15.Caption := floattostr(x2);
end
else
label14.Caption := 'уравнение не имеет корней';

end
else if radiobutton1.Checked = true then //x3+ax2+bx+c=0
begin
a:=strtofloat(edit1.text);
b:=strtofloat(edit2.text);
c:=strtofloat(edit3.text);
q:=(a*a-3*b)/9;
r:=(2*a*a*a-9*a*b+27*c)/54;
if r*r<q*q*q then
begin
{ t:=arccos(R/sqrt(q*q*q))/3; } //не работает, воспринимает почемуто arccos как переменную
x1:=-2*sqrt(q)*cos(t)-a/3;
x2:=-2*sqrt(q)*cos(t+(2*3.14/3))-a/3;
x3:=-2*sqrt(q)*cos(t-(2*3.14/3))-a/3;
label14.Caption := floattostr(x1);
label15.Caption := floattostr(x2);
label16.Caption := floattostr(x3);

end
else
begin
// дальше честно не знаю, как делать
end;
end;
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 5)
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


посмотри эту тему:
Численные методы решения уравнений
или смотри в сторону формулы Кардано:
http://www.school.mipt.ru/Forum.asp?ForumI...e=5&MsgID=22149
http://ru.wikipedia.org/wiki/Формула_Кардано

Сообщение отредактировано: мисс_граффити -


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


тогда ещё несколько вопросов blink.gif
допустим это я вычислю Q=(a2-3b)/9, R=(2a3-9ab+27c)/54
A=-sign®[|R|+sqrt(R2-Q3)]1/3 а как понять эту формулу и какой у неё будет синтаксис в дельфи?
B=Q/A при A!=0 или B=0 при A=0.

Сообщение отредактировано: BorisON -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 38
Пол: Мужской

Репутация: -  0  +


sqrt - это корень. sign вообще по идее значит signum (от лат. "знак").
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Цитата
B=Q/A при A!=0 или B=0 при A=0.

if (A<>0) then
B:=Q/A
else
B:=0;

это в идеале. но поскольку для вещественных чисел существует погрешность, лучше написать
if abs(A)>eps then
B:=Q/A
else
B:=0;

где eps-некоторое маленькое положительное число (например, 0.00001)

Сообщение отредактировано: мисс_граффити -


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


ладно, мы не ищем простых решений
вот переделанный код
появилась ошибка "invalid floating point operation"
просьба помочь с решением проблемы!
вот листинг программы
  begin
a:=strtofloat(edit1.text);
b:=strtofloat(edit2.text);
c:=strtofloat(edit3.text);
d:=strtofloat(edit9.text);
p:=-(b*b)/(3*a*a)+c/a;
q:=(2*b*b*b)/(27*a*a*a)-(b*c)/(3*a*a);
a1:=(-q/2)+sqrt((q*q)/4+(p*p*p)/27);
a1:=exp((1/3) * ln(a1));
b1:=(-q/2)-sqrt((q*q)/4+(p*p*p)/27);
b1:=exp((1/3) * ln(b1));
if (q*q)/4+(p*p*p)/27>0 then
begin
x1:=a1+b1;
x2:=-0.5*(a1+b1)+(sqrt(3)/2)*(a1-b1);
x3:=-0.5*(a1+b1)-(sqrt(3)/2)*(a1-b1);
end
else if (q*q)/4+(p*p*p)/27=0 then
begin
x1:=2*a1;
x2:=-a1;
x3:=-a1;
end
else
showmessage('введите корректные значения');

label14.Caption := floattostr(x1);
label15.Caption := floattostr(x2);
label16.Caption := floattostr(x3);
end;


Сообщение отредактировано: BorisON -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 19:39
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name