Bạn có thể giải quyết vấn đề này bằng chương trình giống hệt cách bạn giải quyết bằng tay (với phép nhân và phép trừ, sau đó cho kết quả đưa vào phương trình). Đây là toán học cấp trung học khá chuẩn.
-44.3940 = 50a + 37b + c (A)
-45.3049 = 43a + 39b + c (B)
-44.9594 = 52a + 41b + c (C)
(A-B): 0.9109 = 7a - 2b (D)
(B-C): 0.3455 = -9a - 2b (E)
(D-E): 1.2564 = 16a (F)
(F/16): a = 0.078525 (G)
Feed G into D:
0.9109 = 7a - 2b
=> 0.9109 = 0.549675 - 2b (substitute a)
=> 0.361225 = -2b (subtract 0.549675 from both sides)
=> -0.1806125 = b (divide both sides by -2) (H)
Feed H/G into A:
-44.3940 = 50a + 37b + c
=> -44.3940 = 3.92625 - 6.6826625 + c (substitute a/b)
=> -41.6375875 = c (subtract 3.92625 - 6.6826625 from both sides)
Vì vậy, bạn kết thúc với:
a = 0.0785250
b = -0.1806125
c = -41.6375875
Nếu bạn cắm các giá trị trở lại vào A, B và C, bạn sẽ thấy họ là đúng.
Bí quyết là sử dụng ma trận 4x3 đơn giản làm giảm lần lượt thành ma trận 3x2, sau đó là 2x1 là "a = n", n là số thực. Một khi bạn có điều đó, bạn nạp nó vào ma trận tiếp theo để lấy một giá trị khác, sau đó hai giá trị đó vào ma trận tiếp theo cho đến khi bạn đã giải quyết tất cả các biến.
Với điều kiện bạn có N phương trình riêng biệt, bạn luôn có thể giải quyết các biến N. Tôi nói rõ ràng vì hai đây không phải là:
7a + 2b = 50
14a + 4b = 100
Họ là những phương trình cùng nhân với hai nên bạn không thể có được một giải pháp từ họ - nhân đầu tiên bởi hai sau đó trừ đi lá bạn với báo cáo kết quả đúng nhưng vô dụng :
0 = 0 + 0
Bằng một ví dụ, đây là một số mã C mà làm việc ra các phương trình đồng thời là bạn đang đặt trong câu hỏi của bạn.Đầu tiên một số loại cần thiết, các biến, một chức năng hỗ trợ cho in ra một phương trình, và khi bắt đầu main
:
#include <stdio.h>
typedef struct { double r, a, b, c; } tEquation;
tEquation equ1[] = {
{ -44.3940, 50, 37, 1 }, // -44.3940 = 50a + 37b + c (A)
{ -45.3049, 43, 39, 1 }, // -45.3049 = 43a + 39b + c (B)
{ -44.9594, 52, 41, 1 }, // -44.9594 = 52a + 41b + c (C)
};
tEquation equ2[2], equ3[1];
static void dumpEqu (char *desc, tEquation *e, char *post) {
printf ("%10s: %12.8lf = %12.8lfa + %12.8lfb + %12.8lfc (%s)\n",
desc, e->r, e->a, e->b, e->c, post);
}
int main (void) {
double a, b, c;
Tiếp theo, việc giảm trong ba phương trình với ba ẩn số để hai phương trình với hai ẩn số:
// First step, populate equ2 based on removing c from equ.
dumpEqu (">", &(equ1[0]), "A");
dumpEqu (">", &(equ1[1]), "B");
dumpEqu (">", &(equ1[2]), "C");
puts ("");
// A - B
equ2[0].r = equ1[0].r * equ1[1].c - equ1[1].r * equ1[0].c;
equ2[0].a = equ1[0].a * equ1[1].c - equ1[1].a * equ1[0].c;
equ2[0].b = equ1[0].b * equ1[1].c - equ1[1].b * equ1[0].c;
equ2[0].c = 0;
// B - C
equ2[1].r = equ1[1].r * equ1[2].c - equ1[2].r * equ1[1].c;
equ2[1].a = equ1[1].a * equ1[2].c - equ1[2].a * equ1[1].c;
equ2[1].b = equ1[1].b * equ1[2].c - equ1[2].b * equ1[1].c;
equ2[1].c = 0;
dumpEqu ("A-B", &(equ2[0]), "D");
dumpEqu ("B-C", &(equ2[1]), "E");
puts ("");
Tiếp theo, việc giảm của hai phương trình với hai ẩn số với một phương trình với một không rõ:
// Next step, populate equ3 based on removing b from equ2.
// D - E
equ3[0].r = equ2[0].r * equ2[1].b - equ2[1].r * equ2[0].b;
equ3[0].a = equ2[0].a * equ2[1].b - equ2[1].a * equ2[0].b;
equ3[0].b = 0;
equ3[0].c = 0;
dumpEqu ("D-E", &(equ3[0]), "F");
puts ("");
Bây giờ chúng ta có một công thức của loại number1 = unknown * number2
, chúng tôi chỉ có thể tìm ra giá trị không xác định với unknown <- number1/number2
. Sau đó, khi bạn đã tìm ra giá trị đó, hãy thay thế nó thành một trong các phương trình với hai ẩn số và tính ra giá trị thứ hai. Sau đó, thay cả những ẩn số (nay là nổi tiếng) vào một trong các phương trình ban đầu và bây giờ bạn có giá trị cho tất cả ba ẩn số:
// Finally, substitute values back into equations.
a = equ3[0].r/equ3[0].a;
printf ("From (F ), a = %12.8lf (G)\n", a);
b = (equ2[0].r - equ2[0].a * a)/equ2[0].b;
printf ("From (D,G ), b = %12.8lf (H)\n", b);
c = (equ1[0].r - equ1[0].a * a - equ1[0].b * b)/equ1[0].c;
printf ("From (A,G,H), c = %12.8lf (I)\n", c);
return 0;
}
Sản lượng mã mà phù hợp với tính toán trước đó trong câu trả lời này:
>: -44.39400000 = 50.00000000a + 37.00000000b + 1.00000000c (A)
>: -45.30490000 = 43.00000000a + 39.00000000b + 1.00000000c (B)
>: -44.95940000 = 52.00000000a + 41.00000000b + 1.00000000c (C)
A-B: 0.91090000 = 7.00000000a + -2.00000000b + 0.00000000c (D)
B-C: -0.34550000 = -9.00000000a + -2.00000000b + 0.00000000c (E)
D-E: -2.51280000 = -32.00000000a + 0.00000000b + 0.00000000c (F)
From (F ), a = 0.07852500 (G)
From (D,G ), b = -0.18061250 (H)
From (A,G,H), c = -41.63758750 (I)
Những người khác đã trả lời câu này, nhưng hãy kiểm tra các cuốn sách * Numerical Analysis: Toán học của khoa học máy tính * bởi Kincaid và Cheney. Cuốn sách chủ yếu là về việc giải các hệ phương trình khác nhau. – Matthew