Back substitution in matlab


(system) #1

[CENTER]السلام عليكم ورحمة اللة وبركاتة…
الى اعضاء منتدى المهندس(الرائعين)…والى العضو(ايجبت)وفقة اللة….
شكرا لكم على ترحيبكم الرائع باي عضو جديد واجابتكم على كل متسأل حسب قدرتكم…شكرا لكم…[COLOR=Purple]

[/color]اخذنا درس على Back substitution و عرفتا كيف نعملة بالماتلاب على مصفوفة انا ادخل عناصرها وهذا هو الكود:

n=4;
A=[3 -2 1 -1 ; 0 4 -1 2; 0 0 2 3 ; 0 0 0 5];

B=[8;-3;11;15];
x(n)=B(n)/A(n,n);
for i=n-1:-1:1
sum=0;
for j=i+1:n
sum=sum+A(i,j)*x(j);
end ;
x(i)=(B(i)-sum)/A(i,i);
end ;
x

لكن لو اريد عمل هذا البرنامج بشكل عام على نفس الكود (يعني المستخدم يدخل عناصر المصفوفةو يدخل حجمها_المصفوفة طبعا لا بد مصفوفة مربعة)…
فعندما يدخل المسخدم عدد الصفوف ومباشرة اعرف منها عدد الأعمدة : مباشرة اعمل مصفوفة (نصفر كل قيمها) ثم نطلب من المستخدم يدخل عناصر المصفوفة…فيدخل العناصر صف صف…
فاستطيع تصفير القيم ب Zero matrix
لكن كيف…
ارجو منكم مساعدتي وفقكم اللة جميعا وحفظكم من كل سوء.
[/center]


(ايجيبت) #2
         

لعمل مصفوفه صفريه 

>> zeros(4,4)

ans =

     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0





رغم انا مش فاهم انتي عاوزه المصفوفه الصفريه في الكود بتاعك ليه

بدل البرمجه الطويله اللي انتي عاملاها دي ممكن تكتبي

    


A=[3 -2 1 -1 ; 0 4 -1 2; 0 0 2 3 ; 0 0 0 5];

B=[8;-3;11;15];

>> x=A \ B

x =

     2
    -2
     1
     3


او

________________________________________________________________________________

A=[3 -2 1 -1 ; 0 4 -1 2; 0 0 2 3 ; 0 0 0 5];

B=[8;-3;11;15];

>> x=inv(A)*B

x=

    2.0000
   -2.0000
    1.0000
    3.0000







(عبد العزيز غالب) #3

[CENTER]السلام عليكم

بحسب ما افتهم لي من سؤالك

هذا هو الجواب ولاكن مش عارف ليش انت تريد تصفر المصفوفه

n=input('input the order :');
B=input('input the marix B:');
A=input('input the marix A:');
A1=reshape(A,n,n)
B1=B'
x=inv(A1)*B1;
for i=n-1:-1:1
sum=0;
for j=i+1:n
sum=sum+A1(i,j)*x(j)
end ;
x(i)=(B1(i)-sum)/A1(i,i)
end ;
x

[/center]


(system) #4

اولا:
شكرا للعضو الرائع دوما بسرعة ردودة…(ايجبت)….
شكرا للعضو الرائع و المبدع بردودة(عبد العزيز غالب)…
الف شكر لكم….
ثانيا:
مافهمتوا شو اقصد ، ذحين هذا الكود الي كتبتة اخذناه بالمعمل…التيتشر قالنا لو ابغى المستخدم يدخل عدد الصفوف يعني اقول للمستخدم:
n=input(‘Enter the number of rows’);
اقوم انا عاملة مصفوفة بالحجم الي يدخلة…ثم اصفر قيمها…ثم اطلب من المستخدم يدخل عناصر المصفوفة الأولى بعد مايخلص اطلب منة يدخل عناصر المصفوفة الثانية(وطبعا ويدخلهم صف صف)…ثم اعمل طريقة البك سبستيوشن يعني اكتب هذا الكود
:
[SIZE=4]x(n)=B(n)/A/size;
for i=n-1:-1:1
sum=0;
for j=i+1:n
sum=sum+A(i,j)*x(j);
end ;
x(i)=(B(i)-sum)/A(i,i);
end ;
x

فاكون بكذا خليت كود ال Back substitutonعام (يعني اي مستخدم يدخل حجم المصفوفةو عناصر المصفوفتين وبهذا البرنامج ينعمل لهم
Back substituton).


(عبد العزيز غالب) #5

[CENTER]وبهذا يكون الكود كافي ووافي بالغرض

ومجرب

[CENTER][FONT=Arial Narrow][SIZE=5]

[/size][/font]
[FONT=Arial Narrow][SIZE=5]n=input('input the order :'); ادخال حجم المصفوفه [/size][/font]
[FONT=Arial Narrow][SIZE=5]B=input('input the marix B:'); ادخال المصفوفه الاولى على شكل صف[/size][/font]
[FONT=Arial Narrow][SIZE=5]A=input('input the marix A:'); ادخال المصفوفه الثانيه على شكل صف واحد[/size][/font]
[FONT=Arial Narrow][SIZE=5]A1=reshape(A,n,n) تشكيل المصفوفه على شكل مصفوفه مربعه nxn [/size][/font]
[FONT=Arial Narrow][SIZE=5]B1=B' اعاده تشكيل المصفوفه الى شكل عمود بدلا من صف[/size][/font]
[FONT=Arial Narrow][SIZE=5]x=inv(A1)*B1;[/size][/font]
[FONT=Arial Narrow][SIZE=5]for i=n-1:-1:1[/size][/font]
[FONT=Arial Narrow][SIZE=5]sum=0;[/size][/font]
[FONT=Arial Narrow][SIZE=5]for j=i+1:n[/size][/font]
[FONT=Arial Narrow][SIZE=5]sum=sum+A1(i,j)*x(j)[/size][/font]
[FONT=Arial Narrow][SIZE=5]end ;[/size][/font]
[FONT=Arial Narrow][SIZE=5]x(i)=(B1(i)-sum)/A1(i,i)[/size][/font]
[FONT=Arial Narrow][SIZE=5]end ;[/size][/font]
[FONT=Arial Narrow][SIZE=5]

x[/size][/font]
تحياتي[/center]
[/center]


(system) #6

مساء الخير…ع المنتدى الغالي واصحابة…
( عبد العزيز غالب)…ياسكر…اللة يغلبك ع اعدائك…ومايخلي لك عدو من اصلة…

مشكور…وسع اللة عليك ورزقك من كل ماتحب

A1=reshape(A,n,n) تشكيل المصفوفه على شكل مصفوفه مربعه nxn
B1=B’ اعاده تشكيل المصفوفه الى شكل عمود بدلا من صف
x=inv(A1)*B1;

لاني مبتدذة في الماتلاب فهذي شوي كبيرة علي…فتعرف التيشتر انو منقول…اذا بدك بسطلي الحل اللة يرضى عليك وويوفقك
مشكور يااحلى عزوز….

(ايجيبت) #7



n=input('input the order :'); 

B=input('input the marix B:'); 
B=B';
for i=1:n

A(i,1:n)=input(['input the raw number(' num2str(i) ')in matrix A :']); 

end
x(n)=B(n)/A(n,n);
for i=n-1:-1:1
sum=0;
for j=i+1:n
sum=sum+A(i,j)*x(j);
end ;
x(i)=(B(i)-sum)/A(i,i);
end ;
x








كما يمكنك الاستغناء عن الامر num2str لانه لا يؤثر علي الكود فيصبح الكود

     
n=input('input the order :'); 

B=input('input the marix B:'); 
B=B';
for i=1:n

A(i,1:n)=input(['input the matrix A by raw  : ']); 

end
x(n)=B(n)/A(n,n);
for i=n-1:-1:1
sum=0;
for j=i+1:n
sum=sum+A(i,j)*x(j);
end ;
x(i)=(B(i)-sum)/A(i,i);
end ;
x



وهكذا يعمل البرنامج





(المهندس سعود) #8

مشكورين وما شاء الله عليكو
كفيتو و وفيتو


(system) #9

[CENTER]مساء الخير…ع اهل الخير والعلم,

الى احلى:ايجبتياخي تحيا مصر …تحيا مصر…طول ما ايجبت فيها..

يسلملي ردك الأحلى من رائع …بالفعل كفيت وفيت…

روح اللة يسعدك ويفرج همك وييسر لك امرك…

والشكر موصول ل العضو الرائع(عبد العزيز غالب)…

سلام للجميع…
[/center]