📄 sor.cpp
字号:
// SOR.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
#define A(x,y) A[(u+1)*(x)+y]
#define PRECISION 0.0001
int i,j,u;
float max(int u,float *x,float *y)
{float max;
int k=0;
for(i=0;i<u;++i)
{max=fabs(x[k]-y[k]);
if(fabs(x[i]-y[i])>max)
k=i;
}
return max;
}
float max1(int u,float *A,float *x)
{float max,*sum;
int k=0;
sum=(float *)malloc(u*sizeof(float));
for(i=0;i<u;++i)
sum[i]=0;
for(i=0;i<u;++i)
{
for(j=0;j<u;++j)
sum[i]+=A(i,j)*x[j];
sum[i]=fabs((A(i,u)-sum[i])/A(i,i));
}
for(i=0;i<u;++i)
{max=sum[k];
if(sum[i]>max)
k=i;
}
return max;
}
void SOR(int u,float *A,float *x)
{int k;
float w,sum;
printf("\nPlease input the relax VAR:w="); //松弛变量w
scanf("%f",&w);
for(k=1;max1(u,A,x)>PRECISION;++k)
for(i=0;i<u;++i)
{sum=0;
for(j=0;j<u;++j)
sum+=A(i,j)*x[j];
x[i]+=w*(A(i,u)-sum)/A(i,i);
}
printf("The SOR times :%d\n",k);
printf("The SOR solution:");
for(i=0;i<u;++i)
printf("x[%d]=%f ",i+1,x[i]);
}
int main(int argc, char* argv[])
{
char c;
float *A,*x,*x_;
printf("\nPlease input the number of lines:");
scanf("%d",&u);
A=(float *)calloc(u*(u+1),sizeof(float));
x=(float *)malloc(u*sizeof(float));
x_=(float *)malloc(u*sizeof(float));
printf("Please input the matrix A(%d*%d):\n",u,u);//n*n矩阵(线形方程组的增广矩阵)
for(i=1;i<=u;++i)
{printf("\nPlease input line %d:",i);
for(j=1;j<=u;++j)
scanf("%f",&A(i-1,j-1));}
printf("Please input the origin %d dimensions vector x0=",u);
for(i=0;i<u;++i)
scanf("%f",&x[i]);
SOR(u,A,x);
printf("\nPlease press enter key to quit !");
getch();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -