© Б.Алтанхүү, 2007-2008 Mathcad системтэй анхлан танилцах
1
Mathcad системтэй анхлан танилцах
1. Хавсралт: Mathcad системд дифференциал тэгшитгэл бодох
a. Кошийн бодлого бодох
i. odesolve() функцыг ашиглах
ii. rkfixed() функцыг ашиглах
iii. Тоон аргыг програмчлах
b. Захын нөхцөлт бодлого бодох
i. sbval() функцыг ашиглах
1. Хавсралт: Mathcad системд дифференциал тэгшитгэл
бодох
Mathcad бол зориулалтын програм учраас дифференциал тэгшитгэл бодох тусгай
хэрэгслүүд өөрт нь байдаг. Тэдгээрийг дифференциал тэгшитгэл бодогчид (differential
equation solvers) хэмээн нэрийднэ. Эдгээр хэрэгслийг:
• ганц ширхэг I эрэмбийн тэгшитгэл
• ганц ширхэг N-р эрэмбийн тэгшитгэл
• I эрэмбийн систем тэгшитгэл
• N-р эрэмбийн систем тэгшитгэл
зэргийг бодохдоо хэрэглэх боломжтой.
Кошийн бодлого бодох
Odesolve() функцыг ашиглах
Анхны нөхцөл бүхий тэгшитгэл бодох хамгийн хялбар зам бол Odesolve() функцыг
ашиглах.
Ганц тэгшитгэл өгөгдсөн тохиолдолд энэ функц нь тэгшитгэлийн шийд болох
функцыг олно. Харин систем тэгшитгэл өгөгдсөн тохиолдолд тэдгээрийн шийд болох
функцуудын векторыг олно. Гэхдээ нэг шаардлага бий. Дифференциал тэгшитгэл хамгийн
өндөр эрэмбийн уламжлалынхаа хувьд шугаман (linear) байх ёстой.
Функцыг дуудах хэлбэр нь:
u := Odesolve(vf, x, vb эсвэл b, [step])
Энд:
• vf - систем тэгшитгэлийн үл мэдэгдэгч функцуудыг агуулсан вектор. Зөвхөн систем
тэгшитгэл өгөгдсөн үед л энэ аргумент шаардлагатай. Тиймээс ганц тэгшитгэлийн үед
үүнийг бичилгүй орхиж болно;
• х - тэгшитгэлийн чөлөөт хувьсагч (independent variable), ө.х. шийдийн функцын
аргумент;
• vb эсвэл b – энэ хоёрын аль нэгийг бичнэ. Энд:
• vb - бодох интервалын эхлэл ба төгсгөлийн цэгүүдийг агуулсан вектор;
© Б.Алтанхүү, 2007-2008 Mathcad системтэй анхлан танилцах
2
• b - зөвхөн төгсгөлийн цэг байна;
• step - хийх алхмын тоо;
• u – тэгшитгэлийн шийд. Энэ нь x-ээс хамаарсан функц байна, ө.х. u=u(x).
Odesolve функцыг ашиглахын тулд Solve Block буюу Бодох Талбар гээчийг үүсгэх
ёстой. Үүнийг хийхдээ дараах 3 алхмыг гүйцэтгэнэ.
• Бодох талбарыг эхлүүлэх тэр газраа курсорыг шилжүүлээд Given хэмээх түлхүүр үгийг
бичнэ. Та Given гэж бичиж болно, бас given гэж бичиж болно. Бичиж дуусаад Enter
дарж юм уу эсвэл хулганаараа курсорыг доод талын мөрөнд шилжүүлэх хэрэгтэй.
Харин ямар ч тохиолдолд Space товчийг дарж болохгүй. Хэрэв тэгэх аваас Given гэсэн
түлхүүр үг биш жирийн текст болж хувирна.
• Given-ийн доод талд тэгшитгэл, анхны нөхцлүүдийг бичнэ. Ингэхдээ бичих тэнцүүгийн
тэмдэг нь тод хар тэнцэтгэл байх ёстой. Үүнийг гаргахдаа Boolean самбарын
гэсэн хэрэгслийг сонгох юм уу гарын CTRL+= товчны хослолыг дарах хэрэгтэй.
Түүнчлэн:
o Үл мэдэгдэх функц ба түүний уламжлалуудыг бичихдээ шууд y, y’ гэхийн
оронд y(x), y’(x) г.м.-ээр бичнэ.
o Анхны нөхцлийг y(0)=c буюу y’(a)=d г.м.-ээр бичнэ.
o Тэгшитгэл дэхь уламжлалуудыг нэг бол d/dx, d/dx2
, d/dx3
г.м.-ээр
дифференциалтай бичиж болно, эсвэл шууд y’(x), y’’(x), y’’’(x) гэх мэт илүү
хялбараар бичиж болно. Харин анхны нөхцлүүдийн уламжлалыг ямагт
штрихтэй бичих ёстой.
• Эцэст нь Odesolve функцыг бичнэ. Гэхдээ x-ийн хувьд, бодох интервалын төгсгөлийн
цэг b нь эхлэлийн цэгээс ямагт их байх ёстой. Харин эхлэлийн цэг бол мэдээж анхны
нөхцлөөс харагдаж байгаа.
Жишээ болгоод 0)()(''' =⋅+ xykxy гэсэн 3-р эрэмбийн нэгэн төрлийн тэгшитгэлийг
0)0('',1)0(',1)0( =−== yyy гэсэн анхны нөхцлүүдтэйгээр 5.2=k үед [ ]5,0∈x завсарт хэрхэн
бодуулахыг авч үзье.
© Б.Алтанхүү, 2007-2008 Mathcad системтэй анхлан танилцах
3
Тэгшитгэлийн параметр k-г Бодох талбарын дотор талд бичээгүйг анхаараарай. Ингэхийг
Mathcad зөвшөөрдөггүй байна. Odesolve функцыг бичихдээ хаалтан дотор зөвхөн чөлөөт
хувьсагч, бодох интервалын төгсгөл хоёрыг бичсэн байна. Учир нь өөр зүйлс бичих
шаардлагагүй байхгүй.
rkfixed() функцыг ашиглах
Анхны нөхцөл бүхий дифференциал тэгшитгэл бодох өөр нэг зам бол rkfixed()
функцыг ашиглах. rkfixed() нь 4-р эрэмбийн Рунге-Куттын аргаар бодолтыг гүйцэтгэдэг.
Энэ функцыг ашиглан 1-р эрэмбийн ганц тэгшитгэл, 1-р эрэмбийн систем тэгшитгэл
бодож болно. N-р эрэмбийн ганц тэгшитгэл байвал n ширхэг 1-р эрэмбийн систем
тэгшитгэл болгож бодно. N-р эрэмбийн M тооны тэгшитгэл байвал N*M ширхэг 1-р
эрэмбийн систем тэгшитгэл болгож бодно.
Бодуулах дифференциал тэгшитгэл шугаман бус (nonlinear) байж болно.
Функцыг дуудах хэлбэр:
S := rkfixed(y, x1, x2, npoints, D)
Энд:
• y – анхны нөхцлүүдийг агуулах вектор бөгөөд:
o 1-р эрэмбийн ганц тэгшитгэлийн хувьд энэ нь ганц элемент бүхий вектор
байна;
o 1-р эрэмбийн N тооны систем тэгшитгэлүүдийн хувьд N тооны анхны
нөхцлийг агуулсан вектор байна;
o N-р эрэмбийн ганц тэгшитгэлийн хувьд N тооны анхны нөхцлийг агуулсан
вектор байна;
© Б.Алтанхүү, 2007-2008 Mathcad системтэй анхлан танилцах
4
o N-р эрэмбийн M тооны систем тэгшитгэлүүдийн хувьд N*M тооны анхны
нөхцлийг агуулсан вектор байна;
• x1 ба x2 – бодох интервалын эхлэл, төгсгөлийн цэгүүд. y векторын агуулах утгууд x1-т
харгалзана;
• npoints – бодолт хийгдэх цэгийн тоо:
npoints = (x2 - x1) / h
• D(x, y) – тэгшитгэл буюу систем тэгшитгэлийн бүх уламжлалыг агуулсан вектор-функц
бөгөөд:
o 1-р эрэмбийн ганц тэгшитгэлийн хувьд энэ нь ганц уламжлал байна;
o 1-р эрэмбийн N тооны систем тэгшитгэлүүдийн хувьд N тооны уламжлалыг
агуулсан вектор байна;
o N-р эрэмбийн ганц тэгшитгэлийн хувьд N тооны анхны нөхцлийг агуулсан
вектор байна;
o N-р эрэмбийн M тооны систем тэгшитгэлүүдийн хувьд N*M тооны анхны
нөхцлийг агуулсан вектор байна;
• S – бодолтын үр дүнг агуулсан npoints+1 тооны мөртэй, харин:
o 1-р эрэмбийн ганц тэгшитгэлийн хувьд 2 баганатай, эхний баганадаа x,
дараачийн баганадаа шийдийг агуулсан матриц;
o 1-р эрэмбийн N тооны систем тэгшитгэлүүдийн хувьд N тооны баганатай,
эхний баганадаа x, дараачийн баганадуудад тэгшитгэл бүрийн шийдийг
агуулсан матриц;
o N-р эрэмбийн ганц тэгшитгэлийн хувьд N тооны баганатай, эхний баганадаа
x, дараачийн баганадуудад шийд болон N-1 хүртэлх эрэмбийн
уламжлалуудыг агуулсан матриц;
o N-р эрэмбийн M тооны систем тэгшитгэлүүдийн хувьд N*M тооны баганатай,
эхний баганадаа x, дараачийн баганадуудад тэгшитгэл бүрийн шийд болон
N-1 хүртэлх эрэмбийн уламжлалуудыг агуулсан матриц
байна.
Жишээ болгоод 0)()(''' =⋅+ xykxy гэсэн 3-р эрэмбийн нэгэн төрлийн тэгшитгэлээ
0)0('',1)0(',1)0( =−== yyy гэсэн анхны нөхцлүүдтэйгээр 5.2=k үед [ ]5,0∈x завсарт хэрхэн
бодуулахыг авч үзье.
© Б.Алтанхүү, 2007-2008 Mathcad системтэй анхлан танилцах
5
Тоон аргыг програмчлах
Дээр дурдсан хэрэгслүүдээс гадна өөр олон дифференциал тэгшитгэл бодогчид
бий. Тэдгээрийг үл дурдан энэ удаа дифференциал тэгшитгэл бодуулах өөр нэгэн
боломжийг авч үзье. Энэ нь тэгшитгэл бодох тоон аргыг програмчлан хэрэгжүүлэх арга
зам юм.
Рунге-Куттын 2-р эрэмбийн арга буюу Эйлерийн өргөтгөл аргын алгоритмыг хэрхэн
програмчлахыг үзье. Жишээ болгоод 0)()('' =⋅+ xykxy гэсэн 2-р эрэмбийн нэгэн төрлийн
тэгшитгэлийг 1)0(',1)0( −== yy гэсэн анхны нөхцлүүдтэйгээр 3=k үед [ ]5,0∈x завсарт
хэрхэн бодуулъя.
Юуны өмнө тэгшитгэлийн чөлөөт хувьсагч [ ]5,0∈x завсарт 05.0=h гэсэн
алхамтайгаар өөрчлөгдөнө гэе. Тэгвэл x -ийг:
hxx ii +=+1 , 1,0 −= Ni
гэж бичнэ. Энд 1
05
+
−
=
h
N бол x -ийн утгын тоо. Ж.нь: 5,00 == Nxx байна.
Дараагийн алхам бол бид 2-р эрэмбийн тэгшитгэлийг 1-р эрэмбийн хоёр
тэгшитгэлийн систем болгож задлах хэрэгтэй. Үүний тулд:
⎩
⎨
⎧
=
=
)(')(
)()(
xyxv
xyxu
гэсэн орлуулга хийе. Тэгвэл манай дифференциал тэгшитгэл:
© Б.Алтанхүү, 2007-2008 Mathcad системтэй анхлан танилцах
6
⎩
⎨
⎧
−=
=
)(),('
)()('
xkuuxv
xvxu
гэсэн систем тэгшитгэл болно. Анхны нөхцлүүд нь:
⎩
⎨
⎧
−==
==
1)(
1)(
00
00
vxv
uxu
болно.
Рунге-Куттын 2-р эрэмбийн (RK2) арга бол 1-р эрэмбийн тэгшитгэл боддог арга.
Бидэнд 2 тэгшитгэл байгаа. Тиймээс тэгшитгэл тус бүр дээр уг аргыг хэрэглэнэ.
Бодох интервалыг 1−N ширхэг дэд интервалд хуваасан байгаа. Тухайн нэг 1+i -р
цэг дээрх бодолтын алгоритм нь:
1. ),('' iii uxvv = -ийг олно: ii ukv ⋅−='
2. Эйлерийн томъёогоор )(
2
1
2
1
++
=
ii
xvv -ийг олно: ii
i
v
h
vv '
22
1 +=
+
3. RK2 томъёогоор )( 11 ++ = ii xuu -ийг олно:
2
11
+
+ ⋅+=
i
ii vhuu
4. ),(''
2
1
2
1
2
1
+++
=
iii
uxvv -ийг олно: )'
2
('
2
1 ii
i
u
h
ukv +⋅−=
+
5. RK2 томъёогоор )( 11 ++ = ii xvv -ийг олно:
2
11 '
+
+ ⋅+=
i
ii vhvv
Энэ алгоритмыг, i -ийн утгыг 0-ээс 1−N хүртэл гүйлгэн давтах ёстой. Үр дүнд нь
бид N ширхэг vux ,, -ийн утгатай болно.
Mathcad системд бодолтыг хэрхэн хийснийг дараах зурагт үзүүллээ:
© Б.Алтанхүү, 2007-2008 Mathcad системтэй анхлан танилцах
7
Энд зарим нэг тайлбар хийе. RK2 болон Эйлерийн аргын томъёонууд нь рекуррент
томъёонууд байдаг. Mathcad системд рекуррент, бас хоорондоо холбоотой томъёонуудыг
вектор хэлбэрээр бичдэг. Тийм учраас )( 1+ixu , )( 1+ixv -г зурагт үзүүлсэн байдлаар
тодорхойлсон болно. Түүнчлэн дээр дурдсан алгоритмын 1, 2, 4-т заасан алхмуудыг RK2-
ын томъёонд орлуулж, нэгтгэсэн болно.
Захын нөхцөлт бодлого бодох
Захын нөхцлүүд бодох интервалын хоёр цэг дээр өгөгдсөн тохиолдлыг авч үзье.
Үүнийг хоёр цэгт захын нөхцлийн бодлого (2-point boundary value problem) гэдэг.
Хоёр цэгт захын нөхцлийн тэгшитгэлийг бодох хамгийн хялбар зам бол дээр ярьсан
Odesolve() функцыг ашиглах. Энэ функцыг хэрхэн ашиглах талаар мөн өмнөх сэдэвт
ярьсан тул энэ удаад Буудах аргыг хэрхэн хэрэгжүүлэхийг авч үзье.
sbval() функцыг ашиглах
Захын нөхцлүүд бодох интервалын эхлэл болон төгсгөлийн цэгүүд дээр хуваагдан
өгөгдсөн тохиолдолд энэ функцыг хэрэглэх боломжтой.
Функцыг дуудах хэлбэр:
S := sbval(v, x1, x2, D, load, score)
Энд:
© Б.Алтанхүү, 2007-2008 Mathcad системтэй анхлан танилцах
8
• v – тэгшитгэл (буюу систем тэгшитгэлийг) анхны нөхцөлт бодлого мэтээр бодоход
шаардлагатай боловч өгөгдөлгүй орхигдсон анхны нөхцлүүдийг агуулах вектор. Энэ
утгуудыг бид өөрсдөө таамгаар өгнө;
• x1 ба x2 – бодох интервалын эхлэл, төгсгөлийн цэгүүд. v векторын агуулах утгууд x1-т
харгалзана;
• D(x, y) – тэгшитгэлийн (буюу систем тэгшитгэлийн) бүх уламжлалыг агуулсан вектор-
функц;
• load(x1, v) - Өгөгдсөн болон таамагласан бүх анхны нөхцлүүдийг агуулсан вектор-
функц. Бүх утгууд нь x1-т харгалзана;
• score(x2, y) – бодох интервалын төгсгөлийн x2 цэг дээр өгөгдсөн захын нөхцлүүд ба
тэр цэг дээр тэгшитгэлийг (буюу систем тэгшитгэлийг) бодоход олдох шийдүүдийн
зөрөөг агуулсан вектор-функц;
• S – бодолтын үр дүн. Өгөгдөлгүй орхигдож, тиймээс бид таамаглан өгсөн байсан тэр
анхны нөхцлүүдийн тохиромжит утгуудыг агуулсан вектор
байна.
Эндээс харахад sbval() функц нь яг захын нөхцөлт бодлогын шийдийг гаргаж
өгдөггүй байна. Үүний оронд харин тухайн бодлогыг анхны нөхцлийн бодлого болгож
хувиргахад шаардлагатай, гэхдээ дутуу байгаа тэр анхны нөхцлүүдийг олж гаргаж өгдөг
байна. Буудах аргыг хэрэгжүүлж байна гэсэн үг. Харин энэ гаргаж өгсөн утгуудыг
ашиглаад дээр үзсэн Odesolve(), rkfixed() г.м. функцын тусламжтайгаар захын нөхцөлт
бодлогоо анхны нөхцөлт бодлого мэтээр бодох боломжтой юм.
Жишээ болгоод 0cos)('2)(''2)(''' =−⋅−⋅− xxyxyxy гэсэн 3-р эрэмбийн нэгэн төрлийн
тэгшитгэлийг 5.1)3('',4)3(',1)2( ===− yyy гэсэн захын нөхцлүүдтэйгээр [ ]3,2−∈x завсарт
хэрхэн бодуулахыг авч үзье.
© Б.Алтанхүү, 2007-2008 Mathcad системтэй анхлан танилцах
9

Mathcad beginning-appendix

  • 1.
    © Б.Алтанхүү, 2007-2008Mathcad системтэй анхлан танилцах 1 Mathcad системтэй анхлан танилцах 1. Хавсралт: Mathcad системд дифференциал тэгшитгэл бодох a. Кошийн бодлого бодох i. odesolve() функцыг ашиглах ii. rkfixed() функцыг ашиглах iii. Тоон аргыг програмчлах b. Захын нөхцөлт бодлого бодох i. sbval() функцыг ашиглах 1. Хавсралт: Mathcad системд дифференциал тэгшитгэл бодох Mathcad бол зориулалтын програм учраас дифференциал тэгшитгэл бодох тусгай хэрэгслүүд өөрт нь байдаг. Тэдгээрийг дифференциал тэгшитгэл бодогчид (differential equation solvers) хэмээн нэрийднэ. Эдгээр хэрэгслийг: • ганц ширхэг I эрэмбийн тэгшитгэл • ганц ширхэг N-р эрэмбийн тэгшитгэл • I эрэмбийн систем тэгшитгэл • N-р эрэмбийн систем тэгшитгэл зэргийг бодохдоо хэрэглэх боломжтой. Кошийн бодлого бодох Odesolve() функцыг ашиглах Анхны нөхцөл бүхий тэгшитгэл бодох хамгийн хялбар зам бол Odesolve() функцыг ашиглах. Ганц тэгшитгэл өгөгдсөн тохиолдолд энэ функц нь тэгшитгэлийн шийд болох функцыг олно. Харин систем тэгшитгэл өгөгдсөн тохиолдолд тэдгээрийн шийд болох функцуудын векторыг олно. Гэхдээ нэг шаардлага бий. Дифференциал тэгшитгэл хамгийн өндөр эрэмбийн уламжлалынхаа хувьд шугаман (linear) байх ёстой. Функцыг дуудах хэлбэр нь: u := Odesolve(vf, x, vb эсвэл b, [step]) Энд: • vf - систем тэгшитгэлийн үл мэдэгдэгч функцуудыг агуулсан вектор. Зөвхөн систем тэгшитгэл өгөгдсөн үед л энэ аргумент шаардлагатай. Тиймээс ганц тэгшитгэлийн үед үүнийг бичилгүй орхиж болно; • х - тэгшитгэлийн чөлөөт хувьсагч (independent variable), ө.х. шийдийн функцын аргумент; • vb эсвэл b – энэ хоёрын аль нэгийг бичнэ. Энд: • vb - бодох интервалын эхлэл ба төгсгөлийн цэгүүдийг агуулсан вектор;
  • 2.
    © Б.Алтанхүү, 2007-2008Mathcad системтэй анхлан танилцах 2 • b - зөвхөн төгсгөлийн цэг байна; • step - хийх алхмын тоо; • u – тэгшитгэлийн шийд. Энэ нь x-ээс хамаарсан функц байна, ө.х. u=u(x). Odesolve функцыг ашиглахын тулд Solve Block буюу Бодох Талбар гээчийг үүсгэх ёстой. Үүнийг хийхдээ дараах 3 алхмыг гүйцэтгэнэ. • Бодох талбарыг эхлүүлэх тэр газраа курсорыг шилжүүлээд Given хэмээх түлхүүр үгийг бичнэ. Та Given гэж бичиж болно, бас given гэж бичиж болно. Бичиж дуусаад Enter дарж юм уу эсвэл хулганаараа курсорыг доод талын мөрөнд шилжүүлэх хэрэгтэй. Харин ямар ч тохиолдолд Space товчийг дарж болохгүй. Хэрэв тэгэх аваас Given гэсэн түлхүүр үг биш жирийн текст болж хувирна. • Given-ийн доод талд тэгшитгэл, анхны нөхцлүүдийг бичнэ. Ингэхдээ бичих тэнцүүгийн тэмдэг нь тод хар тэнцэтгэл байх ёстой. Үүнийг гаргахдаа Boolean самбарын гэсэн хэрэгслийг сонгох юм уу гарын CTRL+= товчны хослолыг дарах хэрэгтэй. Түүнчлэн: o Үл мэдэгдэх функц ба түүний уламжлалуудыг бичихдээ шууд y, y’ гэхийн оронд y(x), y’(x) г.м.-ээр бичнэ. o Анхны нөхцлийг y(0)=c буюу y’(a)=d г.м.-ээр бичнэ. o Тэгшитгэл дэхь уламжлалуудыг нэг бол d/dx, d/dx2 , d/dx3 г.м.-ээр дифференциалтай бичиж болно, эсвэл шууд y’(x), y’’(x), y’’’(x) гэх мэт илүү хялбараар бичиж болно. Харин анхны нөхцлүүдийн уламжлалыг ямагт штрихтэй бичих ёстой. • Эцэст нь Odesolve функцыг бичнэ. Гэхдээ x-ийн хувьд, бодох интервалын төгсгөлийн цэг b нь эхлэлийн цэгээс ямагт их байх ёстой. Харин эхлэлийн цэг бол мэдээж анхны нөхцлөөс харагдаж байгаа. Жишээ болгоод 0)()(''' =⋅+ xykxy гэсэн 3-р эрэмбийн нэгэн төрлийн тэгшитгэлийг 0)0('',1)0(',1)0( =−== yyy гэсэн анхны нөхцлүүдтэйгээр 5.2=k үед [ ]5,0∈x завсарт хэрхэн бодуулахыг авч үзье.
  • 3.
    © Б.Алтанхүү, 2007-2008Mathcad системтэй анхлан танилцах 3 Тэгшитгэлийн параметр k-г Бодох талбарын дотор талд бичээгүйг анхаараарай. Ингэхийг Mathcad зөвшөөрдөггүй байна. Odesolve функцыг бичихдээ хаалтан дотор зөвхөн чөлөөт хувьсагч, бодох интервалын төгсгөл хоёрыг бичсэн байна. Учир нь өөр зүйлс бичих шаардлагагүй байхгүй. rkfixed() функцыг ашиглах Анхны нөхцөл бүхий дифференциал тэгшитгэл бодох өөр нэг зам бол rkfixed() функцыг ашиглах. rkfixed() нь 4-р эрэмбийн Рунге-Куттын аргаар бодолтыг гүйцэтгэдэг. Энэ функцыг ашиглан 1-р эрэмбийн ганц тэгшитгэл, 1-р эрэмбийн систем тэгшитгэл бодож болно. N-р эрэмбийн ганц тэгшитгэл байвал n ширхэг 1-р эрэмбийн систем тэгшитгэл болгож бодно. N-р эрэмбийн M тооны тэгшитгэл байвал N*M ширхэг 1-р эрэмбийн систем тэгшитгэл болгож бодно. Бодуулах дифференциал тэгшитгэл шугаман бус (nonlinear) байж болно. Функцыг дуудах хэлбэр: S := rkfixed(y, x1, x2, npoints, D) Энд: • y – анхны нөхцлүүдийг агуулах вектор бөгөөд: o 1-р эрэмбийн ганц тэгшитгэлийн хувьд энэ нь ганц элемент бүхий вектор байна; o 1-р эрэмбийн N тооны систем тэгшитгэлүүдийн хувьд N тооны анхны нөхцлийг агуулсан вектор байна; o N-р эрэмбийн ганц тэгшитгэлийн хувьд N тооны анхны нөхцлийг агуулсан вектор байна;
  • 4.
    © Б.Алтанхүү, 2007-2008Mathcad системтэй анхлан танилцах 4 o N-р эрэмбийн M тооны систем тэгшитгэлүүдийн хувьд N*M тооны анхны нөхцлийг агуулсан вектор байна; • x1 ба x2 – бодох интервалын эхлэл, төгсгөлийн цэгүүд. y векторын агуулах утгууд x1-т харгалзана; • npoints – бодолт хийгдэх цэгийн тоо: npoints = (x2 - x1) / h • D(x, y) – тэгшитгэл буюу систем тэгшитгэлийн бүх уламжлалыг агуулсан вектор-функц бөгөөд: o 1-р эрэмбийн ганц тэгшитгэлийн хувьд энэ нь ганц уламжлал байна; o 1-р эрэмбийн N тооны систем тэгшитгэлүүдийн хувьд N тооны уламжлалыг агуулсан вектор байна; o N-р эрэмбийн ганц тэгшитгэлийн хувьд N тооны анхны нөхцлийг агуулсан вектор байна; o N-р эрэмбийн M тооны систем тэгшитгэлүүдийн хувьд N*M тооны анхны нөхцлийг агуулсан вектор байна; • S – бодолтын үр дүнг агуулсан npoints+1 тооны мөртэй, харин: o 1-р эрэмбийн ганц тэгшитгэлийн хувьд 2 баганатай, эхний баганадаа x, дараачийн баганадаа шийдийг агуулсан матриц; o 1-р эрэмбийн N тооны систем тэгшитгэлүүдийн хувьд N тооны баганатай, эхний баганадаа x, дараачийн баганадуудад тэгшитгэл бүрийн шийдийг агуулсан матриц; o N-р эрэмбийн ганц тэгшитгэлийн хувьд N тооны баганатай, эхний баганадаа x, дараачийн баганадуудад шийд болон N-1 хүртэлх эрэмбийн уламжлалуудыг агуулсан матриц; o N-р эрэмбийн M тооны систем тэгшитгэлүүдийн хувьд N*M тооны баганатай, эхний баганадаа x, дараачийн баганадуудад тэгшитгэл бүрийн шийд болон N-1 хүртэлх эрэмбийн уламжлалуудыг агуулсан матриц байна. Жишээ болгоод 0)()(''' =⋅+ xykxy гэсэн 3-р эрэмбийн нэгэн төрлийн тэгшитгэлээ 0)0('',1)0(',1)0( =−== yyy гэсэн анхны нөхцлүүдтэйгээр 5.2=k үед [ ]5,0∈x завсарт хэрхэн бодуулахыг авч үзье.
  • 5.
    © Б.Алтанхүү, 2007-2008Mathcad системтэй анхлан танилцах 5 Тоон аргыг програмчлах Дээр дурдсан хэрэгслүүдээс гадна өөр олон дифференциал тэгшитгэл бодогчид бий. Тэдгээрийг үл дурдан энэ удаа дифференциал тэгшитгэл бодуулах өөр нэгэн боломжийг авч үзье. Энэ нь тэгшитгэл бодох тоон аргыг програмчлан хэрэгжүүлэх арга зам юм. Рунге-Куттын 2-р эрэмбийн арга буюу Эйлерийн өргөтгөл аргын алгоритмыг хэрхэн програмчлахыг үзье. Жишээ болгоод 0)()('' =⋅+ xykxy гэсэн 2-р эрэмбийн нэгэн төрлийн тэгшитгэлийг 1)0(',1)0( −== yy гэсэн анхны нөхцлүүдтэйгээр 3=k үед [ ]5,0∈x завсарт хэрхэн бодуулъя. Юуны өмнө тэгшитгэлийн чөлөөт хувьсагч [ ]5,0∈x завсарт 05.0=h гэсэн алхамтайгаар өөрчлөгдөнө гэе. Тэгвэл x -ийг: hxx ii +=+1 , 1,0 −= Ni гэж бичнэ. Энд 1 05 + − = h N бол x -ийн утгын тоо. Ж.нь: 5,00 == Nxx байна. Дараагийн алхам бол бид 2-р эрэмбийн тэгшитгэлийг 1-р эрэмбийн хоёр тэгшитгэлийн систем болгож задлах хэрэгтэй. Үүний тулд: ⎩ ⎨ ⎧ = = )(')( )()( xyxv xyxu гэсэн орлуулга хийе. Тэгвэл манай дифференциал тэгшитгэл:
  • 6.
    © Б.Алтанхүү, 2007-2008Mathcad системтэй анхлан танилцах 6 ⎩ ⎨ ⎧ −= = )(),(' )()(' xkuuxv xvxu гэсэн систем тэгшитгэл болно. Анхны нөхцлүүд нь: ⎩ ⎨ ⎧ −== == 1)( 1)( 00 00 vxv uxu болно. Рунге-Куттын 2-р эрэмбийн (RK2) арга бол 1-р эрэмбийн тэгшитгэл боддог арга. Бидэнд 2 тэгшитгэл байгаа. Тиймээс тэгшитгэл тус бүр дээр уг аргыг хэрэглэнэ. Бодох интервалыг 1−N ширхэг дэд интервалд хуваасан байгаа. Тухайн нэг 1+i -р цэг дээрх бодолтын алгоритм нь: 1. ),('' iii uxvv = -ийг олно: ii ukv ⋅−=' 2. Эйлерийн томъёогоор )( 2 1 2 1 ++ = ii xvv -ийг олно: ii i v h vv ' 22 1 += + 3. RK2 томъёогоор )( 11 ++ = ii xuu -ийг олно: 2 11 + + ⋅+= i ii vhuu 4. ),('' 2 1 2 1 2 1 +++ = iii uxvv -ийг олно: )' 2 (' 2 1 ii i u h ukv +⋅−= + 5. RK2 томъёогоор )( 11 ++ = ii xvv -ийг олно: 2 11 ' + + ⋅+= i ii vhvv Энэ алгоритмыг, i -ийн утгыг 0-ээс 1−N хүртэл гүйлгэн давтах ёстой. Үр дүнд нь бид N ширхэг vux ,, -ийн утгатай болно. Mathcad системд бодолтыг хэрхэн хийснийг дараах зурагт үзүүллээ:
  • 7.
    © Б.Алтанхүү, 2007-2008Mathcad системтэй анхлан танилцах 7 Энд зарим нэг тайлбар хийе. RK2 болон Эйлерийн аргын томъёонууд нь рекуррент томъёонууд байдаг. Mathcad системд рекуррент, бас хоорондоо холбоотой томъёонуудыг вектор хэлбэрээр бичдэг. Тийм учраас )( 1+ixu , )( 1+ixv -г зурагт үзүүлсэн байдлаар тодорхойлсон болно. Түүнчлэн дээр дурдсан алгоритмын 1, 2, 4-т заасан алхмуудыг RK2- ын томъёонд орлуулж, нэгтгэсэн болно. Захын нөхцөлт бодлого бодох Захын нөхцлүүд бодох интервалын хоёр цэг дээр өгөгдсөн тохиолдлыг авч үзье. Үүнийг хоёр цэгт захын нөхцлийн бодлого (2-point boundary value problem) гэдэг. Хоёр цэгт захын нөхцлийн тэгшитгэлийг бодох хамгийн хялбар зам бол дээр ярьсан Odesolve() функцыг ашиглах. Энэ функцыг хэрхэн ашиглах талаар мөн өмнөх сэдэвт ярьсан тул энэ удаад Буудах аргыг хэрхэн хэрэгжүүлэхийг авч үзье. sbval() функцыг ашиглах Захын нөхцлүүд бодох интервалын эхлэл болон төгсгөлийн цэгүүд дээр хуваагдан өгөгдсөн тохиолдолд энэ функцыг хэрэглэх боломжтой. Функцыг дуудах хэлбэр: S := sbval(v, x1, x2, D, load, score) Энд:
  • 8.
    © Б.Алтанхүү, 2007-2008Mathcad системтэй анхлан танилцах 8 • v – тэгшитгэл (буюу систем тэгшитгэлийг) анхны нөхцөлт бодлого мэтээр бодоход шаардлагатай боловч өгөгдөлгүй орхигдсон анхны нөхцлүүдийг агуулах вектор. Энэ утгуудыг бид өөрсдөө таамгаар өгнө; • x1 ба x2 – бодох интервалын эхлэл, төгсгөлийн цэгүүд. v векторын агуулах утгууд x1-т харгалзана; • D(x, y) – тэгшитгэлийн (буюу систем тэгшитгэлийн) бүх уламжлалыг агуулсан вектор- функц; • load(x1, v) - Өгөгдсөн болон таамагласан бүх анхны нөхцлүүдийг агуулсан вектор- функц. Бүх утгууд нь x1-т харгалзана; • score(x2, y) – бодох интервалын төгсгөлийн x2 цэг дээр өгөгдсөн захын нөхцлүүд ба тэр цэг дээр тэгшитгэлийг (буюу систем тэгшитгэлийг) бодоход олдох шийдүүдийн зөрөөг агуулсан вектор-функц; • S – бодолтын үр дүн. Өгөгдөлгүй орхигдож, тиймээс бид таамаглан өгсөн байсан тэр анхны нөхцлүүдийн тохиромжит утгуудыг агуулсан вектор байна. Эндээс харахад sbval() функц нь яг захын нөхцөлт бодлогын шийдийг гаргаж өгдөггүй байна. Үүний оронд харин тухайн бодлогыг анхны нөхцлийн бодлого болгож хувиргахад шаардлагатай, гэхдээ дутуу байгаа тэр анхны нөхцлүүдийг олж гаргаж өгдөг байна. Буудах аргыг хэрэгжүүлж байна гэсэн үг. Харин энэ гаргаж өгсөн утгуудыг ашиглаад дээр үзсэн Odesolve(), rkfixed() г.м. функцын тусламжтайгаар захын нөхцөлт бодлогоо анхны нөхцөлт бодлого мэтээр бодох боломжтой юм. Жишээ болгоод 0cos)('2)(''2)(''' =−⋅−⋅− xxyxyxy гэсэн 3-р эрэмбийн нэгэн төрлийн тэгшитгэлийг 5.1)3('',4)3(',1)2( ===− yyy гэсэн захын нөхцлүүдтэйгээр [ ]3,2−∈x завсарт хэрхэн бодуулахыг авч үзье.
  • 9.
    © Б.Алтанхүү, 2007-2008Mathcad системтэй анхлан танилцах 9