Professional Documents
Culture Documents
Mssv : 102220092
Lớp sh : 22T_DT1
Giải nghiệm bằng phương pháp Gauss-Siedel và phương pháp giảm dư:
a)
b)
c)
a)
b)
c)
#include <stdio.h>
#include <math.h>
int n; float a[5][5]; float b[5][5]; float c[5],d[5],e[5];
void inp() {
printf("Nhap bac cua ma tran: ");
scanf("%d",&n);
for(int i =1 ; i<=n ; i++) {
for(int j =1 ; j<=n+1; j++){
scanf("%f", &a[i][j]);
}
}
}
void gauss(){
float maxx = 0;
for(int i =1 ; i <=n ; i++) {
float s = 0;
for(int j =1 ; j<=n+1;j++){
if(i!=j) {
b[i][j] = -a[i][j]/a[i][i];
s += fabs(b[i][j]);
}
if(j==n+1){
s-=fabs(b[i][j]);
b[i][j] *=-1;
}
}
s -= fabs(b[i][i]);
if(maxx < s ) maxx = s ;
b[i][i] = 0;
}
if(maxx<1) {
printf("%.3f < 1 => Thoa man dieu kien hoi tu!\n",maxx);
}
else printf("Khong thoa man dieu kien hoi tu!\n");
if(maxx<1) {
for(int i=1; i<=n; i++) {
c[i] = b[i][n+1];
}
while(1){
for(int i =1 ;i <=n ; i++) {
e[i] = c[i];
}
for(int i =1 ; i<=n ;i++) {
d[i] = 0;
for(int j =1 ; j<=n ; j++) {
d[i] += e[j]*b[i][j];
}
d[i] += b[i][n+1];
e[i] = d[i];
}
bool kt = true;
for(int i=1; i <= n; i++) {
if(fabs(c[i]-d[i]) > 0.0001) kt = false;
}
if(kt == true) break;
else {
for (int i =1 ; i<=n ; i++) {
c[i] = d[i];
}
}
for(int i=1; i<=n; i++) {
printf("%f ", c[i]);
}
printf("\n");
}
}
}
int main() {
inp();
gauss();
}
a)
b)
c)
b)
c)
#include <stdio.h>
#include <math.h>
int main() {
int n, t;
float a[10][10], x[10], r[10];
printf("Nhap n = ");
scanf("%d", &n);
printf("\nNhap he phuong trinh: \n");
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n + 1; j++)
scanf("%f", &a[i][j]);
printf("\nNhap vector nghiem ban dau: \n");
for (int i = 1; i <= n; i++)
scanf("%f", &x[i]);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n + 1; j++) {
if (i != j) a[i][j] /= a[i][i];
}
a[i][i] = 1;
}
for (int i = 1; i <= n; i++) {
r[i] = a[i][n+1];
for (int j = 1; j <= n; j++) {
r[i] -= a[i][j] * x[j];
}
}
do {
for (int i = 1; i <= n; i++)
printf ("%10.3f", x[i]);
for (int i = 1; i <= n; i++)
printf("%8.3f", r[i]);
printf("\n");
t = 0;
int idx = 1;
for (int i = 2; i <= n; i++) {
if (fabs(r[i]) > fabs(r[idx])) idx = i;
}
x[idx] += r[idx];
float d = r[idx];
for (int i = 1; i <= n; i++) {
r[i] -= a[i][idx] * d;
if (fabs(r[i]) >= 0.0001) t = 1;
}
} while (t);
printf("Nghiem cua he phuong trinh la: \n");
for (int i = 1; i <= n; i++)
printf("%10.3f", x[i]);
return 0;
}
a)
b)
c)