高斯乔丹 3x4
用户输入 12 个值
这段代码的目的是使用高斯乔丹方法将一个矩阵减少到 简化梯形
所以基本上我正在尝试编写和调试高斯乔丹算法,但我被我的 printf 语句的去向卡住了。我想在运行输出中标记我的步骤 1-12,但是当我运行它时,一切似乎都不合适:
[![在此处输入图片描述][1]][1]
*我还在我的代码中故意省略了第 1、4、9 步,因为它们与我应用算法的情况无关,如果这会引起混淆,抱歉
如果您有任何帮助或建议,我将不胜感激
#include <stdio.h>
int main(void) {
int i,j,z,m;
//coefficent array
double a[3][3];
//constant value array
double b[3];
//augmented array
double c[3][4];
//solution array
double x[3];
//prompt user input and store coefficients and constants in seperate matrices
printf("Input coefficients of equations\n");
for (i=0; i<3; i++){
for (j=0; j<3; j++){
scanf("%lf", &a[i][j]);
}
}
printf("Input constant values\n");
for (i=0; i<3; i++){
scanf("%lf",&b[i]);
}
//create augmented matrix
for (i=0; i<3; i++){
for(j=0; j<3; j++){
c[i][j]=a[i][j];
}
}
for (i=0; i<3; i++){
c[i][3]=b[i];
}
printf("Augmented matrix:\n");
//print loop
for (i=0; i<3; i++){
for (j=0; j<4; j++){
printf("%.2lf\t",c[i][j]);
}
printf("\n");
}
/*z=0 step 2,3,4
z=1 step 6,7,8
z=2 step 10,11,12
if m!=z, do steps 3,4 7,8 11,12
if m==z, do steps 2,6,10
*/
for (z=0; z<3; z++){
for (m=0; m<3; m++){
if(m==z){
//STEP 2,6,10
double step2 = c[z][z];
for (j=0; j<4; j++){
c[z][j]=c[z][j]/step2;
}
if(z==0){
printf("Step 2:\n");
}
if(z==1){
printf("Step 6:\n");
}
if(z==2){
printf("Step 10:\n");
}
//print loop
for (i=0; i<3; i++){
for (j=0; j<4; j++){
printf("%.2lf\t",c[i][j]);
}
printf("\n");
}
}
if(m!=z){
//STEP 3,7,11
double step3 = c[m][z];
for (j=0; j<4; j++){
c[m][j]=c[m][j]-(step3*c[z][j]);
}
if(z==0&&m==1){
printf("Step 3:\n");
}
if(z==1&&m==2){
printf("Step 7:\n");
}
if(z==2&&m==1){
printf("Step 11:\n");
}
//print loop
for (i=0; i<3; i++){
for (j=0; j<4; j++){
printf("%.2lf\t",c[i][j]);
}
printf("\n");
}
//STEP 4,8,12
double step4= c[m][z];
for (j=0; j<4; j++){
c[m][j]=c[m][j]-(step4*c[z][j]);
}
if(z==0&&m==2){
printf("Step 4:\n");
}
if(z==1&&m==0){
printf("Step 8:\n");
}
if(z==2&&m==0){
printf("Step 12:\n");
}
//print loop
for (i=0; i<3; i++){
for (j=0; j<4; j++){
printf("%.2lf\t",c[i][j]);
}
printf("\n");
}
}
}
}
printf("Solution:\n");
for (i=0; i<3; i++){
x[i]= c[i][3];
}
for (j=1; j<=3; j++){
printf("x[%i]=%.2lf\n",j,x[j-1]);
}
return 0;
}
[1]: https://i.stack.imgur.com/Z0ZvZ.png