如何使用二维数组、逆矩阵和乘法求出给定线性方程的解?

How to use two dimensional arrays, Inverses, and multiplication to get solutions to a given linear equation?

给定这些等式:

ax + by = c

dx + ey = f

#include<stdio.h>
#include<stdlib.h>


int main (void){
//Data
float extra;
float x[2];
float y[2];
float solution[2];
float coef[2][2];

printf("Give Numbers:\n");
scanf("%f %f %f %f %f %f"
,&coef[0][0],  &coef[0][1], &solution[0],
&coef[1][0],  &coef[1][1], &solution[1]);


// Create Determinant
float det;
det = (coef[0][0] * coef[1][1] - coef[0][1] * coef[1][0]);


//Setting the Inverse
extra = coef[0][0];
coef[0][0] =   coef[1][1] / det;
coef[1][1] = extra / det;
coef[1][0] = -coef[1][0] / det;
coef[0][1] =  -coef[0][1] / det;





//Multiplication
y[0] = (coef[1][1]*solution[0]-solution[1]*coef[0][1]) / det;
x[1] = (coef[0][0]*solution[1]-solution[0]*coef[1][0]) / det;

//Print statements
printf("'Y' = %f\n" , y[0]);
printf("'X' = %f\n" , x[1]);
printf("Det= %f\n",det);

}

我正在编写一个程序来求解两个具有两个未知数的联立线性方程。

我有六个单精度浮点数 a、b、c、d、e、f,每个由空格分隔。 这些数字意味着被解释为一对方程 斧+乘=c dx+ey=f 为了解决这个问题,首先将系数放入一个二乘二的矩阵中: [一乙] [德] 并将常量值放入数组中: [ c f ] 然后通过找到其行列式来反转系数矩阵: det = ( ae - bd ) 如果行列式为 0,此时终止并显示错误消息 "too complicated"

系数矩阵的逆矩阵是 [ e/det -b/det ] [ -d/det a/det ] 这应该乘以常量数组以产生 [ (ec-fb)/det (af-cd)/det ]

示例:

ax+by=c dx+ey=f

正确INPUT/OUTPUT

给出数字

1 2 3 4 5 6

x=-1.000000

y=2.000000

我的INPUT/OUTPUT

给出数字:

1 2 3 4 5 6

y = 1.6666667 x = 4.6666667

det = -3.0000

当您的代码读取输入时 {1 2 3 4 5} 它表示方程式

1 * x + 2 * y = 3
4 * x + 5 * y = 6

正确答案确实是x = -1y = 2。由于乘法部分,您的程序未计算出正确答案,该部分应为:

x[0] = coef[0][0] * solution[0] + coef[0][1] * solution[1];
x[1] = coef[1][0] * solution[0] + coef[1][1] * solution[1]

原因是一旦你有了逆,唯一剩下的就是将它乘以 solution 向量。

你错误地完成了 RHS 向量与逆矩阵的乘法。

如果您代码中的变量 x 和 y 与您的等式匹配,则它们不应该是数组。您的变量名称令人困惑。我不认为 RHS 是解决方案;这就是 x 和 y 的样子。我会称之为 b.

您用逆矩阵替换了矩阵。您只需将 RHS 向量乘以倒数即可得到解。

试试这个:

#include<stdio.h>
#include<stdlib.h>


int main (void) {
    double a[2][2];
    double x[2];
    double b[2];

    printf("Give Numbers:\n");
    scanf("%f %f %f %f %f %f" &a[0][0],  &a[0][1], &b[0], &a[1][0],  &a[1][1], &b[1]);


    double det;
    det = a[0][0]*a[1][1] - a[0][1]*a[1][0];

    double extra;
    extra = a[0][0];
    a[0][0] = a[1][1]/det;
    a[1][1] = extra/det;
    a[1][0] = -a[1][0]/det;
    a[0][1] = -a[0][1]/det;

    x[0] = a[0][0]*b[0]+a[0][1]*b[1];
    x[1] = a[1][0]*b[0]+a[1][1]*b[1];

    printf("x[0]' = %f\n" , x[0]);
    printf("zx[1] = %f\n" , x[1]);
    printf("Det= %f\n",det);
}