最可能的:
創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供麟游網(wǎng)站建設(shè)、麟游做網(wǎng)站、麟游網(wǎng)站設(shè)計、麟游網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、麟游企業(yè)網(wǎng)站模板建站服務(wù),十余年麟游做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
gauss是個函數(shù),根據(jù)你的參數(shù)(0,1),返回一個函數(shù)指針,然后通過(x,y,z)作為參數(shù),調(diào)用這個返回的函數(shù)指針?biāo)赶虻暮瘮?shù)。
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]; /*此數(shù)組用于存放方程解*/
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 輸入方程組的維數(shù):n=");
scanf("%d",n);
printf(" \n\n現(xiàn)在輸入系數(shù)矩陣A和向量b:");
for(i=1;i=n;i++)
{
printf("\n\n請輸入a%d1--a%d%d系數(shù)和向量b%d:",i,i,n,i);
/*實現(xiàn)將每一行中的系數(shù)和向量一次性輸入,數(shù)之間用空格格開,輸完后回車確定*/
for(j=1;j=n+1;j++) /*將剛才輸入的數(shù)存入數(shù)組*/
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) /*交換行的矩函數(shù)*/
{
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) /*比校系數(shù)大小的函數(shù)*/
{
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() /*實現(xiàn)菜單選擇的函數(shù)*/
{
printf("\n\n 繼續(xù)運算按 Enter ,退出程式按 Esc!");
switch(getch())
{
case Enter: main();
case Esc: exit(0);
default:{printf("\n\n不合法的輸入!");message();}
}
}
C語言中的random函數(shù)可以產(chǎn)生均勻分布的隨機變量分布區(qū)間為(0,1),假設(shè)x1,x2是由random產(chǎn)生的隨機變量,
則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為常數(shù)