Метод Гаусса - ошибка Floating point - C (СИ)
Формулировка задачи:
Borland C версия 3.1
Решение системы методом Гаусса.
Выскакивает ошибка Floating point:square root of negative number во время исполнения ф-ии stage2.
Я убилась,но мне не отладить. Помогите,пожалуйста=))
#include <stdio.h> #include <conio.h> #include <math.h> #define size 10 void input(int n,int m,float A[size][size],float B[]); void stage1(float A[size][size],float L[size][size],float U[size][size],int n); void stage2(float X[size],float B[size],float L[size][size],int n); void stage3(float X[size],float B[size],float U[size][size],int n); void result (int n,float Z[]); void main() { int n,m,i,j,k; float A[size][size],B[size],X[size],L[size][size],U[size][size]; puts("Input:"); printf("Give the size of the matrix n_m:\n"); scanf("%i%i",&n,&m); input(n,m,A,B); stage1(A,L,U,n); stage2(X,B,L,n); stag[CPP][/CPP]e3(X,B,U,n); result(n,X); } void input(int n,int m,float A[size][size],float B[]) { int i,j; puts("Enter matrix A[][]:"); for(i=0; i<n; i++) { for (j=0; j<m; j++) scanf("%f",&A[i][j]); } puts("Enter vector B[]:"); for (i=0;i<n;i++) scanf("%f",&B[i]); } void result (int n,float Z[]) { int i; puts("Vector X:"); for (i=0;i<n;i++) printf("%5.2f\n",Z[i]); } void stage1(float A[size][size],float L[size][size],float U[size][size],int n) { int i,j,k; for(i=0; i<n; i++) { for (j=0; j<n; j++) L[i][j]=0; U[i][j]=0; } for(i=0; i<n; i++) { for (j=0; j<n; j++) if(i>j) L[i][j]=A[i][j]; else U[i][j]=A[i][j]; } for (k=0;k<n-1;k++) { for(i=k+1; i<n; i++) A[i][k]=A[i][k]/A[k][k]; for (j=k+1; j<n; j++) A[i][j]=A[i][j]-A[i][k]*A[k][j]; } } void stage2(float X[size],float B[size],float L[size][size],int n) { int i,j; for(i=0;i<n;i++) { X[i]=B[i]; for (j=0;j<i-1;j++) { X[i]=X[i]-L[i][j]*X[j]; X[i]=X[i]/L[i][i]; } } } void stage3(float X[size],float B[size],float U[size][size],int n) { int i,j; for(i=n-1; i>=0; i--) { X[i]=B[i]; for (j=i+1;j<n;j++) {X[i]=X[i] - U[i][j]*X[j]; X[i]=X[i]/U[i][i]; } } }
Решение задачи: «Метод Гаусса - ошибка Floating point»
textual
Листинг программы
#include "stdafx.h" #include "iostream" #include "cmath" #include "conio.h" using namespace std;#include "stdafx.h" #include "iostream" #include "cmath" #include "conio.h" using namespace std; void OutMatrix(double **a, int n) { for(int i = 0; i<n; i++) { for(int j = 0; j<n; j++) cout << a[i][j] << " "; cout << endl; } } void OutVector(double *x, int n) { for(int i = 0; i<n; i++) cout << x[i] <<" "; cout << endl; } void Gauss(double **a, double *b, int n, double *x) { // Прямой ход метода double M; for(int i = 0; i<n-1; i++) { for(int j = i; j<n-1; j++) { M = -a[j+1][i]/a[i][i]; for(int k = i; k<n; k++) { a[j+1][k] += a[i][k]*M; if(a[j+1][k] < 0.000001 & a[j+1][k]> -0.000001) a[j+1][k] = 0; } b[j+1] += b[i]*M; } } // Обратный ход int N = n-1; for(int i = 0; i<=N; i++) for(int j = N; j>=N-i; j--) { if( j == N) x[N-i] = b[N-i]; if(j>(N-i) & j<N) x[N-i] -= x[j]; if(j == N-i) x[N-i] /= a[j][j]; } } void MatrMultVect(double **a1, double *x, int n, double *b1) { double b; for(int i = 0; i<n; i++) { b = 0; for(int j = 0; j<n; j++) b += a1[i][j]*x[j]; b1[i] = b; } } void OutMatrix(double **a, int n) { for(int i = 0; i<n; i++) { for(int j = 0; j<n; j++) cout << a[i][j] << " "; cout << endl; } } void OutVector(double *x, int n) { for(int i = 0; i<n; i++) cout << x[i] <<" "; cout << endl; } void Gauss(double **a, double *b, int n, double *x) { // Прямой ход метода double M; for(int i = 0; i<n-1; i++) { for(int j = i; j<n-1; j++) { M = -a[j+1][i]/a[i][i]; for(int k = i; k<n; k++) { a[j+1][k] += a[i][k]*M; if(a[j+1][k] < 0.000001 & a[j+1][k]> -0.000001) a[j+1][k] = 0; } b[j+1] += b[i]*M; } } // Обратный ход int N = n-1; for(int i = 0; i<=N; i++) for(int j = N; j>=N-i; j--) { if( j == N) x[N-i] = b[N-i]; if(j>(N-i) & j<N) x[N-i] -= x[j]; if(j == N-i) x[N-i] /= a[j][j]; } } void MatrMultVect(double **a1, double *x, int n, double *b1) { double b; for(int i = 0; i<n; i++) { b = 0; for(int j = 0; j<n; j++) b += a1[i][j]*x[j]; b1[i] = b; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д