Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];

Вниз

Как это смоделировать?   Найти похожие ветки 

 
vasIZmax ©   (2007-12-06 21:08) [0]

Вот дана задача:
Дано нефтяное месторождение, в котором область залегания нефти G ограничивается кривой С. Дебит скважины, т.е. количество получаемой из нее нефти в единицу времени, зависит от пластового давления нефти U в точке скважины. Поэтому для прогнозирования нефтедобычи важно знать распределение пластового давления на всем месторождении при условии, что оно экспериментально измерено лишь на его границе. В математическом плане функция U(r) удовлетворяет уравнению Лапласа (V^2)*U(r) = 0; задача нахождения его решения внутри области при заданном значении U(r) на границе - так называемая, краевая задача Дирихле; в данной задаче это решение, которое часто совсем не просто найти аналитически, позволило бы правильно определить точку для скважины.

Покроем область G мелкой сеткой. Отметим узлы, наиболее близкие к границе С, и будем считать, что значения функции U в этих узлах приблизительно равны значениям этой функции в ближайших к ним точках границы. Будем искать значение функции U(A) в некотором внутреннем узле А.

Поместим в точке А блуждающую частицу, которая может перемещаться по области в последовательные моменты времени, переходя из одного угла в соседний. Направления перемещений случайны, равновероятны и не зависят от ее положения и предыстории блуждания. Случайный эксперимент состоит в наблюдении факта выхода блуждающей частицы в некоторый граничный узел. Когда блуждание прекращается, запоминается значение функции f(ci) в этой точке, и так далее, N раз. Замечательный факт состоит в том, что решение в точке
U(A)=(f(ci)+f(ci)+...+f(cN))/N
Другими словами, среднее значение приближенно равно решению задачи Дирихле в точке А.

Подскажите как это можно смоделировать? Или где "подсмотреть"?


 
boa_kaa ©   (2007-12-06 22:06) [1]

А что вкладывается в понятие "смоделировать"? Насколько я понял прочитанное, ты уже расписал решение.


 
vasIZmax ©   (2007-12-06 22:38) [2]

понять не могу как это все выглядит.
На канвасе нарисовать такую область G и «накрыть» сеткой (ну, это ерунда сделать).
Дальше помешаем точку в этой области (т.е. точку А), и она перемещается «случайно» по заданной области.
Как только достигли границы — то запоминаем значение f(ci) (откуда она появляется тож не понятно).
И так этот процесс повторяется N-раз. Когда достигли N, то вычисляем U(A) (ну просто подставляем в формулу, то понятно).

А смысл в чем?
«Брождение» внутри этой области G пока не будет достигнуто N?


 
boa_kaa ©   (2007-12-06 22:59) [3]

Посмотри пример.
www.npoplz.ru/img/test2.exe

Сначала некотое время будет генерация, потом картина тронется. Размер ~401кб.

Это и есть то, что тебе непонятно или нет?


 
palva ©   (2007-12-06 23:02) [4]

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


 
Юрий Зотов ©   (2007-12-07 00:51) [5]

"Дано нефтяное месторождение..."

Везет же людям.


 
Германн ©   (2007-12-07 01:44) [6]


> Юрий Зотов ©   (07.12.07 00:51) [5]

Угу. Прям завидно. Почему у меня простое "место рождения", а не "месторождение" чего-то ценного?
:)


 
axis_of_evil   (2007-12-07 05:25) [7]

чего не решить уравнение численно? ..


 
Думкин ©   (2007-12-07 06:11) [8]

> axis_of_evil   (07.12.07 05:25) [7]

А он его решает как?


 
KSergey ©   (2007-12-07 07:25) [9]

> boa_kaa ©   (06.12.07 22:59) [3]
> Посмотри пример.
> www.npoplz.ru/img/test2.exe

А на чем написано? В смысле - технологие отрисовки интересует.


 
boa_kaa ©   (2007-12-07 14:11) [10]


> KSergey ©   (07.12.07 07:25) [9]

Конкретно это - OpenGL (ой, кажется :) ). Но это тестовая системка


 
geoquest   (2007-12-07 16:50) [11]


> vasIZmax ©   (06.12.07 21:08)


Или вы решаете абстрактную математическую задачу с вашими условиями без упоминания "месторождения", "скважины", "дебита" и т.д, или ценность вашего решения будет близка к нулю. Потому что на реальных месторождениях всё не так, как у вас написано.


 
vasIZmax ©   (2007-12-13 01:23) [12]

после того как уточнил у преподавателя что именно должно происходить вот что наваял

var
 Form1: TForm1;
 D,T,k,j,x,y,y1,y2,xa,ya:integer;
 UA,S:real;
 st,st1,st2:string;
 a,b:array[1..100] of integer;
 U:array[1..100] of real;
implementation

{$R *.dfm}

Procedure Tochka(x,y:integer);
Begin
form1.Canvas.Pen.Color:=clwhite;
form1.Canvas.Ellipse(x,y,x+10,y+10);
End;

Procedure setka;
var
i:integer;
Begin
form1.Canvas.Pen.Color:=clgreen;
i:=0;
repeat
form1.canvas.MoveTo(i,0);
form1.canvas.LineTo(i,form1.ClientHeight);
i:=i+10;
until i>= form1.ClientWidth;

i:=0;
repeat
form1.canvas.MoveTo(0,i);
form1.canvas.LineTo(form1.ClientWidth,i);
i:=i+10;
until i>= form1.ClientHeight;
End;

Procedure oblast;
var
i:integer;
Begin
form1.Canvas.Pen.Color:=clred;
//отрисовка области
for i:=70 to 540 do
begin
Y1:=ROUND(200*sin(i/150));
Y2:=ROUND(200*sin((i+1)/150));
form1.canvas.MoveTo(i,240-y1);
form1.canvas.LineTo(i+1,240-y2);
end;

for i:=70 to 540 do
begin
Y1:=ROUND(200*cos((i+95)/150));
Y2:=ROUND(200*cos((i+96)/150));
form1.canvas.MoveTo(i,240-y1);
form1.canvas.LineTo(i+1,240-y2);
end;
End;

procedure TForm1.Button1Click(Sender: TObject);
var
n:integer;
begin
D:=0;
setka;
oblast;
randomize;
//указываем количество точек
For n:=1 to 5 do
Begin
//первоначальная точка
x:=320;
xa:=x;
y:=240;
ya:=y;
 repeat
     x:=x+round(random*2-1)*10;
     y:=y+round(random*2-1)*10;
     Tochka(x,y); sleep(100);
     Canvas.Brush.Color := Clblack;
     Canvas.FillRect(Canvas.ClipRect);
     setka;
     oblast;
     Tochka(x,y);
 until (y<=240-200*sin((x)/150))or(y>=240-200*cos((x+95)/150));// проверка границы
 a[n]:=x;
 b[n]:=y;
 U[n]:=2*sqrt(a[n])+b[n]/5;
 End;

 Canvas.Brush.Color := Clwhite;
 Canvas.FillRect(Canvas.ClipRect);
 S:=0;
 For n:=1 to 10 do S:=S+U[n];
     UA:=S/10;
 form1.Canvas.TextOut(100,20,"Давление нефти в точке с координатами xa="+inttostr(xa)+"; ya="+inttostr(ya));
 form1.Canvas.TextOut(300,40,"UA="+floattostr(UA));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Color:=clblack;
form1.Height:=656;
form1.Width:=688;
end;


 
Германн ©   (2007-12-13 01:29) [13]


> vasIZmax ©   (13.12.07 01:23) [12]
>
> после того как уточнил у преподавателя что именно должно
> происходить вот что наваял
>

И что? Ну наваял и наваял. Это что? Гордость за себя? Или всё-таки вопрос?


 
boa_kaa ©   (2007-12-13 01:44) [14]

Все-таки вместо дельфятского {$R *.dfm} мне упорно видится RTFM...


 
vasIZmax ©   (2007-12-13 02:26) [15]


> Германн ©   (13.12.07 01:29) [13]

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


 
Германн ©   (2007-12-13 02:35) [16]


> vasIZmax ©   (13.12.07 02:26) [15]
>
>
> > Германн ©   (13.12.07 01:29) [13]
>
> эт вы к чему?
>

Ну если это твоё решение сабжа, то так и скажи. (без употребления терминов типа "наваял").
И если это решение всех устраевавет, то тоже скажи.


 
vasIZmax ©   (2007-12-13 03:12) [17]


> Ну если это твоё решение сабжа, то так и скажи

да, это мое решение сабжа.


> И если это решение всех устраевавет, то тоже скажи.

маловереоятно что оно будет всех устраивать, т.к. код можно как оптимизировать, так и использовать другой способ реализации, но общий замысел именно такой, какой указан в [12].

/*off
чем плох "термин" "наваял"?
*/


 
Юрий Зотов ©   (2007-12-13 11:13) [18]

Прочитал сабж - сильно зауважал этот ВУЗ.
Глянул на [12] - перестал уважать этот ВУЗ.

> vasIZmax ©   (13.12.07 03:12) [17]
> да, это мое решение сабжа.

[12] - это НЕ решение сабжа. Это всего лишь рисовалка.


 
Anatoly Podgoretsky ©   (2007-12-13 11:27) [19]


> после рекомендаций и советов, уточнения задания и пр., разобрался,
>    показал какое должно быть решение.

Ты уверен, что такое?


 
Romkin ©   (2007-12-13 12:00) [20]

Угу. Рисовалка.
В реальности область задается массивом координат. С давлением.
И у тебя не месторождение, а куст :)
Сетку делаешь сам, и ходишь по ее узлам.
То есть на входе - массив координат и давления (x,y,P) и шаг сетки скорее всего. Ну и количество блужданий, упростим задачу.
На выходе ты должен дать массив давлений.
А рисовалку потом приспособишь :)
И я бы советовал блуждать сразу из всех внутренних точек.
Полностью задача, кстати, вполне тянет если не на диплом, то на хорошую курсовую.


 
Romkin ©   (2007-12-13 12:04) [21]

А нет, статика. Если обеспечивается автовыбор шага сетки и/или количества блужданий - курсовая :)


 
vasIZmax ©   (2007-12-13 20:34) [22]


> Romkin ©   (13.12.07 12:00) [20]

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

если например начать блуждать из всех внутених точек, то это насколько я понял не устраивает задаче той, какая ставится преполдавателем(ему важно показать процесс слуцчайности), хотя я бы так попробывал действовать как вы предлагаете:)
но это не курсовик, и не диплом, а просто зачет:)


> Юрий Зотов ©   (13.12.07 11:13) [18]

возможно. тем не менее подобная рисовалка поможет человеку понять что и как:)


> Anatoly Podgoretsky ©   (13.12.07 11:27) [19]

ну коль нет достойного(/читать как иного) варианта решения задачи... (если не достойного то хотя бы альтенативного)


 
antonn ©   (2007-12-13 23:47) [23]

а что нужно, обвести какой то регион неправильной формы, граница которого есть определенное число? :)


 
Pavia ©   (2007-12-14 00:32) [24]

Нужно про моделировать.
Про моделировать это значит физическую модель описать математически. А после провести ее решение.
Матиматика вся описанна в первом посте. Поясню что нужно пройтись по всем точкам сетки внутри замкнутой облости. Для каждой точке провести N раз блуждание. Как только блуждающая точка доходит до края получаем f(ci) .

Дальше нужно результат моделирования как то представить. Лучше всего ввиде графиков. Либо это 3D сетка где высота точки определяет значение U(A). Либо двух мерный рисунок где при новидении мыши будет выдываться значение U(A).

Также одним из важных моментов является визуализация. К этому относятся какраз графическое  представление результатов. Также помимо прочего можно продимонстрировать как работает сам алгоритм показать блуждания. Но это уже дополнительная нагрузка.

Другими словами vasIZmax - вы сделали не то что нужно.
Вам надо было пройтись по всем точкам. И получить результат. Да и число N=10 слишком маленькое. Надо 1000 чтобы значение было достоверным.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.048 c
4-1182418874
cosinus
2007-06-21 13:41
2008.01.20
Чужой TreeView


2-1198337091
223001
2007-12-22 18:24
2008.01.20
помогите задачу решить


9-1165725158
Архипелаг-ГУЛАГ
2006-12-10 07:32
2008.01.20
Как была создана картинка для демки Archipelago из GLScene ?


2-1197669910
Washington
2007-12-15 01:05
2008.01.20
Мерцание при прорисовке


2-1198171683
AntiPupkin
2007-12-20 20:28
2008.01.20
Заморочка с postmessage()





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский