مرحبا بالجميع
ان شاء الله تكونوا بصحة وعافية
ربما تكون هذه المرة الاولى ان اطرح موضوع جديدا منذ سنوات
المهم
حاولت مرارا وتكرارا ان اقوم بعملية تصفير لاحدى المصفوفات باستخدام الطريق الرياضية القديمة للحصول على القطر الرئيسي
وهذه الطريقة تسمى The Solution ofSimultaneous Linear Algebraic
Equations and Matrix Inversion
رابط لملف بى دى اف للطريقة
http://www.mediafire.com/?8abrw4pjy6xacj4
فقمت بعمل ذلك يدويا واشتغل معى بالكود التالى
#include <iostream>
using namespace std;
void main(){
double a[3][4];
// Enter the Array a[4][4]
for (int i = 0 ; i <3 ; i++){
for(int j = 0 ; j < 4 ; j ++){
cout<< "a["<< i <<"]["<<j<<"]=";
cin >>a[j];
}
}
//R2 = R1(a2/a1)
double x = a[1][0]/a[0][0] ; // a2/a1
a[1][0]=a[1][0]-(a[0][0]*x);
a[1][1]=a[1][1]-(a[0][1]*x);
a[1][2]=a[1][2]-(a[0][2]*x);
a[1][3]=a[1][3]-(a[0][3]*x);
//R3 = R1(a3/a1)
x = a[2][0]/a[0][0] ; // a2/a1
a[2][0]=a[2][0]-(a[0][0]*x);
a[2][1]=a[2][1]-(a[0][1]*x);
a[2][2]=a[2][2]-(a[0][2]*x);
a[2][3]=a[2][3]-(a[0][3]*x);
//R1-R2(b1/b2n)
x = a[0][1]/a[1][1]; //b1/b2n
a[0][0] = a[0][0] - (a[1][0]*x);
a[0][1] = a[0][1] - (a[1][1]*x);
a[0][2] = a[0][2] - (a[1][2]*x);
a[0][3] = a[0][3] - (a[1][3]*x);
//R3-R2(b3/b2n)
x = a[2][1]/a[1][1]; //b3/b2n
a[2][0] = a[2][0] - (a[1][0]*x);
a[2][1] = a[2][1] - (a[1][1]*x);
a[2][2] = a[2][2] - (a[1][2]*x);
a[2][3] = a[2][3] - (a[1][3]*x);
x = a[0][2]/a[2][2];
a[0][0] = a[0][0] - (a[2][0]*x);
a[0][1] = a[0][1] - (a[2][1]*x);
a[0][2] = a[0][2] - (a[2][2]*x);
a[0][3] = a[0][3] - (a[2][3]*x);
//
x = a[1][2]/a[2][2]; //
a[1][0] = a[1][0] - (a[2][0]*x);
a[1][1] = a[1][1] - (a[2][1]*x);
a[1][2] = a[1][2] - (a[2][2]*x);
a[1][3] = a[1][3] - (a[2][3]*x);
// print the value of a[4][4]
for (int i = 0 ; i <3 ; i++){
for(int j = 0 ; j < 4 ; j ++){
cout << a[j] <<"\t";
}
cout << "\n";
}
cout << "x = "<< a[0][3]/a[0][0] <<"\n";
cout << "y = "<< a[1][3]/a[1][1] <<"\n";
cout << "z = "<< a[2][3]/a[2][2] <<"\n";
getchar();
}الناتج
وبعد ذلك حاولت استخدام forloop بالاضافة الى if statement ولكن للاسف الناتج غير مماثل
اتمنى ان نجد الحل سويا ان شاء الله تعالى
#include <iostream>
using namespace std;
void main(){
double a[3][4];
// Enter the Array a[4][4]
for (int i = 0 ; i <3 ; i++){
for(int j = 0 ; j < 4 ; j ++){
cout<< "a["<< i <<"]["<<j<<"]=";
cin >>a[j];
}
}
for (int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(i==j){
cout <<"zizo\n";
}
else{
for (int k = 0 ; k < 4; k++ ){
//a[k] = a[k]-(a[j][k]*(a[j]/a[j][j]));
a[j][k] = a[j][k]-(a[k]*(a[j]/a));
}
}
}
}
// print the value of a[4][4]
for (int i = 0 ; i <3 ; i++){
for(int j = 0 ; j < 4 ; j ++){
cout << a[j] <<"\t";
}
cout << "\n";
}
getchar();
}الناتج
بالتوفيق للجميع