imho.ws |
![]() |
![]() |
![]() |
# 1 |
Guest
Сообщения: n/a
|
![]()
Привет!
Попадаю с паскалем, до 17 июня надо решить, иначе - ВИЛЫ Может сможете помочь моему удручающему положению? Зарание всем спасибо! Задание: Даны две функции ax^3+bx^2+cx+d=0 ax^2+bx+c=0 найти точку пересечения функций тремя способами 1) методом деления отрезка пополам (как я понимаю, в первом цикле задается максимальное и минимальное значение "х" , делится на 2 и выберается та половина где пересекаются функции, и цикл работает до тех пор пока "у" и "х" небудут равными у функций) 2) методом ручного преближения (вводиш "х" получаеш разброс по "у", и так до победы) 3) методом решения уравнений (а здесь тупо вводишь "a,b,c,d,x,y"-получаешь ответ) если конечно я правильно все понимаю... Еще раз всем спасибо! petr()ff |
![]() |
# 3 | |
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Насчет первого метода, кажись, должно быть так:
Код:
uses crt; const e: real = 0.01; { точность } function f (x: real): real; begin f := a * x * x * x + (b - a) * x * x + (c - b) * x + (d - c); end; var a, { коэффициент a } b, { коэффициент b } c, { коэффициент c } d, { коэффициент d } x0, { начало отрезка } xn, { конец отрезка } xm: real; { середина отрезка } begin clrscr; write ('a = '); readln (a); write ('b = '); readln (b); write ('c = '); readln (c); write ('d = '); readln (d); write ('x0 = '); readln (x0); write ('xn = '); readln (xn); repeat xm := (xn + x0) / 2; if (f1 (x0) * f (xm)) < 0 then xn := xm else x0 := xm; until (xn - x0) <= e; xm := (xn + x0) / 2; writeln ('result = ', xm : 8 : 6); readkey; end. З.Ы. Вот это - Цитата:
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! Последний раз редактировалось Ghost; 14.06.2004 в 15:47. |
|
![]() |
![]() |
# 4 |
Guest
Сообщения: n/a
|
Ghost дружище спасибо, за помощь!
Я неправильно написал фунции (ax^3+bx^2+cx+d=0;ax^2+bx+c=0 ) насамом деле они равняются =У , и выглядят так: ax^3+bx^2+cx+d=у ax^2+bx+c=у Это на самом деле функции, графики которых пересекаются , необходимо найти точку пересечения этих функций, Ответ должен выглядеть так- при X=... графики пересекаются (тоесть Y1=Y2) А по поводу второго метода, например при Х=5 графики пересекаются, мы произвольно вводим х=1, получаем ответ,что к примеру У1=1, У2=6, далее вводим Х=2 и видим что при этом значении игрики сближаются и составляют ,к примеру, У1=3 и У2=5, Если вводим Х=10 ,то видим что гафики расходятся, и так МЕТОДОМ РУЧНОГО ПОДБОРА определяем значение Х при котором графики пересекутся, По поводу третьего метода, необходимо алгебраическое решение ЕЩЕ РАЗ СПАСИБО ЗА ПОМОЩЬ!!! petr()ff |
![]() |
# 5 |
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Второй метод, вот что получилось:
Код:
uses crt; var a, b, c, d, x, xn, dx: real; const e: real = 0.01; function f (x: real): real; begin f := a * x * x * x + (b - a) * x * x + (c - b) * x + (d - c); end; begin clrscr; write ('a = '); readln (a); write ('b = '); readln (b); write ('c = '); readln (c); write ('d = '); readln (d); write ('x = '); readln (x); dx := 1; if abs(f(x)) < abs(f(x + dx)) then dx := -1; while f(x) > e do begin xn := x + dx; if abs(f(xn)) > abs(f(x)) else dx := -0.5 * dx; x := xn; end; writeln ('result = ', x : 8 : 6); readkey; end. Третий метод, как я понял, фактически состоит в решении уравнения ax^3 + (b-a)x^2 + (c-b)x + (d-c) = 0 а я, хучь убей, не помню ни методов решения кубических уравнений в общем виде. ![]()
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! Последний раз редактировалось Ghost; 14.06.2004 в 18:28. |
![]() |
![]() |
# 6 |
Full Member
Регистрация: 19.12.2003
Адрес: Москва
Пол: Male
Сообщения: 514
![]() ![]() ![]() |
Кубические весьма хреново решаются, надо сказать...
![]() Пусть есть уравнение ax^3+bx^2+cx+d=0. Делаем подстановку x=z-b/3a, и то, что вышло, делим на a. Тогда наше уравнение превратится в z^3+3pz+2q=0 (коэффициенты 3 и 2 для удобства) Далее считаем... хз, как его называют, обзовём детерминантом: D=sqrt(p^3+q^2). Ну а теперь, z=root3(-q+D)+root(-q-D), x=z-b/3a. root3 - кубический корень. Остальные два корня вычисляются делением исходного уравнения на x-x0, где x0 - найденный корень. Получается квадратное уравнение, а уж его не помню, в каком классе проходят ![]() Осталась одна проблема - что делать, если детерминант не существует, то бишь мнимый (корень из отрицательного числа). Тогда приходится вспоминать теорию комплексных чисел... Всё досконально считать сейчас не буду, вкратце надо воот что сделать: Формула для корня будет выглядеть так: z=root3(a+bi)+root3(a-bi). a и b вычисляются через коэффициенты уравнения. Переводим a+bi в тригонометрический вид, считаем кубический корень и получаем наши "зеты", все три сразу. |
![]() |