C语言线性方程组求解,很急!
来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/08/18 20:01:00
C语言线性方程组求解,很急!
![C语言线性方程组求解,很急!](/uploads/image/z/8379308-20-8.jpg?t=C%E8%AF%AD%E8%A8%80%E7%BA%BF%E6%80%A7%E6%96%B9%E7%A8%8B%E7%BB%84%E6%B1%82%E8%A7%A3%2C%E5%BE%88%E6%80%A5%21)
/*
方程组维数 :3
控制精度 :0.000001
增广矩阵第1行(空格隔开):3 4 -6 12
增广矩阵第2行(空格隔开):1 -2 1 -3
增广矩阵第3行(空格隔开):3 2 -1 11
整理完毕,此时方程组为 :
1 1.33333 -2 4
0 1 -0.9 2.1
0 0 1 1
方程的解为 :
2 3 1
Press any key to continue
*/
#include <iostream.h>
#include <math.h>
#define N 100
int main() {
\x05int n,k,i,j,m;
\x05double A[N][N + 1],eps,temp;
\x05cout << "方程组维数 : ";
\x05cin >> n;
\x05cout << "控制精度 : ";
\x05cin >> eps;
\x05for(i = 0;i < n;i++) {
\x05\x05cout << "增广矩阵第" << i + 1 << "行(空格隔开):";
\x05\x05for(j = 0;j < n + 1;j++) cin >> A[i][j];
\x05}
\x05for(k = 0; k < n; ++k) {
\x05\x05m = k;
\x05\x05for(i = k + 1; i < n; ++i) {
\x05\x05\x05if(fabs(A[i][k]) > fabs(A[m][k]))
\x05\x05\x05\x05m = i;
\x05\x05}
\x05\x05if(fabs(A[m][k]) <= eps) return 0;
\x05\x05if(m != k) {
\x05\x05\x05for(i = k;i < n + 1;i++) {
\x05\x05\x05\x05temp = A[k][i];
\x05\x05\x05\x05A[k][i] = A[m][i];
\x05\x05\x05\x05A[m][i] = temp;
\x05\x05\x05}
\x05\x05}
\x05\x05temp = A[k][k];
\x05\x05for(i = k; i < n + 1; ++i) A[k][i] /= temp; // 主元系数“归一”划
\x05\x05for(i = k + 1;i < n;i++) { // 消元
\x05\x05\x05temp = A[i][k];
\x05\x05\x05for(j = k; j < n + 1; ++j) {
\x05\x05\x05\x05A[i][j] -= A[k][j] * temp;
\x05\x05\x05}
\x05\x05}
\x05}
\x05cout << "整理完毕,此时方程组为 :" << endl;
\x05for(i = 0;i < n;i++) {
\x05\x05for(j = 0;j < n + 1;j++)
\x05\x05\x05cout << A[i][j] << " ";
\x05\x05cout << endl;
\x05}
\x05for(i = n - 2;i >= 0;i--) {
\x05\x05for(j = i + 1;j < n;j++)
\x05\x05\x05A[i][n] -= A[i][j] * A[j][n];
\x05}
\x05cout << "方程的解为 :" << endl;
\x05for(i = 0; i < n;i++) cout << A[i][n] << " ";
\x05cout << endl;
\x05return 0;
}
方程组维数 :3
控制精度 :0.000001
增广矩阵第1行(空格隔开):3 4 -6 12
增广矩阵第2行(空格隔开):1 -2 1 -3
增广矩阵第3行(空格隔开):3 2 -1 11
整理完毕,此时方程组为 :
1 1.33333 -2 4
0 1 -0.9 2.1
0 0 1 1
方程的解为 :
2 3 1
Press any key to continue
*/
#include <iostream.h>
#include <math.h>
#define N 100
int main() {
\x05int n,k,i,j,m;
\x05double A[N][N + 1],eps,temp;
\x05cout << "方程组维数 : ";
\x05cin >> n;
\x05cout << "控制精度 : ";
\x05cin >> eps;
\x05for(i = 0;i < n;i++) {
\x05\x05cout << "增广矩阵第" << i + 1 << "行(空格隔开):";
\x05\x05for(j = 0;j < n + 1;j++) cin >> A[i][j];
\x05}
\x05for(k = 0; k < n; ++k) {
\x05\x05m = k;
\x05\x05for(i = k + 1; i < n; ++i) {
\x05\x05\x05if(fabs(A[i][k]) > fabs(A[m][k]))
\x05\x05\x05\x05m = i;
\x05\x05}
\x05\x05if(fabs(A[m][k]) <= eps) return 0;
\x05\x05if(m != k) {
\x05\x05\x05for(i = k;i < n + 1;i++) {
\x05\x05\x05\x05temp = A[k][i];
\x05\x05\x05\x05A[k][i] = A[m][i];
\x05\x05\x05\x05A[m][i] = temp;
\x05\x05\x05}
\x05\x05}
\x05\x05temp = A[k][k];
\x05\x05for(i = k; i < n + 1; ++i) A[k][i] /= temp; // 主元系数“归一”划
\x05\x05for(i = k + 1;i < n;i++) { // 消元
\x05\x05\x05temp = A[i][k];
\x05\x05\x05for(j = k; j < n + 1; ++j) {
\x05\x05\x05\x05A[i][j] -= A[k][j] * temp;
\x05\x05\x05}
\x05\x05}
\x05}
\x05cout << "整理完毕,此时方程组为 :" << endl;
\x05for(i = 0;i < n;i++) {
\x05\x05for(j = 0;j < n + 1;j++)
\x05\x05\x05cout << A[i][j] << " ";
\x05\x05cout << endl;
\x05}
\x05for(i = n - 2;i >= 0;i--) {
\x05\x05for(j = i + 1;j < n;j++)
\x05\x05\x05A[i][n] -= A[i][j] * A[j][n];
\x05}
\x05cout << "方程的解为 :" << endl;
\x05for(i = 0; i < n;i++) cout << A[i][n] << " ";
\x05cout << endl;
\x05return 0;
}