看板 NCTU-STAT98G 關於我們 聯絡資訊
// class6.cpp : 定義主控台應用程式的進入點。 // #include "stdafx.h" #include <stdlib.h> #include <math.h> #include <time.h> #define Num 3 #define Max(a,b) (a>b)?a:b void mprint(double A[Num][Num], double B[Num]); void vprint(double B[Num]); double tolerance(double old_x[Num], double new_x[Num]); time_t t1; int main() { int i,j; double A[Num][Num]; double A2[Num][Num]; double B[Num]; double B2[Num]; double temp; double ans[Num];//final answer double old_iterate[Num]; double iterate[Num]; double tol = 0.001; srand(time(&t1)); for (i=0;i<Num;i++) { B[i] = rand()/32767.0; B2[i]= B[i]; for (j=0;j<Num;j++) { A[i][j] = rand()/32767.0; A2[i][j] = A[i][j]; } } printf("The matrix is now as following:\n"); mprint(A,B); for (i=0;i<Num;i++) { old_iterate[i]=0; iterate[i] = old_iterate[i]; } do { for (i=0;i<Num;i++) { iterate[i]=0; temp = B[i]; for (j=0;j<Num;j++) temp-=A[i][j]*iterate[j]; iterate[i] = temp/A[i][i]; } printf("The previous iteration values are:\n"); vprint(old_iterate); printf("The present iteration values are:\n"); vprint(iterate); temp = tolerance(old_iterate,iterate); for (i=0;i<Num;i++) old_iterate[i] = iterate[i]; printf("tolerance = %lf\n",temp); system("pause"); }while (tol<=temp); for (i=0;i<Num;i++) printf("solution x[%d] = %lf\n",i+1,iterate[i]); for (i=0;i<Num;i++) { temp = 0; for (j=0;j<Num;j++) temp+=A2[i][j]*iterate[j]; printf("%dth:old value = %lf, new value =%lf\n",i+1,B2[i],temp); } return 0; } void mprint(double A[Num][Num], double B[Num]) { int i,j; for (i=0;i<Num;i++) { for (j=0;j<Num-1;j++) printf("%lf ",A[i][j]); printf("%lf | ",A[i][Num-1]); printf("%lf\n",B[i]); } } void vprint(double B[Num]) { int i; for (i=0;i<Num;i++) printf("%lf\n",B[i]); } double tolerance(double old_x[Num], double new_x[Num]) { int i; double ans=0; double temp=0; for (i=0;i<Num;i++) ans = Max(ans,fabs(old_x[i]-new_x[i])); return ans; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.7.248