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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Lapp
сообщение 16.05.2007 5:09
Сообщение #2


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

Группа: Модераторы
Сообщений: 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:10
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"