IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> ЗАДАЧА НА ЧИСЛЕННЫЕ МЕТОДЫ, помогите, пожалуйста, с задачкой или подскажите, где можно посмотреть
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Irina

Репутация: -  0  +


Мне нужно сделать задачку на численные методы на Паскале, но вот , к сожалению, нигде не могу найти ничего подобного: ни в интернете, ни на форуме... Посмотрите, пожалуйста. Если знаете, как делать, то подскажите. Может быть , где-то есть что-то подобное?

ЗАДАЧА:
Найти минимум функции f(x,y) при условии g(x,y)=0 методом сканирования.

Ну вообще, я так понимаю, что в данном случаи нужно использовать двумерное сканирование, то есть сканировать обе оси :х и у. Только вот тут не получится, как при одномерном сканировании ориентироваться на перемену знака, тут придется пользоваться малостью функции /f(x,y)/<e.

Пожалуйста, если знаете , как реализовать эту задачу на паскале, то подскажите)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Irina

Репутация: -  0  +


неужели эта задача на самом деле нерешаемая? wacko.gif

Сообщение отредактировано: Irina -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Irina @ 9.05.2007 22:31) *

если знаете , как реализовать эту задачу на паскале, то подскажите)
Irina, реализация на Паскале - дело нехитрое, я обещаю помочь, если никто раньше меня не сделает.
Но главное - уяснить алгоритм.
Хочешь, я скажу тебе, почему тебе никто не ответил раньше? Потому что условие несколько путаное. То есть со сканированием все более-менее ясно (хотя и не все), но потом ты добавляешь какие-то слова про малость функции и смену знака, и эти слова полностью сбивают с толку. При чем тут это? Какая связь минимума со знаком? Минимум может быть и положительный, и отрицательный, и ноль.. Сравнивать нужно только соседние значения функции (ну, или не только соседние) при этом условие типа:
A[i,j] < A[k,l]
- не имеет никакого отношения к знакам, на первый взгляд.. Если я что-то упускаю или не так понимаю метод сканирования, пожалуйста, поясни. И вообще, изложи чуть более точно этот метод. Было бы неплохо просто скопировать пару предложений из учебника или конспекта...
А написать программу сложности никакой не представит smile.gif.
Ну, давай, успехов.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Irina

Репутация: -  0  +


Lapp, во-первых, большое спасибо за то , что откликнулся на просьбу и готов помочь.
Просто, на самом деле, я не очень понимаю, что нужно сделать, поэтому и обратилась за помощью... если б имела понятие, то пыталась бы всеми силами сама сделать. А тут даже не знаю, за что уцепиться.
Насчет метода сканирования я тоже толком не знаю. Это задание нам на самоизучение, а в интернете никакого достойного материала я не нашла, к сожалению. Знаю только то, что в алгоритме метода сканирования функция просматривается достаточно малыми шагами h : но тут дело в том, что надо просматривать не просто одну ось x, а надо, как я понимаю проходить по узлам плоскости. И еще , вроде бы функция g(x,y) именно 0 значение не примет, поэтому придется использовать что-то типа if abs(g(x,y))<10^(-7) и т.п...
Lapp, если не сложно, помоги сделать.* чувствую себя в эту минуту жутко тупой, мне стыдно*, но сама не могу справиться.

еще небольшое уточнение: появились точные значения функций:
f=x+y
g=x^2+y^2-5
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 4
Пол: Мужской
Реальное имя: Irina

Репутация: -  0  +


Пожалуйста, посмотрите хоть кто-нибудь... подкиньте идею, если знаете)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской
Реальное имя: Дмитрий

Репутация: -  0  +


присоединяюсь к просьбе, у меня подобная задача, очень нужна помощь...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Irina, извини, я просто случайно пропустил твою тему.. Исправлюсь.
Цитата(Irina @ 13.05.2007 1:23) *

в алгоритме метода сканирования функция просматривается достаточно малыми шагами h : но тут дело в том, что надо просматривать не просто одну ось x, а надо, как я понимаю проходить по узлам плоскости. И еще , вроде бы функция g(x,y) именно 0 значение не примет, поэтому придется использовать что-то типа if abs(g(x,y))<10^(-7) и т.п...
Lapp, если не сложно, помоги сделать.* чувствую себя в эту минуту жутко тупой, мне стыдно*

Если сканирование означает просто перебор значений функции - то без разницы: одномерная она, двумерная или десятимерная.
Сравнение с нулем действительно придется проводить с некоторой точностью (сначала я не совсем понял о чем речь). Естественно при этом в качестве точности брать, например, шаг сканирования. Можно также вводить значение точности как дополнительный параметр.

Чего тут стыдного?.. blink.gif не говори ерунды. Тот, кто хочет списать, обмануть - он обманет и не покраснеет. Тот, кто хочет разобраться - тот должен спрашивать. Это самый эффективный и по сути единственно верный способ образования. Так что, если ты "второго типа" smile.gif, то совершенно не нужно извиняться. Для того и форум.

Итак, тебе просто нужно организовать двойной цикл по координатам. Не совсем ясно, как выбрать границы сканирования. У тебя есть идеи?
Прогу я набросаю в общих чертах и кину сюда.

Сообщение отредактировано: Lapp -


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Вот пример кода.
Я сделал ввод границ области сканирования и точности с клавиатуры. Рассмотри внимательно и разберись. Я написал некоторые комментарии, но ты спрашивай, если что непонятно.
function F(x,y:real):real;
begin
F:=x+y
end;

function G(x,y:real):real;
begin
G:=x*x+y*y-5
end;

var
x,x1,x2,xn,y,y1,y2,yn,s:real;
Flag:boolean;

begin
WriteLn('Введите границы области поиска:');
Write('x1='); ReadLn(x1);
Write('x2='); ReadLn(x2);
Write('y1='); ReadLn(y1);
Write('y2='); ReadLn(y2);
Write('Шаг сканирования s='); ReadLn(s);

Flag:=true; {признак поиска первой точки уд.условию}
y:=y1; {начало по y}
while y<=y2 do begin
x:=x1; {начало по x}
while x<=x2 do begin
if Abs(G(x,y))<s then begin {точка удовлетворяет условию}
if Flag then begin {это была первая точка уд.условию}
Flag:=False; {сбросили флаг}
xn:=x; yn:=y {запомнили точку}
end
else if F(x,y)<F(xn,yn) then begin {если значение F меньше имеющегося}
xn:=x; yn:=y {запомнили точку минимума}
end
end;
x:=x+s {продвигаемся по x}
end;
y:=y+s {продвигаемся по y}
end;
WriteLn('Минимум достигается в точке: x=',xn:5:8,' y=',yn:5:8);
ReadLn
end.
Учти, что метод этот довольно медленный! Если я задаю границы по обеим координатам от -10 до 10, а точность 0.001, то время расчета на моем P4 @ 1.7 ГГц больше полминуты. Когда разберешься с общим алгоритмом, можно будет заняться оптимизацией. Для этого есть ресурсы, хотя алгоритм (я имею в виду сканирование), конечно, принципиально небыстрый.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 18:32
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name