Всем привет! В паскале я чайник Вот дали задание,помогите пожалуйста:
Построить фигуру Лиссажу путем генерации сигналов y=sinx и y=cosx по ортогональным осям. Вычисления производить путем поперменной генерации сигналов конечно-разностным методом в интервале изменения аргумента 0...2pi. Обеспечить ошибку относительно системных функций e=10^(-5).Вывод информации графический с текстовым контролем ошибок.
Заранее спасибо!
TarasBer
11.12.2010 3:25
Сам-то пробовал что? С нуля полностью делать за тебя никто ничего не будет.
Igor_Fist
11.12.2010 3:38
я не понимаю как сделать конечно-разностным методом
TarasBer
11.12.2010 3:56
Это очень умное слово для решения дифуров, в данном случае оно только пафос нагоняет.
В общем это типа вместо того, чтобы рисовать все точки (это невозможно на компе), рисуются только точки, соответствующие t0 = 0 t1 = h t2 = 2*h .... tN = N*h (N и h выбирается так, чтобы картинка была красивой, например, h = 0.001, H = trunc(2*Pi/h)) И для каждого такого момента t рисуется своя точка (с координатами sin(t*2), cos(t*3), например).
То есть вывод делается таким циклом:
for i := 0 to N do begin t := i*h; ToScreen(sin(t*2), cos(t*3)); end;
Igor_Fist
11.12.2010 4:21
ToScreen(sin(t*2), cos(t*3)) - что делает toscreen?
TarasBer
11.12.2010 4:31
Ну это я оставил простор для фнтазии. Типа ты сам опиши процедуру, которая принимает два вещественных числа (координаты) и выводит точку на экран в нужное место, с учётом размера и положения окна.
Igor_Fist
14.12.2010 21:57
Вот само задание: Построить фигуру Лиссажу путем генерации сигналов y=sinx и y=cosx по ортогональным осям. Вычисления производить путем поперменной генерации сигналов конечно-разностным методом в интервале изменения аргумента 0...2pi. Обеспечить ошибку относительно системных функций e=10^(-5).Вывод информации графический с текстовым контролем ошибок.
Я не могу понять этй фразу:Вычисления производить путем поперменной генерации сигналов конечно-разностным методом в интервале изменения аргумента 0...2pi.
помогите пожалуйста!натолкните на путь истиный
TarasBer
14.12.2010 22:05
Это значит, что не надо дважды одну тему создавать.
сорри,но я создал потому что всё равно не понял((конечно-разностный метод он используется для решения диф.кравнений,а для чего тут он?здесь какие диф.уравнения?и можт здесь конечно-разностная интерполяция используется?
Lapp
15.12.2010 2:00
Цитата(Igor_Fist @ 14.12.2010 18:10)
сорри,но я создал потому что всё равно не понял((конечно-разностный метод он используется для решения диф.кравнений,а для чего тут он?здесь какие диф.уравнения?и можт здесь конечно-разностная интерполяция используется?
Игорь, этого тут никто не понял. И именно это тебе пытались сказать. Может, ты не совсем точно привел условие? Перепиши его полностью и без каких-либо изменений.
Темы объединяю.
Добавлено через 4 мин. Перечитав изначальную формулировку условия, я подумал, что тебе нужно было sin и cos рассчитывать конечно-разностным методом (а не использовать библиотечные). То есть получить их из решения некоторого диффура (с точностью 10-5). Какого именно - вопрос пока открыт.
Igor_Fist
15.12.2010 4:16
Задание привел точно как дали.вот и сам то думаю для чего он тут конечно-разностный метод.
Код
Program lissagu; uses graph,crt;
var driver,mode,i:integer; x0,y0,kx,ky:real; h,w1,w2:real; n:integer;
function XX(x:real):integer; begin XX:=round((x-x0)*kx); end;
function YY(y:real):integer; begin YY:=getmaxy-round((y-y0)*ky); end;
n:=100; h:=2*pi/n; w1:=2*pi/2; w2:=2*pi/6; moveto(XX(0),YY(1)); for i:=1 to n do lineto(XX(sin(w1*i*h)),YY(cos(w2*i*h))); writeln('figura lissaju'); readln; end.
есть программа без использования этого метода и без обеспечения ошибки относительно системных функций,и вот как тут это все применить
Lapp
15.12.2010 4:23
Цитата(Igor_Fist @ 15.12.2010 0:16)
Задание привел точно как дали.вот и сам то думаю для чего он тут конечно-разностный метод.
Ну ясно же написано:
Цитата
путем генерации сигналов конечно-разностным методом
Видишь? Не строить фигуру к.-р. методом, а именно генерировать сигналы. Но только ясности это прибавляет не очень много. Похоже, что тебе надо смоделировать какой-то процесс (и для этого решать диффур). А ты не можешь спросить у преподавателя, что имелось в виду?
Igor_Fist
15.12.2010 4:26
Цитата(Lapp @ 15.12.2010 0:23)
Ну ясно же написано:
Видишь? Не строить фигуру к.-р. методом, а именно генерировать сигналы. Но только ясности это прибавляет не очень много. Похоже, что тебе надо смоделировать какой-то процесс (и для этого решать диффур). А ты не можешь спросить у преподавателя, что имелось в виду?
У преподавателя спросить смогу завтра..точнее уже сегодня
Igor_Fist
15.12.2010 23:37
проконсультировался с преподавателем.Этот метод описывается в его книге В этом методе sin и cos не считаются. ошибка относительно системных функций берется из разницы конечно-разностного метода и метода когда фигура строится при помощи системы
смоделировать сигналы S1=sin(wt); S2 = cos(wt). Представим сигналы в виде: S1,n+1 = sin( w (tn+dt) ) = sinwtncoswdt + cosw; S2, n+1 = cos(w (tn+dt) )= coswtncoswdt - sinwtnsinwdt; или S1,n+1 =S1,nh1 + S2,nh2; S2,n+1=S2,nh1- S1,nh2; где h1= cos(wdt); h2= sin(wdt); S1,0= 0; S2,0= 1. Сигналы S1,n+1, S2,n+1 моделируются попеременно. Метод конечно-разностной генерации имеет недостаток накопления ошибок. Ошибка увеличивается к последующим шагам. Когда она превышает допустимые значения, необходимо произвести коррекцию путем нового вычисления разгонных точек.
Игорь, в форме ответа есть нижние индексы (sub). Пожалуйста, перепиши сообщение (если тебе все еще нужна помощь). Очень трудно такое понимать. И умножение обозначь яснее..
TarasBer
16.12.2010 16:03
> Когда она превышает допустимые значения
Как это определять? Заранее на бумаге вычислить кол-во итераций, через которые надо делать коррекцию?
Igor_Fist
16.12.2010 17:07
Цитата(Lapp @ 16.12.2010 11:40)
Игорь, в форме ответа есть нижние индексы (sub). Пожалуйста, перепиши сообщение (если тебе все еще нужна помощь). Очень трудно такое понимать. И умножение обозначь яснее..
прикрепил файл с этим методом,то что нужно в конце
Добавлено через 3 мин.
Цитата
> Когда она превышает допустимые значения
Как это определять? Заранее на бумаге вычислить кол-во итераций, через которые надо делать коррекцию?
ничего заранее вычислять вроде бы не надо,если ошибка будет превышать заданную,то необходимо изменить шаг моделирования
TarasBer
16.12.2010 19:05
> если ошибка будет превышать заданную
> Как это определять?
Igor_Fist
16.12.2010 19:28
Цитата(TarasBer @ 16.12.2010 15:05)
> если ошибка будет превышать заданную
> Как это определять?
необходимо взять какое то одно значение аргумента для двух методов и сравнить результаты и вот чтоб погрешность эта не превышла заданную
TarasBer
16.12.2010 19:39
Ну и какой тогда смысл этого метода, если всё равно надо для сравнения считать по-старому? Смысл-то в быстром расчёте следующего положения, чтобы не считать синусы и косинусы каждый раз! Я пока склоняюсь к > Заранее на бумаге вычислить кол-во итераций, через которые надо делать коррекцию?
Igor_Fist
16.12.2010 20:06
Цитата(TarasBer @ 16.12.2010 15:39)
Ну и какой тогда смысл этого метода, если всё равно надо для сравнения считать по-старому? Смысл-то в быстром расчёте следующего положения, чтобы не считать синусы и косинусы каждый раз! Я пока склоняюсь к > Заранее на бумаге вычислить кол-во итераций, через которые надо делать коррекцию?
ну так мне препод сказал
TarasBer
16.12.2010 20:32
Ты ему мой вопрос передай, чтобы уточнить, что он таки имел в виду.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.