• Zeydel metodunun yığılması
  • Sona çatma kriterisi
  • Azərbaycan Hava Yolları




    Download 2,93 Mb.
    bet16/35
    Sana06.12.2023
    Hajmi2,93 Mb.
    #112648
    TuriDərs
    1   ...   12   13   14   15   16   17   18   19   ...   35
    Bog'liq
    C fakepathKOMPUTER MUHENDISLIYINDE EDEDI USULLAR 01 06 (2) (1)

    3.2. Zeydel üsulu
    Zeydel üsulu sadə iterasiya metodunun modifikasiyasıdır. Sadə iterasiya metodunda (k+1)-ci iterasiyada qiymətlərində məchulları hesablamaq üçün əvvəlki iterasiyalarda hesablanmış qiymətləri (6) – da nəzərə alırıq.
    Zeydel üsulunda hesablanarkən (k+1)-ci iterasi­ya­da tapılmış , , qiymətlərindən istifadə edilir. Onda (k+1)-ci yaxınlaşma aşağıdakı kimi qurulur:
    (3.2.1)
    Bu düsturlar Zeydel metodunun hesablama düsturlarını təşkil edirlər.
    Aşağı və yuxarı üçbucaq matrisləri yazaq:
    .
    (3.2.1) hesabat düsturları matris şəklində aşağıdakı kimi yazılır:
    .
    Belə ki, , ilkin sistemin dəqiq həlli bərabərliyini ödəyir.
    Zeydel metodunun yığılması
    Zeydel metodunun yığılması üçün zəruri şərt:
    . (3.2.2)
    bərabərsizliyinin ödənməsidir.
    Əgər (10) bərabərsizliyi ödənərsə, onda xətanı aşağıdakı kimi qiymətləndirmək olar:
    , (3.2.3)
    burada B matrisinin normasıdır.
    Sona çatma kriterisi
    Əgər həlli dəqiqliklə tapmaq tələb olunarsa, onda (k+1)-ci addımda:

    bərabərsizliyi ödənərsə, onda iterasiya prosesi başa çatır. Ona görə də prosesin sonu üçün
    ,
    Burada

    bərabərsizliyindən istifadə etmək olar.
    Qeyd edək ki, əgər , bərabərsizliyi ödənərsə, onda aşağıdakı daha sadə kriteridən istifadə etmək olar:
    .
    Zeydel metodu bir qayda olaraq sadə iterasiya üsulundan daha tez yığılır. Bəzən isə elə ola bilər ki, sadə iterasiya üsulu tez yığılsın, Zeydel metodu isə gec yığılsın və ya ümumiyyətlə, yığılmasın.
    Nümunə. İterasiya üsulu ilə həll edilmiş tənliklər siste­mini Zeydel metodu ilə həll edək.
    Göründüyü kimi ilk addımlar hər iki üsulda eynidir.
    Zeydel metodu ilə iterasiyaları hesablayaq.
    k=1 olduqda
    hesablandıqda -in qiymətindən istifadə edirik:

    hesablandıqda :-in qiymətindən də istifadə edirik:

    hesablandıqda , , qiymətlərindən istifadə edirik:
    Analoji olaraq k=2 və k=3 hallarında hesablamalar aparırıq.
    k=2 olduqda
    k=3 olduqda
    Məchulların dəqiq qiymətləri aşağıdakılardır:
    .
    Beləliklə, göründüyü kimi Zeydel metodu ilə proses daha tez yığılır və daha dəqiq nəticə verir.
    Xətti cəbri tənliklər sisteminin Zeydel üsulu ilə həllinin C++ proqramlaşdırma dilində proqramını ümumi şəkildə aşağıdakı kimi yazmaq olar.
    #include
    #include
    #include
    using namespace std;
    int main()
    {
    // daxil edilmish matrisin olchusunu hesablayiriq
    int size;
    cin>>size;
    // matrisi heqiqi ededlerden ibaret vektorda saxlayiriq
    vector>matrix;
    // serbest sutunun hedleri de daxil edilmekle matrisin olchusu (size)x(size+1)
    matrix.resize (size);
    for (int i=0; i{
    matrix[i].resize (size+1)
    for (int j=0; j{
    cin>>matrix[i][j];
    }
    }
    // deqiqliyi hesablayiriq
    long double eps;
    cin>>eps;
    // matrisdeki setirlerin sayina beraber olchulu deyishenler vektorunu daxil edirik
    // evvelce onu sifirlarla doldururuq
    VectorpreviousVariableValus(size, 0.0);
    // teleb olunan deqiqlik alinana qeder iterasiya prosesi yerine yetirilir
    while (true)
    {
    // novbeti addimda deyishenlerin qiymetler vektorunu daxil edirik
    VectorcurrentVariableValues(size);
    // cari iterasiyada nezeri dwsturlara deyishenlerin qiymetini hesablayayiriq
    for(int=0;i{
    currentVariableValues[i]=matrix[i][size];
    //i-den ferqli deyishenlerin cemini hesablayiriq
    for (int j=0; j{
    if(j{
    currentVariableValues[i]-=matrix[i][j]* currentVariableValues[j];
    }
    // j>i olduqda evvelki iterasiyanin qiymetinden istifade edirik
    if(j>i)
    {
    }
    // i-ci deyishen uchun emsala boluruk
    currentVariableValues[i]/=matrix[i][i];
    }
    // evvelki iterasiyaya esasen cari xetani hesablayiriq
    Long double error=0.0;
    For(int i=0; i}
    Error+=abs(currentVariableValues[i]-previousVariableValues[i]);
    }
    // eger deqiqlik alinarsa, proses sona chatir
    if (error{
    Break
    }
    previousVariableValues=currentVariableValues;
    }
    For (int i=0; i{
    Printf(“%.8llf”, previousVariableValues[i];
    }
    Return 0;
    }

    Download 2,93 Mb.
    1   ...   12   13   14   15   16   17   18   19   ...   35




    Download 2,93 Mb.