Sunday, April 19, 2015

Нюфлотоор гурван хэмжээст дүрслэл /3D visualizations with Gnuplot/

Гурван хэмжээст дүрслэл

Математик загварчлалын эцсийн илрэл бол графо-дүрслэл юм. Өмнөх заавруудыг эндээс уншина уу.  Дараах төрлийн график байгуулах код, жорыг авч үзье. 
  • Гадаргуу байгуулах
  • Координаттай зураглал хэрэглэх
  • Гадаргууг өнгөөр ялгах
  • Контур график байгуулах
  • Вектор график байгуулах
  • Зурагт болон дулаан тархалтын график байгуулах
  • Контур болон зурагт графикийг хослуулах

Ихэнх тайлан, өгүүлэлд нэг хэмжигдэхүүн нөгөөгийн эсрэг, эсвэл хоёр координатад гуравдах утга харгалзсан гэх мэт хоёр тэнхлэгт графикууд ихэвчлэн тааралддаг. Эдгээр нь хоёр хэмжээст график юм. Хоёр хувьсагчаас хамаарах гуравдахь хэмжигдэхүүн нь гадаргуу, контур, орон, мөр буюу траектор, эсвэл эдгээрийн хослолыг илэрхийлсэнээр гурван хэмжээст график бий болно.

Гадаргуу үүсгэх

Гадаргуу нь хамааралтай тоо хэмжээ болох z – ийг үзүүлэх ба энэ нь үл хамааралтай хувьсагч болон х ба y – ээс хамаарна. Гадаргуу нь z – ийн өндөрийг ялган харуулах болно.
Доорхи үзүүлэх график нь Весселийн функцыг J0(r) харуулах ба r нь координатын эхээс (x=0, y=0) эхлэх зай юм. Гадаргуугын өндөр нь J0 – ийн утгыг харуулах ба босоо тэнхлэгт өгөгдөнө.

Figure 8. Гадаргуу байгуулах
Дээрх графикийн байгуулахдаа дараах кодийг бичнэ.
set isosamples 40
unset key
set title "J_0(r^2)"
set xrange [-4:4]
set yrange [-4:4]
set ztics 1
splot besj0(x**2+y**2)
set view 29,53 #хулганы тусламжтай харах байрлалыг тохируулна.
set term pngcairo mono enhanced
set out 'bessel.png'
replot
Дээрх графикт unset key гэж графикийн тайлбарийг үгүй хийнэ. set isosamples 40 гэдэг нь гадаргууг бий болгож байгаа торны нарийвчлал юм. Энэ нарийвчлалын өгөгдмөл утга /юу ч тоо бичихгүй бол автоматаар 10 гэж ойлгоно/ нь 10 байх ба 40 гэдэг тоог ихэсгэхэд торны нүд жижгэрч харин багасгахад нүд томроно. Өөрөөр хэлбэл хэвлэх хүрээнд х ба у – ийн чиглэлд үл хамааралтай 40, 40 шугам байрлаж торыг үүсгэнэ. Энэ комманд нь хоёр хэмжээст графикт set sample гэдэгтэй бараг ижил үүрэгтэй. Хоёр дахь харлуулсан команд болох splot нь 3н хэмжээстэд ихэвчлэн хэрэглэгдэх ба plot гэдэгтэй ижил функцтай surface plot гэдэг үгний товчлол юм. set term pngcairo mono enhanced гэдэг нь графикийн өнгийг хар болгох ба set out коммандаар үр дүнг файл болгон гаргана. Файлын өргөтгөл png, jpg гээд янз бүр байж болно. Ингээд файл болсон графикийг харвал:

Мөн set hidden3d коммандыг нэмж өгвөл гадаргуу битүү мэт харагдаж цаад талын зураасууд давхцаж харагдахаа болино.

Координат зураглал хэрэглэх

Хэрэв координат нь өгөгдмөл тэгш өнцөгт координатаас өөрөөр цилиндер эсвэл туйлын координатын системтэй холбогдсон мэдээний файлаас гурван хэмжээст график үүсгэх нь хэцүү зүйл биш юм. Бидний үзүүлэх жишээ бол сүлд модны чимэглэлтэй ижил хэлбэртэй дүрсийг цилиндер зураглалын комманд ашиглан тэгш хэмт график юм. Ингээд өөр координатын системд хэрхэн гадаргуу байгуулахыг авч үзье.
gnuplot> set mapping cylindrical
gnuplot> unset tics
gnuplot> unset border
gnuplot> set hidden
gnuplot> set xrange [-pi:pi]
gnuplot> set yrange [-pi:pi]
gnuplot> set zrange [0:pi]
gnuplot> set iso 60
gnuplot> unset key
gnuplot> splot '++' using 1:2:(sin($2)) with lines

Figure 9. Цилиндр координатын систем дээрх эргэлтийн бие.
Дээрх коммандад шинэ мөрүүд нилээн хэд байгаа ба тус бүрт яаж ажиллахыг тайлбарлавал:
Set mapping команд – өгөгдмөл систем болох тэгш өнцөгт координатын систем (x,y,z) нь цилиндр координатын систем болоход мэдээг хэвлэх үеэр мэдээний баганууд нь ө-z-r гэж уншигдах ба ө нь өнцөгөн координат, z нь босоо координат, r нь радиас болно. Хэрэв мэдээний файл зөвхөн хоёр баганатай байвал хэвлэх радиус нь r = 1 болно.
Бид мэдээний файлаас гадаргуу зурахыг хүсээгүй ба функаар шууд байгаалсан болно. Иймд зарим нэг нэмэлт комманд бичигдсэнийг тайлбарлах нь зүйтэй.
‘++’ код – Энэ кодны тухай өмнө жишээн дээр цухас тайлбарууд бий. Бид 3 хэмжээстэд үүнийг хэрхэн хэрэглэх тухай авч үзье. ‘++’ заримдаг файл нь төсөөллийн гурван x-y-z гэсэн баганийг үүсгэх ба бидний жишээнд энэ нь ө-z-r болно. Үүний араас using комманд нь уг төсөөллийн гурван баганыг ашиглах ба хоёр дахь багана буюу z – ээр синусын функц бодогдох болно.
gnuplot> splot sin(x)+cos(y)                             
gnuplot> splot '++' using 1:2:(sin($1)+cos($2)) with lines
Дээрх хоёр код нь тэгш өнцөгт координатын системд бараг л ялгаагүй үр дүнг өгнө. учир нь Функц=sin(x)+cos(y) ба функц өөрөө гуравдах багана буюу z тэнхлэг юм. Мэдээж үнэхээр ижил үр дүн өгөхийг шалгах гэж байгаа бол хоёр дахь коммандын өмнө гурван тэнхлэгийн хүрээг зааж өгөх хэрэгтэй.
gnuplot> set xrange [-10:10]
gnuplot> set yrange [-10:10]  
gnuplot> set zrange [-2:2]
gnuplot> set iso 60
gnuplot> set hidden  
gnuplot> splot '++' using 1:2:(sin($1)+cos($2)) with lines

Figure 10. Заримдаг файл болон шууд функцын коммандын ижил үр дүнг харуулсан гадаргуу
Дээрхтэй адилаар ‘++’ заримдаг файл ашиглаж байгаа бол бүх хувьсагчийн утгын хүрээг set xrange гэх мэтээр өгөх ёстой. Бусад комманд болох unset border нь коордиантын хүрээг үгүй болгох, unset tics нь координатын тооллыг үгүй болгох, set hidden нь далд гадаргууг давхцалгүй харуулах болно.

Өнгөт гадаргуу байгуулах буюу өнгө өгөх

Нюфлот нь өндөр нь өнгөөр ялгагдан харагдах гадаргуугын графикийг байгуулах бүрэн боломжтой. Энэ жишээг харуулахын тулд гадаргуу байгуулах дээр ашигласан функцыг ашиглая. Ямарч цэг дээрх функцын утга нь гадаргуугын өндөр ба үүний сүүдрээр илэрхийлэгдэх бол гадаргуу нь муруйн сүлжээ бус өнгөт гадаргуу болж харагдана.
gnuplot> set isosamples 100
gnuplot> set samples 100
gnuplot> unset key
gnuplot> set title 'J_0(r^2)'
gnuplot> set xrange [-4:4]
gnuplot> set yrange [-4:4]
gnuplot> set ztics 1
gnuplot> unset surface
gnuplot> set pm3d
gnuplot> splot besj0(x**2+y**2)

Figure 11. Өнгөт гадаргуу
Эхний гадаргуу үүсгэх жишээтэй харьцуулбал set pm3d гэсэн коммандын мөр нэмэгдсэн байгаа. Энэ комманд нь босоо тэнхлэгийн утгад өнгийг palette – ийн тусламжтайгаар оногдуулж өгдөг. Магадгүй зарим тохиолдолд өнгөөр мөн гадаргуугаар давхар илэрхийлэгдсэн график хүсэж болох юм. Мөн хамгийн чанартай график авахын тулд pm3d дээр hidden3d сонголтыг ашиглах нь оновчтой болох ба дараах байдлаар жишээлье.
gnuplot> set iso 30
gnuplot> unset key
gnuplot> set title 'J_0(r^2)'
gnuplot> set xrange [-4:4]
gnuplot> set yrange [-4:4]
gnuplot> set ztics 1
gnuplot> unset surf
gnuplot> set style line 1 lt 4 lw .5
gnuplot> set pm3d at s hidden3d 1
gnuplot> splot besj0(x**2+y**2)

Figure 12. Өнгөт ба шугаман гадаргуу
Хэрэв set samp 30 коммандыг нэмж ашиглавал нилээд бараг график харагдах болно.

Figure 13. Бараг график байгуулах

Контур байгуулах

Контур график бол изо шугаман /ижил шугаман график/ график, эсвэл ижил муруйн график юм. Энэ нь ижил тогтмол өндөртэй (z) өөр өөр хувьсагчуудаар (x, y) шугам үүсгэдэг. Энэ график байгуулах нь гадаргуу байгуулахаас хялбар бөгөөд ямар нэгэн далд шугам эсвэл шугам хураах комманд хэрэггүй. Мөн босоо тэнхлэг байхгүй ба босоо тэнхлэгийн утгыг шугам болон өнгөөр ялган харуулдагаараа онцлогтой. Тодорхой хэв маяг гадаргууг сайтар дүрслэх ба бид жишээ болгон шугаман хэв маягыг авч үзье.

Figure 14. Контур график
Дээрх графикийг доорх коммандаар байгуулна.
gnuplot> set cntrparam levels 10
gnuplot> set contour base
gnuplot> unset sur
gnuplot> set view map
gnuplot> set xrange [-4:4]
gnuplot> set yrange [-4:4]
gnuplot> set iso 100
gnuplot> set samp 100
gnuplot> set key rmargin
gnuplot> splot sin(x)+cos(2*y)
Эхний мөр болон set cntrparam levels гэдэг нь автомат 10 түвшний зайг бий болгох комманд юм. Энэ тоог тухайн жишээнээс хамааруул хэрэглэгч тохируулж болохоос гадна нюфлот өөрөө тодорхойлох боломжтой. Энэ тохиолдолд бид бичихгүй эсвэл unset cntrparam гэж болно. Мөн гадаргуу байгуулахгүй учир unset sur[face] гэж бичиж унтрааж байгаа юм. Учир нь бичихгүй бол splot нь гадаргуу үүсгэхээр тохируулагдсан байдаг. Мөн set view map комманд нь set view багцийн онцгой тохиолдол бөгөөд эгц дээрээс план болгож харуулдаг комманд юм. Чиглэл бүрь контурыг хүсэж буй тоогоор байгуулахын тулд isosample болон samp[les] үүдийг хоёуланг нь тохируулах хэрэгтэй. Мөн таних тэмдэг болгож түлхүүр шугамуудыг графикийн хажууд байрлуулах хэрэгтэй.
Бид нэг график дээр хэтэрхий олон мэдээллийг шингээх нь ач холбогдолгүй бөгөөд график гэсэн чанараа алдаж шугам ба тэмдэгтийн цуглуулга болох болно. Гэхдээ гадаргуу болон контур хамтдаа нэгэн графикийг үүсгэж байж болно. Ингээд хэрхэн хамтад нь байгуулах командыг авч үзье.
gnuplot> set iso 50
gnuplot> set samp 50
gnuplot> set yrange [-4:4]
gnuplot> set xrange [-4:4]
gnuplot> set ztics 1
gnuplot> unset key
gnuplot> set style line 1 linecolor rgb '#cccccc'
gnuplot> set contour both
gnuplot> set cntrparam levels 10
gnuplot> set hidd
gnuplot> splot sin(x)+cos(2*y) w lines linestyle 1

Figure 15. Контур ба гадаргуу хамтад

Вектор график байгуулах

Хэрэв х ба у дээр хамаарсан тоо хэмжээ нь хос утгатай бол чиглэл нь сумаар илэрхийлэгдэж сумын урт нь тоон утгатай пропорциональ байна. Х-У хавтгай нь жигд торнуудад хуваагдах ба торон дээрх /вектор график/ цэг бүртэй холбоотой тоон утгууд ба чиглэлүүдийг харуулсаг сум зурагдана. Бид хоёр тоо хэмжээтэй холбогдож байгаа ба тоон утга ба чиглэл нь x-y хос бүрт delta x, delta y байх ба бид 4 хэмжээст график зурах гэж байгаа юм шиг бодох хэрэгтэй.
Ингээд эргэлдэх урсгалын үе жишээн дээр вектор график байгуулж үзье. Сумны харагдах байдал ашиглаж буй терминалаас хамаарч болох юм. Кодын бичвэл:
gnuplot> set xrange [0:pi]
gnuplot> set yrange [0:pi]
gnuplot> set iso 20
gnuplot> set samp 20
gnuplot> unset key
gnuplot> a = .2
gnuplot> plot '++' u 1:2:(-a*sin($1)*cos($2)):(a*cos($1)*sin($2))\
>w vec size .06, 15 filled

Figure 16. Вектор график үүсгэх
Вектор график нь мэдээний файл эсвэл дүйцэхүйц заримдаг файл шаардана. Дөрвөн ширхэг багана болох x, y, delta x, delta y үүд оролцоно. Дээрх дөрвөн баганийг нюфлотын өөрийнх нь заримдаг файлын бичлэгийг ашиглан бодуулсан ба сүүлчийн харлуулсан мөр нь вектор график үүсгэхийг хэлнэ. Size гэсэн зааварчилгаа нь сумны загварыг тодорхойлно. Эхний тоо нь сумны толгойн уртыг хоёр дахь утга нь сумны гурвалжны тэлэлтийн /оройн/ өнцгийг заана. Filled гэдэг нь сумны толгой битүү өнгөөр будагдахыг хэлнэ. Хэрвээ өөр загварын сумыг хүсэж байгаа мөн дэлгэрүүлж мэдэхээр бол коммандын мөрөн дээр help arrowstyle help arrowstyle гэж бичээд enter дарахад тусламжийн хэсэг гарч ирнэ.
Нюфлот нь мөн гадаргуу дээр вектор оронг дүрслэн харуулах боломжтой. Ингээд зохиомол жишээн дээр шингэний урсгалын вектор оронг 3 хэмжээстэд харъя.
gnuplot> set xrange [-pi:pi]
gnuplot> set yrange [-pi:pi]
gnuplot> set zrange [-pi:pi] 
gnuplot> unset key
gnuplot> set ztics 1.5
gnuplot> set view 37,300
gnuplot> a = .9
gnuplot> set iso 20
gnuplot> set samp 20
gnuplot> splot '++' u 1:2:(2*a*cos($2)*sin($1)):\                                    
>(-a*sin($1)*cos($2)):(a*cos($1)*sin($2)):(a*cos($1)) w vec size .06, 15 filled

Figure 17. Гадаргуу дээрх вектор орон.
Дээрх төрлийн график байгуулахад 6 ширхэг багана тус бүр x, y, z, delta x, delta y, delta z хэрэг болно.

Зурагт болон дулаан тархалтын график байгуулах

Мэдээлэл нь хавтгай контур ашиглан х ба у хавтгайд сүүдэр болон өнгө ашиглан илэрхийлэгдэх нь дан контур график зурахаас дээр байх нь авч үзэж буй жишээнээс хамаарна. Ийм төрлийн графикийг зурагт график, заримдаа дулаан тархалтын зураг гэж нэрлэнэ. График зурагдах мэдээний характеристик дээр хамаарч уг графикийн харагдаж байдал шийдэгдэх ба тухайн жишээнээс хамаарч тохиромжтой хэв маягийг сонгох нь чухал. Ингээд жишээ болгон нэг график байгуулах коммандыг авч үзье.
gnuplot> set xrange [-4:4]
gnuplot> set yrange [-4:4] 
gnuplot> set iso 100
gnuplot> set samp 100
gnuplot> unset key
gnuplot> unset sur
gnuplot> set view map
gnuplot> set pm3d at b
gnuplot> splot sin(y**2+x**2)-cos(x**2)

Figure 18. Өнгөт контур буюу дулаан тархалтын зураг
Эхлээд харлуулсан мөрийг авч үзье. Команд set pm3d нь гадаргуу байгуулахад хэрэглэгдсэн ба сүүлд байгаа b үсэг нь bottom буюу ёроолд байгуулахыг хэлж өгнө. Гадаргуу дээр бус суурь x-y хавтгай дээр өнгөт гадаргууг буулгана. Ингээд splot команд нь өгөгдмөл өнгөний утгаар графикийг байгуулсан байна. Энэ нь мэдээний утгууд дээр үндэслэн өнгийг тодорхойлдог хослол юм. Мөн бид дээжийн давтамж (samp) болон ижил шугамын (isoline) тоог өсгөж болно. Мөн энэ төрлийн график зурахдаа торон гадаргуу зурагдахаас сэргийлж unset sur[face] гэж бичих хэрэгтэй.
График бүрийг өгөгдмөл хослол болох солонгийн өнгөөр байгуулна гэж байхгүй. Нюфлотын санд хэд хэдэн өнгөний хослол уусмал бий. Хэрэв өнгөний масштабт тайлбар хэрэггүй бол бид unset colorbox гэж командыг бичихэд хангалттай. Хэрэв хараас алтан өнгөрүү явсан спектр бүхий график авахыг хүсвэл set palette defined (0 ‘black’, 1 ‘gold’) гэж бичнэ.


Харин дээрх хоёрын оронд сонгож буй өнгөний хязгаараа бичиж болно. Хэрэв өнгөний нэр, хослол мэдэхгүй байгаа бол show colornames 112 гаруй нэрийн жагсаалт, тэдгээрийн RGB гарч ирнэ. Эсвэл мэддэг бол #RRGGBB гэж бичиж болно. Хэрвээ спектрийн дундаж байдлаар өнгөний ялгаралыг хармаар байгаа бол set palette defined (0 ‘black’, 1 ‘aquamarine’, 2 ‘gold’) гэж болно.


Командын мөрөнд гарч байгаа тоо бол нээх чухал биш. Мөн нюфлот нь мэдээний өгөгдлийн дагуу масштабт тэмдэглэгээг интервалд хуваагдана.  Зарим тохиолдолд мэдээний шинж чанараас хамаарч богино интервалд өнгийг огцом өөрчлөх шаардлага гарч болох юм. Үүнийг хийхийн тулд огцом өөрчлөх хэсэгт дугаарыг давтаж өгнө. Үүний тулд set palette defined (0 ‘black’, 1 ‘aquamarine’, 1 ‘red’, 2 ‘gold’) гэх мэтээр бичнэ.


Энэ нь хурц өөрчлөлтийг буюу шилжилтийг тэнгисийн өнгө болон  улаан өнгийн хооронд хийх ба яг масштабт хүрээний төвд байна. Хэд хэдэн шилжилт өөрчлөлтийг энэ мэтээр хийж өгч болно.
Өнгөт зураглал дээр өгөх хоёр тэмдэглэл байна. Хэрэв мэдээг шугаман бус логарифм байдлаар дүрслэхэд тохиромжтой байвал set logscale cb команд хэрэглэж зурж болно. Зургийн хязгаарын өөрчлөхдөө босоо z тэнхлэгтэй адилаар set cbrange [a:b] гэж өгнө.

Контур болон зурагт графикийг хослуулах

Заримдаа хоёр өөр мэдээнээс үүсэх боловч хамт нэг талбарт зурагдаж утга илэрхийлэх тохиолдол байна. 2 хэмжээст графикийн хувьд энэ бол энгийн юм. Харин 3н хэмжээст байх гадаргуу болон контурыг нэгтгэх нь хэцүү байх ба нэгэн зэрэг хоёр дулаан тархалтын зураг үйлдэнэ гэдэг боломжгүй юм. Энд нэгтгэн зурах нэгэн аргыг авч үзье.
gnuplot> set xrange [0:pi] 
gnuplot> set yrange [0:pi] 
gnuplot> set iso 100
gnuplot> set samp 100
gnuplot> set cntrparam levels 10
gnuplot> unset key
gnuplot> unset surface
gnuplot> set view map
gnuplot> set contour base
gnuplot> set pm3d at b
gnuplot> splot '++' using 1:2:($1**2-$2**2):(sin($1**2+$2**2))\
>w lines lw 2

Figure 19.  Контур болон зурагт график хослуулах
Бид өмнөх контур график байгуулсантай ижил командуудыг бичсэн ба мөн л set pm3d at base гэж бичсэн. Хэрхэн гадаргуугийн график, зурагт график хоёрыг мэдээнээс ялгах вэ гэдэг нь чухал. График зурах  splot командын хувьд файл болон заримдаг файл болох ‘++’ –ээс график зурахдаа сонголтын дөрөв дахь баганыг бий болгоно. Энэ багана өнгөт гадаргууг зурахад ашиглагдах ба энэ нь өмнөх гуравдугаар баганаар тодорхойлогдож уг гуравдах нь гурван хэмжээстэд гадаргууг зурахад хэрэглэгдэнэ. Контурын функц нь гуравдах баганаар өгөгдсөн ба баганын индексээс илүү координатын өөрчлөлтийг хэрэглэх ба x**2-y**2 ба дөрөв дахь багана нь зурагт графикийг дүрслэх ба sin(x**2+y**2) гэсэн функцаар бодогдоно.

Цаашид илүү нарийвчлан тооцон бодох гидравлик дахь бодлогуудын графо-дүрслэлүүдийг жорын хамт оруулна.

No comments:

Post a Comment