扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
最可能的:
创新互联公司专业为企业提供麟游网站建设、麟游做网站、麟游网站设计、麟游网站制作等企业网站建设、网页设计与制作、麟游企业网站模板建站服务,十余年麟游做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
gauss是个函数,根据你的参数(0,1),返回一个函数指针,然后通过(x,y,z)作为参数,调用这个返回的函数指针所指向的函数。
void gauss(double a[n][n+1],double x[n])
{
int i,j,k;
double temp,s,l;
for(i=0;in-1;i++)
{
//选列主元
k=i;
for(j=i+1;jn;j++)
{ if(fabs(a[j][i])fabs(a[k][i]))
k=j;
}
//换行
if(k!=i)
for(j=i;j=n;j++)
{
temp=a[i][j];
a[i][j]=a[k][j];
a[k][j]=temp;
}
//消元
for(j=i+1;jn;j++)
{
l=1.0*a[j][i]/a[i][i];
for(k=0;kn+1;k++)
a[j][k]=a[j][k]-a[i][k]*l;
}
print(a);
printf("\n");
}
print(a);
//回代
x[n-1]=a[n-1][n]/a[n-1][n-1];
for(i=n-2;i=0;i--)
{
s=0.0;
for(j=i;jn;j++)
{
if(j==i)
continue;
s+=a[i][j]*x[j];
}
x[i]=(a[i][n]-s)/a[i][i];
}
}
#includemath.h
#includestdio.h
#includestdlib.h
#includeconio.h
#define NUMBER 20
#define Esc 0x1b
#define Enter 0x0d
float A[NUMBER][NUMBER+1] ,ark;
int flag,n;
void exchange(int r,int k);
float max(int k);
void message();
int main()
{
float x[NUMBER]; /*此数组用于存放方程解*/
int r,k,i,j;
char celect;
system("cls");
printf("\n\n用Gauss列主元消元法解线性方程组");
printf("\n\n1.解方程组请按Enter.");
printf("\n\n2.退出程式请按Esc.");
celect=getch();
if(celect==Esc)
exit(0);
printf("\n\n 输入方程组的维数:n=");
scanf("%d",n);
printf(" \n\n现在输入系数矩阵A和向量b:");
for(i=1;i=n;i++)
{
printf("\n\n请输入a%d1--a%d%d系数和向量b%d:",i,i,n,i);
/*实现将每一行中的系数和向量一次性输入,数之间用空格格开,输完后回车确定*/
for(j=1;j=n+1;j++) /*将刚才输入的数存入数组*/
scanf("%f",A[i][j]);
}
for(k=1;k=n-1;k++)
{
ark=max(k);
if(ark==0) /*判断方程是否为线性方程,即是否合法*/
{
printf("\n\n此方程组不合法!");message();
}
else if(flag!=k)
exchange(flag,k);
for(i=k+1;i=n;i++)
for(j=k+1;j=n+1;j++)
A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];
}
x[n]=A[n][n+1]/A[n][n];
for( k=n-1;k=1;k--)
{
float me=0;
for(j=k+1;j=n;j++)
{
me=me+A[k][j]*x[j];
}
x[k]=(A[k][n+1]-me)/A[k][k];
}
for(i=1;i=n;i++)
{
printf(" \n\nx%d=%f",i,x[i]);
}
message();
return 1;
}
void exchange(int r,int k) /*交换行的矩函数*/
{
int i;
for(i=1;i=n+1;i++)
A[0][i]=A[r][i];
for(i=1;i=n+1;i++)
A[r][i]=A[k][i];
for(i=1;i=n+1;i++)
A[k][i]=A[0][i];
}
float max(int k) /*比校系数大小的函数*/
{
int i;
float temp=0;
for(i=k;i=n;i++)
if(fabs(A[i][k])temp)
{
temp=fabs(A[i][k]);
flag=i;
}
return temp;
}
void message() /*实现菜单选择的函数*/
{
printf("\n\n 继续运算按 Enter ,退出程式按 Esc!");
switch(getch())
{
case Enter: main();
case Esc: exit(0);
default:{printf("\n\n不合法的输入!");message();}
}
}
C语言中的random函数可以产生均匀分布的随机变量分布区间为(0,1),假设x1,x2是由random产生的随机变量,
则y=sqrt(-2*ln(x1))为瑞利分布
theta=2*pi*x2为(0,2*pi)的均匀分布
n1=y*cos(theta),n2=y*sin(theta)为两个独立的正太分布
z=sqrt((a+n1)^2+(b+n2)^2),为莱斯分布,a ,b为常数
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流