حل معادلات خطي در متلب

بسياري از معادلات خطي قابل نمايش بفرم ماتريسهاي ساده در نرم افزار مطلب هستند و مي توان با قوانين مربوط به ماتريسها به راحتي اقدام به حل اينگونه معادلات نمود براي مثال دستگاه زير را درنظر بگيريد :

 

         

دستگاه فوق را ميتوان بفرم زير نيز نوشت :

          

در واقع دستگاه معادلات فوق تبديل به فرم  زیر  گرديد كه در آن ماتريس A  ماتريس ضرايب ، ماتريس يا وكتور x  نماينگر ماتريس مجهولات و سرانجام ماتريس B ماتريس ثابتهاي يا مقادير معلوم طرف دوم مي باشد ؛

 

  كاملا مشخص است براي حل اين دستگاه مي توان از روند زير استفاده نمود :

                 

براي  حل اينگونه معادلات در نرم افزار مطلب هيچ محدوديتي وجود ندارد البته در حالت كلي اگر دترمينان ماتريس A صفر باشد، دستگاه جواب ندارد در اين صورت مطلب به ابزاري مجهز است كه در صورت صفر بودن دترمينان كه در حالت عادي ماتريس وارون ندارد، مي تواند يك سري از جوابهاي آن را پيدا كند در اين صورت كافيست بجاي دستور(inv(A  از دستور (pinv(A  در نرم افزار مطلباستفاده نمائيد ؛  درزير برنامه حل مثال كه در بالا بيان گرديد، مشاهده مي شود :

clc;

clear all;

A=[1 2 3;4 5 6;7 8 0];

B=[366;804;351];

x=inv(A)*B;

x1=x(1,1)

x2=x(2,1)

x3=x(3,1)

بعد از اجرا جوابها بصورت زير است :

x1 =

    25

x2 =

    22

x3 =

    99

 

مثال:  برنامه اي در نرم افزار متلب بنويسيد كه دستگاه زير را حل نمايد :

       

كه در دستگاه فوق مقدار رادیکال 1- برابر با i است.

clc;

clear all;

A=[1/2 -1/2 0;-1/2 (1/2+0.2i+1/10i) -1/10i;0 -1/10i 1/10+1/10i];

B=[-1;0;0];

v=A\B

v=inv(A)*B % method2 to solve this system

بعد از اجرای برنامه در مطلب  داريم :

v =

  -4.0000 + 6.0000i

  -2.0000 + 6.0000i

   2.0000 + 4.0000i

 

v =

  -4.0000 + 6.0000i

  -2.0000 + 6.0000i

   2.0000 + 4.0000i

مشاهد مي كنيد كه هردو روش جوابهاي يكساني به ما مي دهد وبسته به سليقه خود هر كدام از اين روشها را كه بپسنديد مي توانيد در برنامه خود استفاده نمائيد .

 توابع ماتريس در مطلب  :

علاوه بر توابعي كه قبلا در مورد ماتريسها بيان گرديد بسياري توابع كاربردي در ماتريسها و كاربردهاي متنوع آنها  وجود دارد كه در زير به قسمتي از آنها اشاره مينمائيم :

 تابع (balance(A  براي توزيع بهتر و دقيقتر مقادير ويژه  است فرم كلي اين دستور بصورت زير است :

[T,B] = balance(A)

   B = balance(A)

به مثال زير توجه فرمائيد :

A = [1  100  10000; .01  1  100; .0001  .01  1];

 

[T,B] = balance(A)

T =

   1.0e+03 *

    2.0480         0         0

         0    0.0320         0

         0         0    0.0003

B =

    1.0000    1.5625    1.2207

    0.6400    1.0000    0.7813

    0.8192    1.2800    1.0000

تابع (cdf2rdf(A  تبديل قطر مختلط به بلوكي با قطر حقيقي فرم كلي آن بصورت  زير است:

                                                  [V,D] = cdf2rdf(V,D)

مثال :

X =[1     2     3

    0     4     5

    0    -5     4]

 

[V,D] = eig(X)       

V =

    1.0000      -0.0191 - 0.4002i     -0.0191 + 0.4002i

         0            0 - 0.6479i           0 + 0.6479i

         0       0.6479                0.6479         

 

D =

    1.0000            0                     0

         0       4.0000 + 5.0000i           0

         0            0                4.0000 - 5.0000i

 

[V,D] = cdf2rdf(V,D)

V =

    1.0000    -0.0191     -0.4002

         0          0     -0.6479

         0     0.6479           0

 

D =

    1.0000          0           0

         0     4.0000      5.0000

         0    -5.0000      4.0000

 

تابع chol(A)  نماينگرفاكتورگيري  چلوسكي ميباشد 

:clc;                          

 clear all;

A =[1    1    1    1    1

    1    2    3    4    5

    1    3    6   10   15

    1    4   10   20   35

    1    5   15   35   70];

B=chol(A)

بعد از اجرا داريم  :B =                                             

     1     1     1     1     1

     0     1     2     3     4

     0     0     1     3     6

     0     0     0     1     4

     0     0     0     0     1

تابع (cholinc(A,droptol برای فاكتورگيري ناقص چلوسكي با درج تلورانس خطا می باشد و براي حل معادلات خطي كه روند حل درون يابي استفاده مي شود، مفيد است ؛ .

فرم كلي كاربرد تابع بصورت زير ميباشد :

R = cholinc(X,droptol)

R = cholinc(X,options)

R = cholinc(X,'0')

           [R,p] = cholinc(X,'0')

R = cholinc(X,'inf')

مثال :

clc;

clear all;

S = delsq(numgrid('C',15));

C = chol(S);

R0 = cholinc(S,'0');

S2 = S; S2(101,101) = 0;

[R,p] = cholinc(S2,'0');

 

 

 

 

 

دیدگاه های بازدیدکنندگان

علی کارگر 22 اردیبهشت 1396 - 10:49

سلام: من از دستور cholinc در متلب 2016 استفاده می کنم اما خطای زیر را میدهد.اگر می شه راهنمایی کنید.
Undefined function or variable 'cholinc'.

دیدگاه خود را بنویسید

دیدگاه پس از تائید مدیریت منتشر می شود.