Разработать программу разложения функции ln(1-x-6x^2) в ряд Тейлора по степени X-A.
Исходные данные: a=0.
Программа должна содержать удобный пользовательский интерфейс (меню пользователя, краткие сведения о программе, возможность просмотреть результат в виде таблицы значений, график функции, возможность просмотра текста программы с комментариями и пояснениями). При написании программы учесть автоматическое масштабирование, название графика, метки на осях и обозначение осей.
Помогите сделать) Ну или опишите что и как реализовать)
5 апреля 2008 в 8:04
Всё уже, заставил работать программу дописав:
if ((1-3*x)>0)AND(1+2*x>0) then
Begin
PHI := ln(1-3*x)+ln(1+2*x);{Funkciya, grafik kotoroi stroim}
End
5 апреля 2008 в 2:01
1) У тебя функция определена на интервале (-1/2; 1/3), а ты ее вычисляешь на отрезке [-2; 30]/
2) Лихо ты конечно упростил, мало того, что заставил машину логарифм два раза считать, так, еще и переопределил область определения
4 апреля 2008 в 21:04
В общем разложение я выполнил нужное, теперь косяки с выводом графика. (моя функция от которой нужен график – ln(1-x-6x^2), для простоты разложили её на ln(1-3x)(1+2x)=ln(1-3x)+ln(1+2x)
Программа вылетает с ошибкой "207: Invalid floating point operation", она как я понял вызвана наличием логарифма. Что делать и чем это можно вылечить?
Вот собственно кусок программы:
=========================
USES GRAPH,CRT;
FUNCTION PHI ( X:extended ):extended;
BEGIN
PHI := ln(1-3*x)+ln(1+2*x); ███подставляю функцию███
END;
VAR
GRAPHDRIVER,
GRAPHMODE : INTEGER;
IX2 : double;
IX, IY, IX1, IY1, I : INTEGER;
ErrorCode : Integer;
procedure MyGraphInit;
begin
GraphDriver := Detect;
InitGraph(GraphDriver, GraphMode, '');
ErrorCode := GraphResult;
if ErrorCode <> grOk then
begin
writeln('InitGraph Error: ',GraphErrorMsg(ErrorCode));
Writeln('Program is aborted!');
Halt (1);
end;
end;
begin
CLRSCR;
MyGraphInit;
{——–Vivod koordinatnix osei———-}
SETLINESTYLE (SOLIDLN, 0, NORMWIDTH);
LINE(100,450,100,50); LINE(50,400,600,400);
LINE(100,50,95,65);
LINE(100,50,105,65);
LINE(600,400,580,395);
LINE(600,400,580,405);
OUTTEXTXY(90,410,'0');
OUTTEXTXY(87,375,'1');
OUTTEXTXY(87,275,'5');
OUTTEXTXY(80,150,'10');
OUTTEXTXY(80,60,'Y');
LINE(95,375,105,375);
LINE(95,350,105,350);
LINE(95,325,105,325);
LINE(95,300,105,300);
LINE(95,275,105,275);
LINE(95,250,105,250);
LINE(95,225,105,225);
LINE(95,200,105,200);
LINE(95,175,105,175);
LINE(95,150,105,150);
OUTTEXTXY(150,405,'1');
LINE(150,395,150,405);
OUTTEXTXY(200,405,'2');
LINE(200,395,200,405);
OUTTEXTXY(250,405,'3');
LINE(250,395,250,405);
OUTTEXTXY(300,405,'4');
LINE(300,395,300,405);
OUTTEXTXY(350,405,'5');
LINE(350,395,350,405);
OUTTEXTXY(400,405,'6');
LINE(400,395,400,405);
OUTTEXTXY(450,405,'7');
LINE(450,395,450,405);
OUTTEXTXY(500,405,'8');
LINE(500,395,500,405);
OUTTEXTXY(550,405,'9');
LINE(550,395,550,405);
OUTTEXTXY(590,415,'X');
IX := 0;
IY := 0;
IX1:= 0;
IY1:= 0;
IX2:= 0;
SETCOLOR(10);
{——-ПОСТРОЕНИЕ ГРАФИКА Ф-ИИ————}
FOR I := 0 TO 640 DO BEGIN
IX2 := I/20-2;
if IX2 = 0 then IX2:=0.01;
IY := ROUND(400 – 25*PHI(IX2));
IX := TRUNC(100 + 50*IX2);
IF I > 0 THEN
LINE(IX1,IY1,IX,IY);
IX1 := IX;
IY1 := IY;
END;
READLN;
closegraph;
END.
===========================
28 марта 2008 в 1:00
Помочь можем, а вот делать мне лично лень, да и некогда
Еще раз говорю – найдаи аналитический вид n-ой производной двоей функции.
Подсказка: свою функцию запиши в виде f(x) = ln(g(x)), где g(x) = 1-x-6x^2. При этом получаем, что g'(x) = -12x – 1, g''(x) = -12, g'''(x) = 0. Тогда имеем:
f'(x) = g'(x)/g(x)
f''(x) = [g''(x)g(x) - (g'(x))^2]/(g(x))^2
и т.д.
Считаешь 3-5 производную и находишь общую формулу. Так в знаменателл у тебя всегда будет (g(x))^n где n – это порядок ароизводной
27 марта 2008 в 18:03
Эх, видать никто не в силах мне помочь)
27 марта 2008 в 18:02
Сочувствую…
Помню как сам парился, правда с Рунге-Кутта 4 порядка, и не в паскаль а в билдере.
Вопрос очень интересный, надо подумать…
25 марта 2008 в 23:02
Насколько я понимаю, ряд тейлора описывает функцию через её производные, и что тебе мешает их найти если функция у тебя задана? Или я что-то непонимаю?
25 марта 2008 в 22:01
Я там был, ничем не помогло, т.к. функции моей там нет и как в Паскале все это сделать не понятно…
25 марта 2008 в 21:04
//ru.wikipedia.org/wiki/Ряд_Тейлора
25 марта 2008 в 20:05
Пользовательский интерфейс готов, хы. Найдитесь добрые люди, кто смог бы хотя бы на бумаге разложить функцию по данным выше критериям, а в паскале все пошагово реализуем, а там и графики приделаю.
25 марта 2008 в 18:00
А по-русски?) Составьте мне плиз кусок программы где все это вычисляется и рисуется график, плиз)
25 марта 2008 в 17:05
Ищи аналитический вид n-ой производной функции а в точке 0
25 марта 2008 в 17:01
> возможность просмотра текста программы с комментариями и пояснениями
Не обсуждаем эту "тему", в задании её указали, т.к. кто-то может написать прогу без комментов внутри.
25 марта 2008 в 17:00
На turbo pascal??? O_o Удачи…
25 марта 2008 в 17:00
2Антон Щиров, да, именно Turbo Pascal. Интерфейс я уже сделал без Turbo Vision, вывел окно расчерченное, выбираем пункт меню и переходим к нужному действию.
Теперь нужно как-то реализовать разложение в ряд Тейлора по степени X-A функции ln(1-x-6x^2) и построить график. Может кто помочь?)
2Саня Шевченко, а в чем проблема?)
25 марта 2008 в 17:00
> возможность просмотра текста программы с комментариями и пояснениями
дада) мне тоже интересна реализация этой темы
25 марта 2008 в 15:04
Turbo Vision в зубы
А точно нужен Turbo Pascal? На Delphi на порядок проще будет
2All А самое интересное вот это
> возможность просмотра текста программы с комментариями и пояснениями)