Tema: Matricalardı metod parametrleri sıpatında qollanıw


Download 16.71 Kb.
Sana24.03.2023
Hajmi16.71 Kb.
#1292056
Bog'liq
матрица



Tema: Matricalardı metod parametrleri sıpatında qollanıw.

Joba:


1. Matritsa tariypi

2. Matritsani ko'beytiw

3. Matritsaning bólekleniwi

Matritsa tariypi. C# de matritsani ámelge asırıwdıń bir neshe usılları bar. Dástúriy jantasıw (bul maqalada qollang'aninday) dızbekler dızbeginen paydalanıw bolıp tabıladı, geyde sańlaqlı dızbek dep ataladı. Mısalı, tómendegi kod ush qatar hám eki ústinli matritsani belgileydi:



double[][] m = new double[3][];
m[0] = new double[2];
m[1] = new double[2];
m[2] = new double[2];
m[2][1] = 5.0; // присваиваем значение строке 2, столбцу 1

Kóplegen programmalastırıw tillerinen ayrıqsha bolıp esaplanıw, C# matritsalarga alternativ jantasıwdı támiyinleytuǵın ornatılǵan kóp ólshewli dızbek túrine iye, mısalı :



double[,] m = new double[3,2];
m[2,1] = 5.0;



int rows = 3;
int cols = 2;
double[] m = new double[rows * cols];
int i = 2;
int j = 1;
m[i * cols + j] = 5.0;
C# de matritsalarni ámelge asırıwdıń úshinshi jantasıwı qatar indekslerin manipulyatcıya qılıw menen birlestirilgen bir dızbekten paydalanıw bolıp tabıladı:

Qollanılatuǵın saqlaw sxemasınan qaramastan, matritsa OOP (ob'ektke jóneltirilgen programmalastırıw ) yamasa statikalıq usıllar jantasıwı járdeminde ámelge asırılıwı múmkin. Sonday etip, OOP jantasıwı sonday bolıwı múmkin:



public class MyMatrix
{
int m; // количество строк
int n; // количество столбцов
data[][]; // значения
...
}

Matritsalarni ámelge asırıw ushın birden-bir optimal tańlaw joq ; barlıǵı siz shuǵıllanap atırǵan arnawlı kodlaw stsenariysine hám jeke kodlaw jeńillikińizge baylanıslı. Bul maqala statikalıq usıl jantasıwınan paydalanadı, sebebi onı túsiniw hám qayta islew eń ańsat.

Matritsalar ushın dızbekler dızbekinen paydalanilganda (sebebi hár bir qatar bólek jaratılıwı kerek), kóbinese yadtı bólistiriwdi ámelge asıratuǵın járdemshi usıldı anıqlaw qolay. Mısalı :

static double[][] MatrixCreate(int rows, int cols)
{
// Создаем матрицу, полностью инициализированную
// значениями 0.0. Проверка входных параметров опущена.
double[][] result = new double[rows][];
for (int i = 0; i < rows; ++i)
result[i] = new double[cols]; // автоинициализация в 0.0
return result;
}

Bul usıldı sonday dep ataw múmkin:



double[][] m = MatrixCreate(3,2);
m[2][1] = 5.0;

Bul usıl ózińizdiń matritsa usılları kitapxanańızdı jaratıwdıń abzallıqlarınan birin kórsetip beredi: eger siz islewdi jaqsılamoqchi bolsańız, esaptan tısqarılardı alıw qáwipi joqarı bolǵan halda, qáteler ushın kirisiw parametrlerin tekseriwden waz keshiwińiz múmkin. (Bul maqalanı qısqasha saqlaw ushın qátelerdi tekseriwdiń kópshilik bólegi alıp taslandı.) Taǵı bir ábzallıq sonda, siz ózińizdiń arnawlı stsenariyińizdi optimallastırıw ushın kitapxanańızdı ózgertiwińiz múmkin. Tiykarǵı kemshilik sonda, óz kitapxanańızdı jaratıw ámeldegi kitapxanadan paydalanıwdan kóre kóbirek waqıt talap etedi.


Matritsani ko'beytiw
Itibar beriń, hár bir kletkanıń ma`nisin esaplaw basqa kletkalar mánislerinen ǵárezsiz bolıp tabıladı, sol sebepli hár bir esap ǵárezsiz bolıp tabıladı hám olar bir neshe protsessorli (yamasa yadrolı ) kompyuterde parallel túrde islewi múmkin. Matritsalarni kóbeytiwdiń standart jantasıwı :

static double[][] MatrixProduct(double[][] matrixA,
double[][] matrixB)
{
int aRows = matrixA.Length; int aCols = matrixA[0].Length;
int bRows = matrixB.Length; int bCols = matrixB[0].Length;
if (aCols != bRows)
throw new Exception("Non-conformable matrices in MatrixProduct");
double[][] result = MatrixCreate(aRows, bCols);
for (int i = 0; i < aRows; ++i) // каждая строка A
for (int j = 0; j < bCols; ++j) // каждый столбец B
for (int k = 0; k < aCols; ++k)
result[i][j] += matrixA[i][k] * matrixB[k][j];
return result;
}

3. Matritsaning bólekleniwi


Ídıraw M kvadrat matritsani aladı hám eki jańa kvadrat matritsani esaplab shıǵadı, olar kópaytirilganda túp M matritsasini beredi. Bul ideya cifrlardıń ádetiy faktorizatsiyasiga uqsaydı : 6 nomerin 2 hám 3 faktorlarǵa ajıratıw múmkin, sebebi 2 * 3 = 6. Aldın matritsalarni faktoringlashda onsha mánis joq sıyaqlı tuyulishi múmkin, biraq málim bolıwısha, bunday faktorizatsiya matritsalarni inversiyalashning júdá qıyın máselesin talay ápiwayılastıradı. Eger matritsaning bólekleniwiniń kóp túrleri ámeldegi bolsa hám olardıń hár biri bir neshe algoritmlar járdeminde esaplanıwı múmkin. Bul maqalada keltirilgen texnika LUP dekompozitsiyasi dep ataladı hám bólekan aylanıw menen Doolittle usılınan paydalanadı.

9.000 5.000 3.000 4.000
4.000 8.000 2.000 5.000
3.000 5.000 7.000 1.000
2.000 6.000 0.000 8.000
LUP bólekleniwin túsiniw ushın birinshi náwbette ataqlı matematikalıq Alan Turing tárepinen kiritilgen ápiwayı LU bólekleniwin túsiniw paydalı boladı. Aytaylik, sizde sonday 4×4 matritsa bar:


1.000 0.000 0.000 0.000
0.444 1.000 0.000 0.000
0.333 0.577 1.000 0.000
0.222 0.846 -0.219 1.000
M ushın bir múmkin bolǵan LU bólekleniwi L ga teń:

Hám U g'a teń:




9.000 5.000 3.000 4.000
0.000 5.778 0.667 3.222
0.000 0.000 5.615 -2.192
0.000 0.000 0.000 3.904

Bul L * Ol = M bolǵanı ushın isleydi. Itibar beriń, L matritsasining qiyiqida 1, 0 hám joqarı ońında 0, 0 bahaları bar. Basqasha etip aytqanda, tómengi matritsaning zárúrli kletka bahaları tómengi shep tárepte jaylasqan. Tap sonday, joqarı matritsa kletkalarınıń zárúrli bahaları tiykarǵı qiyiqda hám joqarı oń tárepte jaylasqan.


Sonı da eslep qalıńki, L hám Ol dagi zárúrli ketek bahaları jaylasıwında bir-birine uyqas kelmeydi. Sonday etip, L hám Ol eki nátiyje matritsalarini jaratıw ornına, matritsani bóleklew algoritmı ádetde bir matritsada tómengi hám joqarı nátiyjelerdi saqlaydı. yadtı saqlaw ushın L hám Ol ni saqlaydı.
LUP matritsasining bólekleniwi LU bólekleniwiniń kishi, biraq zárúrli ózgeriwi bolıp tabıladı. LUP bólekleniwi M matritsasini aladı hám L hám Ol matritsalarini, sonıń menen birge, P dızbekti jaratadı. LUPdagi L hám Ol dıń ónimi túp M matritsasiga tolıq uyqas kelmeydi, lekin M dıń birpara qatarlar qayta tártiplengen versiyası bolıp tabıladı. Bul qatarlar qanday tártiplengenligi haqqındaǵı maǵlıwmatlar P dızbekinde saqlanadı ; bul maǵlıwmatlardan M túp matritsasini qayta qurıw ushın paydalanıw múmkin.
Bul maqalada keltirilgen Doolittle bólekleniwiniń jaqınnan baylanıslı versiyası Crout bólekleniwi dep ataladı. Dolittle hám Kraut usılları ortasındaǵı tiykarǵı parq sonda, Doolittle 1. 0 bahaların L matritsaning tiykarǵı qiyiqiga, Kraut bolsa Ol matritsasining tiykarǵı qiyiqiga jaylastıradı.
LUP bólekleniwi LU bólekleniwine qaraǵanda tez-tez isletiliwiniń sebebi júdá názik. Qısqasha kórip turǵanıńız siyaqlı, ıdıraw matritsani ózgertiw ushın isletiledi. Biraq, matritsani bóleklew onı inversiya qılıw ushın járdemshi usıl retinde qollanılǵanda, LU matritsaning tiykarǵı qiyiqi boylap 0, 0 ma`nisi bolsa, inversiya áwmetsiz boladı. Sonday etip, LUP dekompozitsiyasida, tiykarǵı qiyiqda 0, 0 ma`nisi payda bolǵanda, algoritm qiyiqdan 0, 0 ma`nisin qózǵaw ushın eki qatardı almastıradı hám P dızbekinde qaysı qatarlar almastırilganligini gúzetip baradı
MatrixDecompose usılı kvadrat matritsani aladı hám ush bahanı qaytaradı. Ózgertirilgen LU matritsasi anıq qaytarıladı. Qalǵan eki baha shıǵıw parametrleri arqalı qaytarıladı. Olardan biri qatarlar qanday almastırilganligi haqqındaǵı maǵlıwmatlardı saqlaytuǵın almastırıw dızbeki bolıp tabıladı. Ekinshi shıǵıw parametri - almastırıwlar sanı jup (+1) yamasa toq (-1) bolǵanına qaray +1 yamasa -1 ma`nisin qabıl etiwshi gilt. Gilt ma`nisi matritsani teris ózgertiw ushın isletilmaydi, lekin eger ıdıraw matritsaning determinantini esaplaw ushın isletilse, talap etiledi.
MatrixDecompose usılı júdá quramalı, biraq tiykarınan kodtı ózgertiw ushın odaǵı bir neshe tolıq maǵlıwmatlardı túsiniw jetkilikli. Bul erda usınıs etilgen versiya MatrixDuplicate járdemshi usılı arqalı qaytarılǵan LU matritsasi ushın jańa yadtı ajratadı :

static double[][] MatrixDuplicate(double[][] matrix)
{
// Предполагается, что матрица не нулевая
double[][] result = MatrixCreate(matrix.Length, matrix[0].Length);
for (int i = 0; i < matrix.Length; ++i) // Копирование значений
for (int j = 0; j < matrix[i].Length; ++j)
result[i][j] = matrix[i][j];
return result;
}

Alternativ jantasıw - nátiyjeni yadtı saqlaw ushın kirisiw matritsasiga jaylastırıw. C# tiliniń semantikasi matritsa parametriniń qayta ótiwin talap etedi, sebebi ol kirisiw hám shıǵıw ushın isletiledi. Bul jantasıw menen usıl qolı tómendegishe kórinedi:



static void MatrixDecompose(ref double[][] matrix,
out int[] perm, out int toggle)

Yamasa anıq qaytarıw ma`nisi shıǵarıp taslanǵanlıǵı sebepli siz onı almastırıw yamasa almastırıw dızbeki ushın isletiwińiz múmkin, mısalı :



static int[] MatrixDecompose(ref double[][] matrix, out int toggle)

Eger siz matritsa determinantini esaplaw ushın faktorizatsiyadan paydalanmoqchi bolmasańız, usıl imzosini ápiwayılastırıw ushın almastırıw parametrin ótkerip jiberiwińiz múmkin.


MatrixDecompose-dıń siz ózgertiwshi bolǵan taǵı bir bólegi ańlatpa bolıp tabıladı:

if (Math.Abs(result[j][j]) < 1.0E-20)
return null;

Bul kod tómendegilerdi ańlatadı : eger eki qatar almasǵannan keyin de, tiykarǵı qiyiqda 0, 0 ma`nisi bolǵanlıǵı sebepli, ele da 0, 0 bolıp qalsa, null ma`nisin qaytarıń. Sistemada isletiletuǵın anıqlıq dárejesine qaray, siz epsilonning qálegen ma`nisin 1. 0 E-20 dan basqa zatqa ózgertiwdi qálewińiz múmkin. hám nullni qaytarıw ornına, siz esaptan tısqarı etiwińiz múmkin; eger bul usıl matritsani inversiyalash waqtında shaqırılsa, process áwmetsiz boladı. Aqır-aqıbetde, eger siz matritsa dekompozitsiyasidan onı teris ózgertiwden basqa maqsetlerde paydalanıp atırǵan bolsańız, ol halda ańlatpanı pútkilley tastap qoyıwıńız múmkin.


Matritsa determinanti jaysha LUP ıdıraw matritsasining tiykarǵı qiyiqidagi bahalardı almastırıw ma`nisine qaray artıqsha yamasa minus belgisi menen kóbeytiw nátiyjesi bolıp tabıladı. Ózgertiw ma`nisiniń int den double ga jasırın túrine ózgeriwine itibar beriń. MatrixDeterminant-ga qáte tekseriwin qosıwdan tısqarı, kiritilgen matritsaning ólshemi 1 (bir bahanı qaytaradı ) yamasa 2 × 2 (a*d - b*c qaytaradı ) bolǵan jaǵdaylarda aldınǵa qaytıwdı qosıwıńız kerek.
HelperSolve usılı x dızbekin tabadı, ol LU matritsasiga kópaytirilganda b dızbekin beredi. Bul usıl júdá quramalı hám siz onı qanday islewine bir neshe mısallar arqalı tolıq túsiniwińiz múmkin. Onıń eki ciklı bar. Birinshi cikl LU matritsasining tómengi bóleginde aldınǵa jılısıwdan paydalanadı, ekinshi cikl bolsa birdey matritsaning joqarı bóleginde keyin basıp almastırıwdan paydalanadı. Birpara basqa matritsalarni bóleklew ámeliyatlarında soǵan uqsas usıl, mısalı, luBackSub dep ataladı.
Bul kod qısqa bolsa -de, ol júdá quramalı, biraq onı ózgertiwińiz kerek bolǵan stsenariyler joq. Este tutingki, HelperSolve MatrixDecompose-den LU matritsasini qabıl etedi, lekin perm shıǵıw parametrinen paydalanmaydı. Bul HelperSolve tiykarınan járdemshi usıl ekenligin hám teńlemeler sistemasın sheshiw ushın qosımsha kodlı oraw kerekligini ańlatadı. Ob'ektke jóneltirilgen programmalastırıw ushın bul maqala daǵı kodtı qayta qayta tiklewde siz HelperSolve usılın jeke qılıwdı ábzal kóresiz.
Sızıqlı teńlemeler sistemasın tarqatıp alıwdı, teris matritsani yamasa matritsa determinantini tabıwdı talap etetuǵın kóplegen algoritmlar bar. Matritsaning bólekleniwi bul barlıq operatsiyalardı orınlaw ushın nátiyjeli usıl bolıp tabıladı. Bul jerde keltirilgen kod kod bazangizdagi sırtqı baylanıslılıqlardı jónge salıw qılajaq bolǵan yamasa islewdi jaqsılaw yamasa funksionallıqtı ózgertiw ushın operatsiyalardı sazlaw qábiletine mútáj bolǵan jaǵdaylarda isletiliwi múmkin. Tınıshlantıratuǵın dári ishiń!

Paydalanılg'an a'debiyatlar:



1. K.Safoeva Matematik programmalsh. O‘quv qo‘llanma. T.:UAJBHT, 2004 y.
2. T.X.Holmatov, N.I.Toyloqov. Amaliy matematika, dasturlash va kompyuterning dasturiy ta’minoti. T.: “Mexnat”, 2000 y.
3. U.Yuldashev, F.Sharipxodjayeva. Sonli usullar. Qo‘llanma. T.: [s.n], 2012 y.
4. Меняев Михаил Федорвич. Информационные технологии управления. Москва, «Омега-Л», 2003 г.
5. Yuldashev U.Yu., Boqiev R.R., Karimov O. Matematik dasturlash (ma’ruza matnlari) T.: TDPU, 2000
Download 16.71 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling