imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 13.06.2004, 18:01     # 1
petr()ff
Guest
 
Сообщения: n/a

Exclamation Паскаль! Sos

Привет!

Попадаю с паскалем, до 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
 
Старый 14.06.2004, 15:23     # 2
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
Тут кроме паскаля надо рубить в давно забытой математике ...
Слишком мало времени.
EvroStandart вне форума  
Старый 14.06.2004, 15:41     # 3
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Насчет первого метода, кажись, должно быть так:
Код:
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.
Насчет второго метода - я не понял, что имеется ввиду - метод итераций для решения систем линейных уравнений? или что?

З.Ы. Вот это -
Цитата:
ax^3+bx^2+cx+d=0
ax^2+bx+c=0
- не функции, а уравнения. Так что объясни, это существенно - равенство нулю? а то может просто при каких-нибудь коэффициентах a, b, c и d - оба уравнения будут иметь разные решения, т.е. различные значения x.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!

Последний раз редактировалось Ghost; 14.06.2004 в 15:47.
Ghost вне форума  
Старый 14.06.2004, 17:03     # 4
petr()ff
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
 
Старый 14.06.2004, 18:09     # 5
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Второй метод, вот что получилось:
Код:
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.
После запуска вводишь коэффициенты и первое значение x. Потом программа начинает увеличивать (или уменьшать) x на dx (в начале = 1) до тех пор пока функции не начнут расходиться - тогда прога менят направление dx и уменьшает его. Сей процесс продолжается до тех пор, пока разница между функциями не будет меньше какого-то маленького числа e. Прогу не тестил, но, кажись, сработать должно...

Третий метод, как я понял, фактически состоит в решении уравнения

ax^3 + (b-a)x^2 + (c-b)x + (d-c) = 0

а я, хучь убей, не помню ни методов решения кубических уравнений в общем виде.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!

Последний раз редактировалось Ghost; 14.06.2004 в 18:28.
Ghost вне форума  
Старый 14.06.2004, 20:14     # 6
CaptainFlint
Full Member
 
Аватар для CaptainFlint
 
Регистрация: 19.12.2003
Адрес: Москва
Пол: Male
Сообщения: 514

CaptainFlint Гурее всех гурых :-)
CaptainFlint Гурее всех гурых :-)CaptainFlint Гурее всех гурых :-)
Кубические весьма хреново решаются, надо сказать... Общая идея такова.
Пусть есть уравнение 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 в тригонометрический вид, считаем кубический корень и получаем наши "зеты", все три сразу.
CaptainFlint вне форума  
Старый 17.06.2004, 09:17     # 7
petr()ff
Guest
 
Сообщения: n/a

CaptainFlint и Ghost, еслиб не ваша помощь, подписывал бы щас обходной в институте, огромное спасибо за заботу и содействие!
 


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 19:53.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.