回覆列表
  • 1 # 不老影音

    雅克比迭代法就是眾多迭代法中比較早且較簡單的一種,其命名也是為紀念普魯士著名數學家雅可比。雅克比迭代法的計算公式簡單,每迭代一次只需計算一次矩陣和向量的乘法,且計算過程中原始矩陣A始終不變,比較容易平行計算。

    概念

    考慮線性方程組Ax = b時,一般當A為低階稠密矩陣時,用主元消去法解此方程組是有效方法。但是,對於由工程技術中產生的大型稀疏矩陣方程組(A的階數很高,但零元素較多,例如求某些偏微分方程數值解所產生的線性方程組),利用迭代法求解此方程組就是合適的,在計算機記憶體和運算兩方面,迭代法通常都可利用A中有大量零元素的特點。雅克比迭代法就是眾多迭代法中比較早且較簡單的一種,其命名也是為紀念普魯士著名數學家雅可比。

    摺疊編輯本段迭代過程

    迭代過程

    首先將方程組中的係數矩陣A分解成三部分,即:A = L+D+U,如圖1所示,其中D為對角陣,L為下三角矩陣,U為上三角矩陣。

    之後確定迭代格式,X^(k+1) = B*X^(k) +f ,(這裡^表示的是上標,括號內數字即迭代次數),如圖2所示,其中B稱為迭代矩陣,雅克比迭代法中一般記為J。(k = 0,1,......)

    再選取初始迭代向量X^(0),開始逐次迭代。

    摺疊編輯本段收斂性

    設Ax= b,其中A=D+L+U為非奇異矩陣,且對角陣D也非奇異,則當迭代矩陣J的譜半徑ρ(J)<1時,雅克比迭代法收斂。

    摺疊編輯本段優缺點

    雅克比迭代法的優點明顯,計算公式簡單,每迭代一次只需計算一次矩陣和向量的乘法,且計算過程中原始矩陣A始終不變,比較容易平行計算。然而這種迭代方式收斂速度較慢,而且佔據的儲存空間較大,所以工程中一般不直接用雅克比迭代法,而用其改進方法。

    摺疊編輯本段程式實現示例

    #include<stdio.h>

    #include<math.h>

    #include <stdlib.h>

    main(){

    float e=0.001,z,m,a[3][3]={5,2,1,-1,4,2,2,-3,10},b[3]={-12,20,3},x[3]={0,0,0},y[3];

    int n=3,j,i,k=1;

    while(1) {

    for(i=0;i<3;i++) {

    for(j=0;j<3;j++)

    m=m+a[i][j]*x[j];

    m=m-x[i]*a[i][i];

    y[i]=(b[i]-m)/a[i][i];

    m=0;

    }

    i=0;

    while(i<3) {

    z=fabs(x[i]-y[i]);

    if(z>e)

    break;

    i++;

    }

    if(i!=3) {

    for(i=0;i<3;i++)

    x[i]=y[i];

    k++;

    }

    else if(i==3)

    break;

    }

    printf("%f\n%f\n%f\n",y[0],y[1],y[2]);

    }

  • 中秋節和大豐收的關聯?
  • 推薦幾本企業管理方面的書?