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

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

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

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





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

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


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

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

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

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





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

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


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

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


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

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

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


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

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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Irina
сообщение 13.05.2007 0:23
Сообщение #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 
 К началу страницы 
+ Ответить 
Irina
сообщение 14.05.2007 21:18
Сообщение #5





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

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


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


Новичок
*

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

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


присоединяюсь к просьбе, у меня подобная задача, очень нужна помощь...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 16.05.2007 2:23
Сообщение #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 - 16.05.2007 3:39


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 16.05.2007 5:09
Сообщение #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

 



- Текстовая версия 27.07.2025 11:08
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"