请高手看完给个简单的流程图下午急用
因为是初学者所以对这种程序很头疼想看下简单的流程图 有点启示吧 呵呵
以下是程序
#include <stdio.h>
#include <math.h>
double question_1(double C[5][501],double lanbata[2]);
double question_11(double C[5][501],double beta[2]);
double question(double C[5][501]);
int max(int a,int b);
int min(int a,int b);
void chushijuzhen(double C[5][501]);
main()
{
double miu,tezhengzhi[40],beta[2];
double lanbata[2],C[5][501];
double cond_A,detA=1;
int i, j, k;
question_1(C, lanbata);
chushijuzhen(C);
question_11(C, beta);
for(i=0;i<501;i++)
detA = detA * C[2][i];
printf("行列式为:detA= %.12f \n", detA);
printf("模最小特征值:%.12f \n", 1/beta[1]);
cond_A = fabs(lanbata[0] * beta[1]);
printf("条件数cond(A): %.12f \n", cond_A);
printf("40个与要求最接近的特征值为: \n");
for(k=1;k<=39;k++)
{
chushijuzhen(C);
miu=lanbata[0]+k*(lanbata[1]-lanbata[0])/40;
for(i=0;i<501;i++)
C[2][i]=C[2][i]-miu;
question_11(C,beta);
tezhengzhi[k-1]=1/beta[1]+miu;
printf("%.12f\n", tezhengzhi[k-1]);
}
}
double question_1(double C[5][501],double lanbata[2])
{
int i;
chushijuzhen(C);
lanbata[0] = question(C);
for(i=0; i<501; i++)
C[2][i] = C[2][i] - lanbata[0];
lanbata[1] = question(C);
lanbata[1] = lanbata[1] + lanbata[0];
printf("模最大特征值:%.12f \n", lanbata[0]);
printf("与模最大特征值的差的模最大特征值:%.12f \n", lanbata[1]);
return lanbata[0];
}
double question_11(double C[5][501],double beta[2])
{
double u[501];
double epuque = 1e-12,s;
int l=1;
int i, j, k, t;
double yy[501], B1, B2;
beta[0]=0;
for(i=0;i<501;i++)
u[i]=1;
for(k=0;k<501;k++)
{
for(j=k;j<=min(k+2,500);j++)
{
double C1=0;
for(t=max(0,j-2);t<=k-1;t++)
C1=C1+C[k-t+2][t]*C[t-j+2][j];
C[k-j+2][j]=C[k-j+2][j]-C1;
}
for(i=k+1;i<=min(k+2,500);i++)
{
double C2=0;
for(t=max(0,i-2);t<=k-1;t++)
C2=C2+C[i-t+2][t]*C[t-k+2][k];
C[i-k+2][k]=(C[i-k+2][k]-C2)/C[2][k];
}
}
do
{
double enta=0,y[501];
for(i=0;i<501;i++)
enta=enta+u[i]*u[i];
enta=sqrt(enta);
for(i=0;i<501;i++)
y[i]=u[i]/enta;
for(j=0;j<=500;j++)
{
yy[j]=y[j];
}
for(i=1;i<501;i++)
{
B1=0;
for(t=max(0,i-2);t<=i-1;t++)
B1=B1+C[i-t+2][t]*yy[t];
yy[i]=yy[i]-B1;
}
u[500]=yy[500]/C[2][500];
for(i=499;i>=0;i--)
{
B2=0;
for(t=i+1;t<=min(i+2,500);t++)
B2=B2+C[i-t+2][t]*u[t];
u[i]=(yy[i]-B2)/C[2][i];
}
beta[1]=0;
for(i=0;i<501;i++)
beta[1]=beta[1]+y[i]*u[i];
if(l>=2)
s=fabs((1/beta[1]-1/beta[0])/(1/beta[1]));
else
s=1;
beta[0]=beta[1];
l++;
}while(s>epuque);
return beta[1];
}
double question(double C[5][501])
{
double enta=0,y[501];
double u[501],beta[2];
double epuque=1e-12, s;
int i,l=1, h;
beta[0]=0;
beta[1]=0;
for(i=0;i<501;i++)
{
u[i]=1;
}
do
{
beta[1]=0;
enta=0;
for(i=0;i<501;i++)
{
enta=enta+u[i]*u[i];
}
enta=sqrt(enta);
for(i=0;i<501;i++)
{
y[i]=u[i]/enta;
}
for(i=0;i<501;i++)
{
int k=0,g;
g=max(0,(i-2));
h=min(i+2,500);
u[i]=0;
for(k=g;k<=h;k++)
{
u[i]=u[i]+C[i-k+2][k]*y[k];
}
}
for(i=0;i<501;i++)
{
beta[1]=beta[1]+y[i]*u[i];
}
if(l>=2)
s=fabs((beta[1]-beta[0])/beta[1]);
else
s=1;
beta[0]=beta[1];
l++;
}while(s>epuque);
return beta[1];
}
int max(int a,int b)
{
int temp;
if(a>b)
temp=a;
else
temp=b;
return temp;
}
int min(int a,int b)
{
int temp;
if(a<b)
temp=a;
else
temp=b;
return temp;
}
void chushijuzhen(double C[5][501])
{
int i;
for(i=0;i<501;i++)
{
C[2][i]=(1.64-0.024*(i+1))*sin(0.2*(i+1))-0.64*exp(0.1/(i+1));
C[0][i]=-0.064;
C[1][i]=0.16;
C[3][i]=0.16;
C[4][i]=-0.064;
}
C[0][0]=0;
C[0][1]=0;
C[1][0]=0;
C[3][500]=0;
C[4][499]=0;
C[4][500]=0;
}
麻烦各位~~谢谢~~!