Помощь - Поиск - Пользователи - Календарь
Полная версия: Что значит построить фигуру Лиссажу конечно-разностным методом?
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Igor_Fist
Всем привет! В паскале я чайник sad.gif Вот дали задание,помогите пожалуйста:

Построить фигуру Лиссажу путем генерации сигналов y=sinx и y=cosx по ортогональным осям. Вычисления производить путем поперменной генерации сигналов конечно-разностным методом в интервале изменения аргумента 0...2pi. Обеспечить ошибку относительно системных функций e=10^(-5).Вывод информации графический с текстовым контролем ошибок.

Заранее спасибо! smile.gif
TarasBer
Сам-то пробовал что? С нуля полностью делать за тебя никто ничего не будет.
Igor_Fist
я не понимаю как сделать конечно-разностным методом unsure.gif
TarasBer
Это очень умное слово для решения дифуров, в данном случае оно только пафос нагоняет.

В общем это типа вместо того, чтобы рисовать все точки (это невозможно на компе), рисуются только точки, соответствующие
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

ToScreen(sin(t*2), cos(t*3)) - что делает toscreen?
TarasBer
Ну это я оставил простор для фнтазии. Типа ты сам опиши процедуру, которая принимает два вещественных числа (координаты) и выводит точку на экран в нужное место, с учётом размера и положения окна.
Igor_Fist
Вот само задание:
Построить фигуру Лиссажу путем генерации сигналов y=sinx и y=cosx по ортогональным осям. Вычисления производить путем поперменной генерации сигналов конечно-разностным методом в интервале изменения аргумента 0...2pi. Обеспечить ошибку относительно системных функций e=10^(-5).Вывод информации графический с текстовым контролем ошибок.

Я не могу понять этй фразу:Вычисления производить путем поперменной генерации сигналов конечно-разностным методом в интервале изменения аргумента 0...2pi.

помогите пожалуйста!натолкните на путь истиный smile.gif
TarasBer
Это значит, что не надо дважды одну тему создавать.

Фигура лиссажу
Igor_Fist
сорри,но я создал потому что всё равно не понял((конечно-разностный метод он используется для решения диф.кравнений,а для чего тут он?здесь какие диф.уравнения?и можт здесь конечно-разностная интерполяция используется?
Lapp
Цитата(Igor_Fist @ 14.12.2010 18:10) *
сорри,но я создал потому что всё равно не понял((конечно-разностный метод он используется для решения диф.кравнений,а для чего тут он?здесь какие диф.уравнения?и можт здесь конечно-разностная интерполяция используется?
Игорь, этого тут никто не понял. И именно это тебе пытались сказать. Может, ты не совсем точно привел условие? Перепиши его полностью и без каких-либо изменений.

Темы объединяю.

Добавлено через 4 мин.
Перечитав изначальную формулировку условия, я подумал, что тебе нужно было sin и cos рассчитывать конечно-разностным методом (а не использовать библиотечные). То есть получить их из решения некоторого диффура (с точностью 10-5). Какого именно - вопрос пока открыт.
Igor_Fist
Задание привел точно как дали.вот и сам то думаю для чего он тут конечно-разностный метод.
Код

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;

begin

     driver:=detect;
     initgraph(driver,mode, ' ');
     x0:=-1.2;
     y0:=-1.2;
     kx:=getmaxx/2.4;
     ky:=getmaxy/2.4;

     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
Цитата(Igor_Fist @ 15.12.2010 0:16) *
Задание привел точно как дали.вот и сам то думаю для чего он тут конечно-разностный метод.
Ну ясно же написано:
Цитата
путем генерации сигналов конечно-разностным методом

Видишь? Не строить фигуру к.-р. методом, а именно генерировать сигналы.
Но только ясности это прибавляет не очень много. Похоже, что тебе надо смоделировать какой-то процесс (и для этого решать диффур).
А ты не можешь спросить у преподавателя, что имелось в виду?
Igor_Fist
Цитата(Lapp @ 15.12.2010 0:23) *

Ну ясно же написано:

Видишь? Не строить фигуру к.-р. методом, а именно генерировать сигналы.
Но только ясности это прибавляет не очень много. Похоже, что тебе надо смоделировать какой-то процесс (и для этого решать диффур).
А ты не можешь спросить у преподавателя, что имелось в виду?


У преподавателя спросить смогу завтра..точнее уже сегодня
Igor_Fist
проконсультировался с преподавателем.Этот метод описывается в его книге
В этом методе 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 моделируются попеременно.
Метод конечно-разностной генерации имеет недостаток накопления ошибок. Ошибка увеличивается к последующим шагам. Когда она превышает допустимые значения, необходимо произвести коррекцию путем нового вычисления разгонных точек.
Lapp
Цитата(Igor_Fist @ 15.12.2010 19:37) *

Представим сигналы в виде:
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
> Когда она превышает допустимые значения

Как это определять? Заранее на бумаге вычислить кол-во итераций, через которые надо делать коррекцию?
Igor_Fist
Цитата(Lapp @ 16.12.2010 11:40) *

Игорь, в форме ответа есть нижние индексы (sub). Пожалуйста, перепиши сообщение (если тебе все еще нужна помощь). Очень трудно такое понимать. И умножение обозначь яснее..

прикрепил файл с этим методом,то что нужно в конце

Добавлено через 3 мин.
Цитата
> Когда она превышает допустимые значения

Как это определять? Заранее на бумаге вычислить кол-во итераций, через которые надо делать коррекцию?

ничего заранее вычислять вроде бы не надо,если ошибка будет превышать заданную,то необходимо изменить шаг моделирования
TarasBer
> если ошибка будет превышать заданную

> Как это определять?
Igor_Fist
Цитата(TarasBer @ 16.12.2010 15:05) *

> если ошибка будет превышать заданную

> Как это определять?

необходимо взять какое то одно значение аргумента для двух методов и сравнить результаты и вот чтоб погрешность эта не превышла заданную
TarasBer
Ну и какой тогда смысл этого метода, если всё равно надо для сравнения считать по-старому? Смысл-то в быстром расчёте следующего положения, чтобы не считать синусы и косинусы каждый раз!
Я пока склоняюсь к
> Заранее на бумаге вычислить кол-во итераций, через которые надо делать коррекцию?
Igor_Fist
Цитата(TarasBer @ 16.12.2010 15:39) *

Ну и какой тогда смысл этого метода, если всё равно надо для сравнения считать по-старому? Смысл-то в быстром расчёте следующего положения, чтобы не считать синусы и косинусы каждый раз!
Я пока склоняюсь к
> Заранее на бумаге вычислить кол-во итераций, через которые надо делать коррекцию?

ну так мне препод сказал
TarasBer
Ты ему мой вопрос передай, чтобы уточнить, что он таки имел в виду.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.