雅可比迭代法

 1 //  如下程序中的for语句未修改前为:for(j=0;j!=i&&j<6;j++) ,输出结果为5次迭代而不是正确的27次,j!=i放在for语句中则会减少迭代次数从而产生误解
 2 #include<iostream>
 3 
 4 #include<cmath>
 5 
 6 using namespace std;
 7 double fanshu(double x[], double y[], int n)
 8 {
 9     double sums = 0;
10     for(int p = 0; p < n; p++)
11         sums += (y[p] - x[p]) * (y[p] - x[p]);
12     return sqrt(sums);
13 }
14 void main()
15 {
16     double A[6][6] = {4, -1, 0, -1, 0, 0, -1, 4, -1, 0, -1, 0, 0, -1, 4, -1, 0, -1, -1, 0, -1, 4, -1, 0, 0, -1, 0, -1, 4, -1, 0, 0, -1, 0, -1, 4};
17     double b[6] = {0, 5, -2, 5, -2, 6};
18     double x[6] = {0, 0, 0, 0, 0, 0}; //设置X初值全为0;
19     double y[6] = {0, 0, 0, 0, 0, 0};
20     int N = 50;
21     int k, i, j, l;
22     double e;
23     for(k = 0; k < N; k++)
24     {
25         for(i = 0; i < 6; i++)
26         {
27             double sum = 0;
28             for(j = 0; j < 6; j++)
29                 if(j != i)
30                 {
31                     sum += A[i][j] * x[j];
32                 }
33             y[i] = (b[i] - sum) / A[i][i];
34         }
35         e = fanshu(x, y, 6);
36         if(e < 0.0001)
37         {
38             break;
39         }
40         for(l = 0; l < 6; l++)
41             x[l] = y[l];
42     }
43     cout << "迭代次数为:" << k << endl;
44     cout << "结果为: ";
45     for(int h = 0; h < 6; h++)
46         cout << y[h] << " ";
47     cout << endl;
48 }

 

posted @ 2014-04-13 23:37  惟吾德馨‘  阅读(558)  评论(0编辑  收藏  举报