C++ 求解具有两个未知数的两个方程组
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19619248/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Solve system of two equations with two unknowns
提问by user2925251
Solve the system of two equations with two unknowns below:
求解具有以下两个未知数的两个方程组:
a1, b1, c1, a2, b2 and c2 are inputted by the user himself.
a1、b1、c1、a2、b2、c2由用户自己输入。
I've been trying to find a math solution for the problem first and I can't seem to go far..
我一直试图首先为这个问题找到数学解决方案,但我似乎走不远。
What I've tried so far is :
到目前为止我尝试过的是:
- From first equation to find y. (b1y = c1-a1x, y = (c1-a1x)/b1)
- Then I replace y in the second equation and I get one equation with 1 unknown in this case x. However, I can't solve the equation, I get some odd numbers / equations and stopped here.
- 从第一个方程找到y。(b1y = c1-a1x, y = (c1-a1x)/b1)
- 然后我在第二个方程中替换 y,在这种情况下,我得到一个未知数为 1 的方程。但是,我无法解方程,我得到了一些奇数/方程并停在这里。
Is this correct or is there an easier way to do this?
这是正确的还是有更简单的方法来做到这一点?
Current code:
当前代码:
#include <iostream>
using namespace std;
int main()
{
int a1, b1, c1, a2, b2, c2;
cout << "Enter the values for the first equation." << endl;
cout << "Enter the value for a1" << endl;
cin >> a1;
cout << "Enter the value for b1" << endl;
cin >> b1;
cout << "Enter the value for c1" << endl;
cin >> c1;
cout << "Enter the values for the second equation." << endl;
cout << "Enter the value for a2" << endl;
cin >> a2;
cout << "Enter the value for b2" << endl;
cin >> b2;
cout << "Enter the value for c2" << endl;
cin >> c2;
cout << "Your system of equations is the following:" << endl;
cout << a1 << "x+" << b1 << "y=" << c1 << endl;
cout << a2 << "x+" << b2 << "y=" << c2 << endl;
if ((a1 * b2) - (b1 * a2) == 0){
cout << "The system has no solution." << endl;
}
else{
res_x = ((c1*b2) - (b1*c2))/((a1*b2)-(b1*a2));
res_y = ((a1*c2) - (c1*a2)) / ((a1*b2) - (b1*a2));
cout << "x=" << res_x << " y=" << res_y << endl;
}
return 0;
}
回答by 4pie0
we solve the linear system using Cramer's rule:
我们使用Cramer 规则求解线性系统:
int main(int argc, char** argv) {
/* we solve the linear system
* ax+by=e
* cx+dy=f
*/
if(argc != 7) {
cerr<<"Cramer equations system: error,"
" we need a,b,c,d,e,f parameters.\n";
return -1;
}
double a,b,e;
double c,d,f;
sscanf(argv[1],"%lf",&a);
sscanf(argv[2],"%lf",&b);
sscanf(argv[3],"%lf",&e);
sscanf(argv[4],"%lf",&c);
sscanf(argv[5],"%lf",&d);
sscanf(argv[6],"%lf",&f);
double determinant = a*d - b*c;
if(determinant != 0) {
double x = (e*d - b*f)/determinant;
double y = (a*f - e*c)/determinant;
printf("Cramer equations system: result, x = %f, y = %f\n", x, y);
} else {
printf("Cramer equations system: determinant is zero\n"
"there are either no solutions or many solutions exist.\n");
}
return 0;
}
./cramer_equation_system 1 2 5 1 -1 -1
./cramer_equation_system 1 2 5 1 -1 -1
Cramer equations system: result, x = 1.000000, y = 2.000000
Cramer 方程组:结果,x = 1.000000,y = 2.000000
回答by gregn3
Javascript version, inspired by 4pie0's answer
Javascript 版本,灵感来自4pie0 的答案
// throws error if intersection can't be found
function intersect_2_lines (
a,b,e,
c,d,f
)
{
/* we solve the linear system
* ax+by=e
* cx+dy=f
*/
var determinant = a*d - b*c;
if(determinant != 0) {
var x = (e*d - b*f)/determinant;
var y = (a*f - e*c)/determinant;
console.log(`Cramer equations system: result, x = ${x}, y = ${y}\n`);
} else {
throw new Error("Cramer equations system: determinant is zero\n" +
"there are either no solutions or many solutions exist.\n");
}
return [x,y];
}