鉴于这些方程式:
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 要解决这个问题,首先将系数放入一个二乘二矩阵: [a b] [d e] 并将常量值放入数组中: [c f] 然后通过找到它的行列式来反转系数矩阵: det =(a e - b d) 如果行列式为0,则在此时终止,并显示错误消息&#34;太复杂&#34;
然后是系数矩阵的逆 [e / det -b / det] [-d / det a / det] 这应该乘以常数数组到yeild [(e c-f b)/ det(a f-c d)/ det]
实施例
AX通过= C + DX + EY = F
CORRECT INPUT / OUTPUT
给出数字
1 2 3 4 5 6
X = -1.000000
Y = 2.000000
MY INPUT / OUTPUT
给出数字:
1 2 3 4 5 6
y = 1.6666667 x = 4.6666667
det = -3.0000
答案 0 :(得分:1)
当您的代码读取输入{1 2 3 4 5}
时,它代表方程式
1 * x + 2 * y = 3
4 * x + 5 * y = 6
正确的答案确实是x = -1
,y = 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
向量。
答案 1 :(得分:0)
你已经错误地将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);
}