作者markoo (上行下笑阿..)
看板NCTU-STAT98G
标题0716 Iteration method
时间Thu Jul 16 16:16:16 2009
// 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