طريقة يعقوبي طريقة يعقوبي
قيم الموضوع
(0 أصوات)
  

مصطلحات
العربية: طريقة يعقوبي
الإنجليزية: Jacobi Method
الفرنسية: Méthode de Jacobi

المبدأ

  • هذه الطريقة خطية مرتبطة بتفكيك المصفوفة A الى مصفوفتين وN بحيث A = M+N :

 x(0) ومتجهة اعتباطية للانطلاقة.

x(k+1) = M-1b - M-1N x(k)      k = 0,....

  • M هو الجزء القطري للمصفوفة A.


الخوارزم

التهيئة : x(0) اعتباطية

 تكرار :


مثال

لنحل النظمة  Ax=b بحيث:

   و    

نعطي المصفوفة (0)x

صيغة التكراريتين الأوليتين :





  • نتائج الكرة x(1) :

    x(1)1 = (-19)/(-16) = 19/16
    x(1)2 = 1/10
    x(1)3 = 12/18 = 2/3
    x(1)4 = 1/(-14) = -1/14

    نتائج الكرة x(2) :

    x(2)1 = (-19-6(1/10)+2(2/3)+5(-1/14))/(-16) = 3911/3360
    x(2)2 = (1-3(19/16)+5(2/3)-(-1/14))/10 = 283/3360
    x(2)3 = (12+4(19/16)-(1/10)-2(-1/14))/18 = 2351/2520
    x(2)4 = (1-(19/16)-2(1/10)-2(2/3))/(-14) = 59/480


البرمجة

#include <math.h>
#include <conio.h>
#define NMAX 5
#define ITERMAX 21
double al_norme_vect(double x[NMAX],int n); void sl_jacobi(double a[NMAX][NMAX],double b[NMAX],double x1[NMAX], int n,int iter,double eps,double t[NMAX][ITERMAX]);
main() { double eps; double x[NMAX],b[NMAX],sol[NMAX]; double a[NMAX][NMAX]; double t[NMAX][ITERMAX]; int i,j,n; clrscr(); printf("Méthode de Jacobi\n"); printf(" A b\n"); eps=1e-15; n=4; a[1][1]=-16;a[1][2]=6;a[1][3]=-2;a[1][4]=-5;b[1]=-19; a[2][1]=3;a[2][2]=10;a[2][3]=-5;a[2][4]=1;b[2]=1; a[3][1]=-4;a[3][2]=1;a[3][3]=18;a[3][4]=2;b[3]=12; a[4][1]=1;a[4][2]=2;a[4][3]=2;a[4][4]=-14;b[4]=1; sol[1]=53141.0/48309.0;sol[2]=9424.0/48309.0; sol[3]=14209.0/16103.0;sol[4]=7781.0/48309.0; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("%12.6e ",a[i][j]); printf(" I %12.6e\n",b[i]); x[i]=0; } printf("Solution exacte :\n"); for(i=1;i<=n;i++) printf("%22.16e\n",sol[i]); printf("Itérations :\n"); sl_jacobi(a,b,x,n,ITERMAX-1,eps,t); for(j=1;j<=ITERMAX-1;j++) { printf("x(%2d)= (",j); for(i=1;i<=n;i++) { x[i]=t[i][j]-sol[i]; printf("%12.6e ",t[i][j]); } printf(") err= %.3e\n",al_norme_vect(x,n)); } printf("Dernier itéré :\n"); for(i=1;i<=n;i++) printf("%22.16e\n",t[i][ITERMAX-1]); }

نتائج البرنامج

في كل كرة يظهر البرنامج:

  • الكرة  x(k)

  •    ( والقيمة المضبوطة x(k)  الفرق بين الكرةالارتياب

			   A                                     b
-1.60000e+01   6.00000e+00  -2.00000e+00  -5.00000e+00   I  -1.90000e+01
 3.00000e+00   1.00000e+01  -5.00000e+00   1.00000e+00   I   1.00000e+00
-4.00000e+00   1.00000e+00   1.80000e+01   2.00000e+00   I   1.20000e+01
 1.00000e+00   2.00000e+00   2.00000e+00  -1.40000e+01   I   1.00000e+00
Solution exacte :
 1.100022770084249e+00
 1.950775217868306e-01
 8.823821648140098e-01
 1.610672959489950e-01
Itérations :
x( 1)= ( 1.18750e+00  1.00000e-01  6.66667e-01 -7.14286e-02 )    err= 3.42e-01
x( 2)= ( 1.16399e+00  8.42262e-02  9.32937e-01  1.22917e-01 )    err= 1.43e-01
x( 3)= ( 1.06406e+00  2.04980e-01  9.06994e-01  1.57022e-01 )    err= 4.49e-02
x( 4)= ( 1.10192e+00  2.18578e-01  8.74289e-01  1.63429e-01 )    err= 2.50e-02
x( 5)= ( 1.10911e+00  1.90224e-01  8.81237e-01  1.63404e-01 )    err= 1.06e-02
x( 6)= ( 1.09762e+00  1.91545e-01  8.84411e-01  1.60859e-01 )    err= 4.74e-03
x( 7)= ( 1.09851e+00  1.96835e-01  8.82067e-01  1.60681e-01 )    err= 2.37e-03
x( 8)= ( 1.10084e+00  1.95412e-01  8.81991e-01  1.61165e-01 )    err= 9.73e-04
x( 9)= ( 1.10017e+00  1.94626e-01  8.82535e-01  1.61118e-01 )    err= 5.00e-04
x(10)= ( 1.09982e+00  1.95106e-01  8.82434e-01  1.61035e-01 )    err= 2.15e-04
x(11)= ( 1.10004e+00  1.95168e-01  8.82339e-01  1.61064e-01 )    err= 1.01e-04
x(12)= ( 1.10006e+00  1.95052e-01  8.82381e-01  1.61075e-01 )    err= 4.83e-05
x(13)= ( 1.10001e+00  1.95064e-01  8.82392e-01  1.61066e-01 )    err= 2.04e-05
x(14)= ( 1.10002e+00  1.95086e-01  8.82380e-01  1.61066e-01 )    err= 1.05e-05
x(15)= ( 1.10003e+00  1.95079e-01  8.82381e-01  1.61068e-01 )    err= 4.31e-06
x(16)= ( 1.10002e+00  1.95076e-01  8.82383e-01  1.61067e-01 )    err= 2.19e-06
x(17)= ( 1.10002e+00  1.95078e-01  8.82382e-01  1.61067e-01 )    err= 9.62e-07
x(18)= ( 1.10002e+00  1.95078e-01  8.82382e-01  1.61067e-01 )    err= 4.41e-07
x(19)= ( 1.10002e+00  1.95077e-01  8.82382e-01  1.61067e-01 )    err= 2.16e-07
x(20)= ( 1.10002e+00  1.95077e-01  8.82382e-01  1.61067e-01 )    err= 8.96e-08
Dernier itéré :
 1.100022710761683e+00
 1.950774690066719e-01
 8.823822059029754e-01
 1.610672900557553e-01

 

double al_norme_vect(double x[NMAX],int n) 
{
double t;
int i;
t=0;
for(i=1;i<=n;i++)
t += x[i]*x[i];
t=sqrt(t);
return(t);
}

 

الدالة الرئيسية sl_jacobi

  • معايير الدالة

a : المصفوفة
b : العنصر الثاني
n : درجة المصفوفة
x1: متجهة البداية

iter: عدد مرات التكرار
eps: الدقة المعطاة
t: جدول مثلثي


القيمة الرجعية

ترجع الدالة القيم المكررة لطريقة يعقوبي في الجدول t.

 

تساوي الثابتة NMAX البعد القصوي للمصفوفة زائد 1، وتساوي الثابتة ITERMAX القيمة القصوى لعدد مرات التكرار زائد 1.

void sl_jacobi(double a[NMAX][NMAX],double b[NMAX],double x1[NMAX],
int n,int iter,double eps,double t[NMAX][ITERMAX])
{
int i,j,k;
double alfa,s;
double x2[NMAX];
for(i=1;i<=n;i++)
for(j=1;j<=ITERMAX-1;j++)
t[i][j]=0.0;
alfa=1.0;
k=1;
while(k<=iter && alfa>eps)
{
for(i=1;i<=n;i++)
{
s=b[i];
for(j=1;j<=n;j++)
if(i!=j)
s -= a[i][j]*x1[j];
x2[i]=s/a[i][i];
}
alfa=0.0;
for(i=1;i<=n;i++)
{
alfa+=pow(x2[i]-x1[i],2);
x1[i]=x2[i];
}
for(i=1;i<=n;i++)
{
for(j=1;j<=ITERMAX-2;j++)
t[i][j]=t[i][j+1];
t[i][ITERMAX-1]=x1[i];
}
k++;
}
}
مقالات أخرى من نفس الفئة « طريقة تفكيك QR طريقة غوص صيدل »

أضف تعليقا


إصنعها يريد أن يتأكد أنك لست روبوتا، لذلك أحسب ما يلي:

كود امني
تحديث