数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
楼主: totoerer

C语言解题经典程序(2)

[复制链接]
 楼主| 发表于 2004-5-15 07:37:09 | 显示全部楼层
< center" align=center><B>/*  全主元消去法计算行列式的值 det.c  */<p></p></B></P>< 23pt; mso-line-height-rule: exactly"><B>#include&lt;math.h&gt;<p></p></B></P>< 23pt; mso-line-height-rule: exactly"><B>#include&lt;stdio.h&gt;<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>double det(double **a,int n)<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>  {<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>  int i,j,k,i0,j0,m=1;<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>  double c,t,maxa,d=1.0,eps=1.0e-20;<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>  for(k=0;k&lt;n-1;k++)<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>    {<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>    maxa=0.0;<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>    for(i=k;i&lt;n;i++)<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>    for(j=k;j&lt;n;j++)<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      {<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      t=fabs(a[j]);<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      if(t&gt;maxa)<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>       {      maxa=t;  i0=i;  j0=j;      }<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      }<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>    if(maxa&lt;=eps)return(0.0);<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>    if(i0!=k)<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      {<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      m=-m;<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      for(j=k;j&lt;n;j++)<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      { <p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      t=a[k][j];  a[k][j]=a[i0][j];  a[i0][j]=t;<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      }<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      }<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>    if(j0!=k)<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      {<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      m=-m;<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      for(i=k;i&lt;n;i++)<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>       {<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>       t=a[j0];   a[j0]=a[k];   a[k]=t;<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>       }<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      }<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>    d*=a[k][k];   c=1.0/a[k][k];<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>    for(i=k+1;i&lt;n;i++)<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      {<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      t=a[k]*c;<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      for(j=k+1;j&lt;n;j++)<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>     a[j]-=(a[k][j]*t);<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>      }<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>    }<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>  d=d*(double)m*a[n-1][n-1];<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>  return(d);<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>  }<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B> <p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>main()<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>  {<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>  int i,n=4; <p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>  double *pa[4];<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>  double a[4][4]={1,2,3,4,2,3,4,1,3,4,1,2,4,1,2,3};<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>  for(i=0;i&lt;n;i++)pa=a;<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>  printf("\nD=%g",det(pa,n));<p></p></B></P><P 23pt; mso-line-height-rule: exactly"><B>  }</B><B><p></p></B></P>
 楼主| 发表于 2004-5-15 07:41:20 | 显示全部楼层
< center" align=center><B>/*</B><B>全主元消去法求行列式的值</B><B>*/<p></p></B></P>< 18pt">#include&lt;math.h&gt;<p></p></P>< 18pt">#include&lt;stdio.h&gt;<p></p></P><P 18pt"> <p></p></P><P 18pt">double det(double *a[],int n)<p></p></P><P 18pt">  {<p></p></P><P 18pt">  int i,j,k,i0,j0,m=1;<p></p></P><P 18pt">  double c,t,maxa,d=1.0,eps=1.0e-20;<p></p></P><P 18pt">  for(k=0;k&lt;n-1;k++)<p></p></P><P 18pt">    {<p></p></P><P 18pt">    maxa=0.0;<p></p></P><P 18pt">    for(i=k;i&lt;n;i++)<p></p></P><P 18pt">    for(j=k;j&lt;n;j++)<p></p></P><P 18pt">      {<p></p></P><P 18pt">      t=fabs(a[j]);<p></p></P><P 18pt">      if(t&gt;maxa)<p></p></P><P 18pt">           {<p></p></P><P 18pt">           maxa=t;i0=i;j0=j;<p></p></P><P 18pt">           }<p></p></P><P 18pt">      }<p></p></P><P 18pt">    if(maxa&lt;=eps)return(0.0);<p></p></P><P 18pt">    if(i0!=k)<p></p></P><P 18pt">      {<p></p></P><P 18pt">      m=-m;<p></p></P><P 18pt">      for(j=k;j&lt;n;j++)<p></p></P><P 18pt">           {<p></p></P><P 18pt">           t=a[k][j];<p></p></P><P 18pt">           a[k][j]=a[i0][j];<p></p></P><P 18pt">           a[i0][j]=t;<p></p></P><P 18pt">           }<p></p></P><P 18pt">      }<p></p></P><P 18pt">    if(j0!=k)<p></p></P><P 18pt">      {<p></p></P><P 18pt">      m=-m;<p></p></P><P 18pt">      for(i=k;i&lt;n;i++)<p></p></P><P 18pt">           {<p></p></P><P 18pt">           t=a[j0];<p></p></P><P 18pt">            a[j0]=a[k];<p></p></P><P 18pt">            a[k]=t;<p></p></P><P 18pt">            }<p></p></P><P 18pt">      }<p></p></P><P 18pt">    d*=a[k][k];<p></p></P><P 18pt">    c=1.0/a[k][k];<p></p></P><P 18pt">    for(i=k+1;i&lt;n;i++)<p></p></P><P 18pt">      {<p></p></P><P 18pt">      t=a[k]*c;<p></p></P><P 18pt">      for(j=k+1;j&lt;n;j++)<p></p></P><P 18pt">           a[j]-=(a[k][j]*t);<p></p></P><P 18pt">      }<p></p></P><P 18pt">    }<p></p></P><P 18pt">  d=d*(double)m*a[n-1][n-1];<p></p></P><P 18pt">  return(d);<p></p></P><P 18pt">  }<p></p></P><P 18pt"> <p></p></P><P 18pt">main()<p></p></P><P 18pt">  {<p></p></P><P 18pt">  int i,n=4;<p></p></P><P 18pt">  double *pa[4];<p></p></P><P 18pt">  double a[4][4]={1,2,3,4,2,3,4,1,3,4,1,2,4,1,2,3};<p></p></P><P 18pt">  for(i=0;i&lt;n;i++)pa=a;<p></p></P><P 18pt">  printf("\nD=%g",det(pa,n));<p></p></P><P 18pt">   }<p></p></P>
 楼主| 发表于 2004-5-15 07:41:45 | 显示全部楼层
< center" align=center><B>赛德尔迭代法解线性方程组</B><B>  seidel.c<p></p></B></P>< 23pt; mso-line-height-rule: exactly">#include&lt;math.h&gt;<p></p></P>< 23pt; mso-line-height-rule: exactly">#include&lt;stdio.h&gt;<p></p></P><P 23pt; mso-line-height-rule: exactly"> <p></p></P><P 23pt; mso-line-height-rule: exactly">int seidel(double *a[],double b[],double x[],double eps,int n)<p></p></P><P 23pt; mso-line-height-rule: exactly">{<p></p></P><P 23pt; mso-line-height-rule: exactly">int i,j,k=1;<p></p></P><P 23pt; mso-line-height-rule: exactly">double s,t,dx,maxdx;<p></p></P><P 23pt; mso-line-height-rule: exactly">for(;;)<p></p></P><P 23pt; mso-line-height-rule: exactly">  {<p></p></P><P 23pt; mso-line-height-rule: exactly">  maxdx=0.0;<p></p></P><P 23pt; mso-line-height-rule: exactly">  for(i=0;i&lt;n;i++)<p></p></P><P 23pt; mso-line-height-rule: exactly">    {<p></p></P><P 23pt; mso-line-height-rule: exactly">    t=x;  s=b;<p></p></P><P 23pt; mso-line-height-rule: exactly">    for(j=0;j&lt;n;j++)  s+=(a[j]*x[j]);<p></p></P><P 23pt; mso-line-height-rule: exactly">    x=s;<p></p></P><P 23pt; mso-line-height-rule: exactly">    dx=fabs(s-t);<p></p></P><P 23pt; mso-line-height-rule: exactly">    if(dx&gt;maxdx)maxdx=dx;<p></p></P><P 23pt; mso-line-height-rule: exactly">    }<p></p></P><P 23pt; mso-line-height-rule: exactly">  k++;<p></p></P><P 23pt; mso-line-height-rule: exactly">  printf("\nk=%d  ",k);<p></p></P><P 23pt; mso-line-height-rule: exactly">  if(k&gt;200)return(0);<p></p></P><P 23pt; mso-line-height-rule: exactly">  if(maxdx&lt;eps)break;<p></p></P><P 23pt; mso-line-height-rule: exactly">  }<p></p></P><P 23pt; mso-line-height-rule: exactly">return(1);<p></p></P><P 23pt; mso-line-height-rule: exactly">}<p></p></P><P 23pt; mso-line-height-rule: exactly">main()<p></p></P><P 23pt; mso-line-height-rule: exactly">{<p></p></P><P 23pt; mso-line-height-rule: exactly">int i,n=3;<p></p></P><P 23pt; mso-line-height-rule: exactly">double a[3][3]={0,0.2,0.1,0.2,0,0.1,0.2,0.4,0};<p></p></P><P 23pt; mso-line-height-rule: exactly">double x[3]={1,1,1},b[3]={0.3,1.5,2.0},eps=1.0e-15;<p></p></P><P 23pt; mso-line-height-rule: exactly">double *pa[3];<p></p></P><P 23pt; mso-line-height-rule: exactly">for(i=0;i&lt;n;i++)pa=a;<p></p></P><P 23pt; mso-line-height-rule: exactly">if(seidel(pa,b,x,eps,n))<p></p></P><P 23pt; mso-line-height-rule: exactly">  {<p></p></P><P 23pt; mso-line-height-rule: exactly">  for(i=0;i&lt;n;i++)<p></p></P><P 23pt; mso-line-height-rule: exactly">    printf("\nx[%d] = %g",i,x);<p></p></P><P 23pt; mso-line-height-rule: exactly">  }<p></p></P><P 23pt; mso-line-height-rule: exactly">else printf("\nFiled !");<p></p></P><P 23pt; mso-line-height-rule: exactly">}<p></p></P><P 23pt; mso-line-height-rule: exactly"> <p></p></P>
 楼主| 发表于 2004-5-15 07:43:09 | 显示全部楼层
< center" align=center><B>梯形法计算定积分 Tixing.c<p></p></B></P>< 22pt; mso-line-height-rule: exactly">#include&lt;math.h&gt;<p></p></P>< 22pt; mso-line-height-rule: exactly">#include&lt;stdio.h&gt;<p></p></P><P 22pt; mso-line-height-rule: exactly">double f(double x)<p></p></P><P 22pt; mso-line-height-rule: exactly">  { return(4.0/(1+x*x)); }<p></p></P><P 22pt; mso-line-height-rule: exactly">double tixingjf(double a,double b,double eps)<p></p></P><P 22pt; mso-line-height-rule: exactly">  {<p></p></P><P 22pt; mso-line-height-rule: exactly">  int k=0; double x,h1,h,s1,s2,t1,t2,d;<p></p></P><P 22pt; mso-line-height-rule: exactly">  h=0.5*(b-a); s1=(f(a)+f(b))*0.5;<p></p></P><P 15pt; LINE-HEIGHT: 22pt; mso-line-height-rule: exactly; mso-char-indent-count: 1.0; mso-char-indent-size: 15.0pt">s2=f(a+h); t1=h*(s1+s2);<p></p></P><P 22pt; mso-line-height-rule: exactly">  while(k&lt;=22)<p></p></P><P 22pt; mso-line-height-rule: exactly">    {<p></p></P><P 22pt; mso-line-height-rule: exactly">    h1=h;h*=0.5;x=a+h;<p></p></P><P 22pt; mso-line-height-rule: exactly">    while(x&lt;b)<p></p></P><P 22pt; mso-line-height-rule: exactly">      { s2+=f(x);x+=h1; }<p></p></P><P 30pt; LINE-HEIGHT: 22pt; mso-line-height-rule: exactly">t2=h*(s1+s2); if(fabs(t2-t1)&lt;eps)break; k++;<p></p></P><P 30pt; LINE-HEIGHT: 22pt; mso-line-height-rule: exactly">t1=t2;<p></p></P><P 22pt; mso-line-height-rule: exactly">    }<p></p></P><P 22pt; mso-line-height-rule: exactly">  printf("\nk=%d",k);  return(t2);<p></p></P><P 22pt; mso-line-height-rule: exactly">  }<p></p></P><P 22pt; mso-line-height-rule: exactly">main()<p></p></P><P 22pt; mso-line-height-rule: exactly">  {<p></p></P><P 22pt; mso-line-height-rule: exactly">  double answer,eps=1.0e-012;<p></p></P><P 22pt; mso-line-height-rule: exactly">  answer=tixingjf(0.0,1.0,eps);<p></p></P><P 22pt; mso-line-height-rule: exactly">  printf("\nThe Answer is %15.14lf ",answer);<p></p></P><P 22pt; mso-line-height-rule: exactly">  }<p></p></P><P 22pt; mso-line-height-rule: exactly">/* 循环18次  计算结果为 3.14159265358952 */<p></p></P>
 楼主| 发表于 2004-5-15 07:44:14 | 显示全部楼层
< 11.8pt; LINE-HEIGHT: 19pt; TEXT-ALIGN: center; mso-char-indent-count: 1.0; mso-char-indent-size: 11.8pt" align=center><B>辛普生法计算定积分Simpson.c<p></p></B></P>< 19pt">#include&lt;math.h&gt;<p></p></P>< 19pt">#include&lt;stdio.h&gt;<p></p></P><P 19pt">double f(double x)<p></p></P><P 19pt">  { return(4.0/(1+x*x)); }<p></p></P><P 19pt">double simpson(double a,double b,double eps)<p></p></P><P 19pt">  {<p></p></P><P 19pt">  int k=0; double x,h1,h2,m1,m2,s2,s1,d,rs;<p></p></P><P 19pt">  h1=0.5*(b-a); rs=1.0/3.0;<p></p></P><P 19pt">  m1=f(a)+f(b); m2=f(a+h1); s1=h1*rs*(m1+4.0*m2);<p></p></P><P 19pt">  while(k&lt;=20)<p></p></P><P 30pt; LINE-HEIGHT: 19pt">{  <p></p></P><P 30pt; LINE-HEIGHT: 19pt">h2=h1; h1*=0.5; m1+=(m2*2.0); m2=0.0; x=a+h1;<p></p></P><P 19pt">    while(x&lt;b)<p></p></P><P 19pt">      { m2+=f(x); x+=h2; }<p></p></P><P 19pt">    s2=h1*rs*(m1+4.0*m2); if(fabs(s2-s1)&lt;eps)break;<p></p></P><P 30pt; LINE-HEIGHT: 19pt">s1=s2; k++;<p></p></P><P 30pt; LINE-HEIGHT: 19pt">}<p></p></P><P 19pt">  printf("\nk=%d",k);  return(s2);<p></p></P><P 19pt">  }<p></p></P><P 19pt">main()<p></p></P><P 19pt">{<p></p></P><P 19pt">double answer,eps=1.0e-012;<p></p></P><P 19pt">answer=simpson(0.0,1.0,eps);<p></p></P><P 19pt">printf("\nThe Answer is %15.14lf ",answer);<p></p></P><P 19pt">}<p></p></P><P 19pt">/* 循环5次  计算结果:3.14159265358978 */<p></p></P>
 楼主| 发表于 2004-5-15 07:44:37 | 显示全部楼层
< center" align=center>修正牛顿法解非线性方程组newton2.c<p></p></P>< 21pt; mso-line-height-rule: exactly">#include&lt;math.h&gt;<p></p></P>< 21pt; mso-line-height-rule: exactly">#include&lt;stdio.h&gt;<p></p></P><P 21pt; mso-line-height-rule: exactly">#define N   3<p></p></P><P 21pt; mso-line-height-rule: exactly"> <p></p></P><P 21pt; mso-line-height-rule: exactly">double pi,a[N][N],b[N][N],fx[N];<p></p></P><P 21pt; mso-line-height-rule: exactly"> <p></p></P><P 21pt; mso-line-height-rule: exactly">void F(double x[])<p></p></P><P 21pt; mso-line-height-rule: exactly">{<p></p></P><P 21pt; mso-line-height-rule: exactly">double ex,sx;<p></p></P><P 21pt; mso-line-height-rule: exactly">fx[0]=3.0*x[0]-cos(x[1]*x[2])-0.5;<p></p></P><P 21pt; mso-line-height-rule: exactly">fx[1]=x[0]*x[0]-81.0*(x[1]+0.1)*(x[1]+0.1)+sin(x[2])+1.06;<p></p></P><P 21pt; mso-line-height-rule: exactly">ex=exp(-x[0]*x[1]);<p></p></P><P 21pt; mso-line-height-rule: exactly">fx[2]=ex+20.0*x[2]+pi*10.0/3.0-1.0;<p></p></P><P 21pt; mso-line-height-rule: exactly">}<p></p></P><P 21pt; mso-line-height-rule: exactly"> <p></p></P><P 21pt; mso-line-height-rule: exactly">void DF(double x[])<p></p></P><P 21pt; mso-line-height-rule: exactly">{<p></p></P><P 21pt; mso-line-height-rule: exactly">double ex,sx;<p></p></P><P 21pt; mso-line-height-rule: exactly">ex=exp(-x[0]*x[1]);<p></p></P><P 21pt; mso-line-height-rule: exactly">a[0][0]=3.0;sx=sin(x[1]*x[2]);<p></p></P><P 21pt; mso-line-height-rule: exactly">a[0][1]=x[2]*sx;a[0][2]=x[1]*sx;<p></p></P><P 21pt; mso-line-height-rule: exactly">a[1][0]=2.0*x[0];a[1][1]=-162.0*(x[1]+0.1);a[1][2]=cos(x[2]);<p></p></P><P 21pt; mso-line-height-rule: exactly">a[2][0]=-x[1]*ex;a[2][1]=-x[0]*ex;a[2][2]=20.0;<p></p></P><P 21pt; mso-line-height-rule: exactly">}<p></p></P><P 21pt; mso-line-height-rule: exactly"> <p></p></P><P 21pt; mso-line-height-rule: exactly">int inverta(int n)<p></p></P><P 21pt; mso-line-height-rule: exactly">  {<p></p></P><P 21pt; mso-line-height-rule: exactly">  int i,j,k,i0;  double c,t,maxa,eps=1.0e-15;<p></p></P><P 21pt; mso-line-height-rule: exactly">  for(i=0;i&lt;n;i++)<p></p></P><P 21pt; mso-line-height-rule: exactly">    for(j=0;j&lt;n;j++)<p></p></P><P 21pt; mso-line-height-rule: exactly">      if(j==i)b[j]=1.0;    else b[j]=0.0;<p></p></P><P 21pt; mso-line-height-rule: exactly">  for(k=0;k&lt;n;k++)<p></p></P><P 21pt; mso-line-height-rule: exactly">    {<p></p></P><P 21pt; mso-line-height-rule: exactly">    maxa=0.0;<p></p></P><P 21pt; mso-line-height-rule: exactly">    for(i=k;i&lt;n;i++)<p></p></P><P 21pt; mso-line-height-rule: exactly">      {<p></p></P><P 21pt; mso-line-height-rule: exactly">      t=fabs(a[k]);<p></p></P><P 21pt; mso-line-height-rule: exactly">      if(t&gt;maxa)   {   maxa=t;i0=i;   }<p></p></P><P 21pt; mso-line-height-rule: exactly">      }<p></p></P><P 21pt; mso-line-height-rule: exactly">    if(maxa&lt;=eps)return(0);<p></p></P><P 21pt; mso-line-height-rule: exactly">    if(i0!=k)<p></p></P><P 21pt; mso-line-height-rule: exactly">      {<p></p></P><P 21pt; mso-line-height-rule: exactly">      for(j=0;j&lt;n;j++)<p></p></P><P 21pt; mso-line-height-rule: exactly">       {<p></p></P><P 21pt; mso-line-height-rule: exactly">       t=a[k][j];  c=b[k][j];<p></p></P><P 21pt; mso-line-height-rule: exactly">       a[k][j]=a[i0][j];  b[k][j]=b[i0][j];<p></p></P><P 21pt; mso-line-height-rule: exactly">       a[i0][j]=t;  b[i0][j]=c;<p></p></P><P 21pt; mso-line-height-rule: exactly">       }<p></p></P><P 21pt; mso-line-height-rule: exactly">      }<p></p></P><P 21pt; mso-line-height-rule: exactly">    c=1.0/a[k][k];<p></p></P><P 21pt; mso-line-height-rule: exactly">    for(j=k;j&lt;n;j++)a[k][j]*=c;<p></p></P><P 21pt; mso-line-height-rule: exactly">    for(j=0;j&lt;n;j++)b[k][j]*=c;<p></p></P><P 21pt; mso-line-height-rule: exactly">    for(i=k+1;i&lt;n;i++)<p></p></P><P 21pt; mso-line-height-rule: exactly">      {<p></p></P><P 21pt; mso-line-height-rule: exactly">      for(j=k+1;j&lt;n;j++)          a[j]-=(a[k]*a[k][j]);<p></p></P><P 21pt; mso-line-height-rule: exactly">      for(j=0;j&lt;n;j++)  b[j]-=(a[k]*b[k][j]);<p></p></P><P 21pt; mso-line-height-rule: exactly">      }<p></p></P><P 21pt; mso-line-height-rule: exactly">    }<p></p></P><P 21pt; mso-line-height-rule: exactly">  for(k=n-2;k&gt;=0;k--)<p></p></P><P 21pt; mso-line-height-rule: exactly">    for(i=k;i&gt;=0;i--)<p></p></P><P 21pt; mso-line-height-rule: exactly">      for(j=0;j&lt;n;j++)b[j]-=(b[k+1][j]*a[k+1]);<p></p></P><P 21pt; mso-line-height-rule: exactly">  return(1);<p></p></P><P 21pt; mso-line-height-rule: exactly">  }<p></p></P><P 21pt; mso-line-height-rule: exactly"> <p></p></P><P 21pt; mso-line-height-rule: exactly"> <p></p></P><P 21pt; mso-line-height-rule: exactly">int  newtonfa(double x0[],double eps)<p></p></P><P 21pt; mso-line-height-rule: exactly">{<p></p></P><P 21pt; mso-line-height-rule: exactly">int i,j,k=1;<p></p></P><P 21pt; mso-line-height-rule: exactly">double mx;<p></p></P><P 21pt; mso-line-height-rule: exactly">double x1[N],dx[N],y[N];<p></p></P><P 21pt; mso-line-height-rule: exactly">for(;;)<p></p></P><P 21pt; mso-line-height-rule: exactly">  {<p></p></P><P 21pt; mso-line-height-rule: exactly">  F(x0);<p></p></P><P 21pt; mso-line-height-rule: exactly">  DF(x0);<p></p></P><P 21pt; mso-line-height-rule: exactly">  if(!inverta(N))return(0);<p></p></P><P 21pt; mso-line-height-rule: exactly">  for(i=0;i&lt;N;i++)<p></p></P><P 21pt; mso-line-height-rule: exactly">    {<p></p></P><P 21pt; mso-line-height-rule: exactly">    dx=0.0;<p></p></P><P 21pt; mso-line-height-rule: exactly">    for(j=0;j&lt;N;j++)<p></p></P><P 21pt; mso-line-height-rule: exactly">    dx+=b[j]*fx[j];<p></p></P><P 21pt; mso-line-height-rule: exactly">    }<p></p></P><P 21pt; mso-line-height-rule: exactly">  mx=0.0;<p></p></P><P 21pt; mso-line-height-rule: exactly">  for(i=0;i&lt;N;i++)if(fabs(dx)&gt;mx)mx=fabs(dx);<p></p></P><P 21pt; mso-line-height-rule: exactly">  for(i=0;i&lt;N;i++)y=x0-dx;<p></p></P><P 21pt; mso-line-height-rule: exactly">  F(y);<p></p></P><P 21pt; mso-line-height-rule: exactly">  for(i=0;i&lt;N;i++)<p></p></P><P 21pt; mso-line-height-rule: exactly">    {<p></p></P><P 21pt; mso-line-height-rule: exactly">    dx=0.0;<p></p></P><P 21pt; mso-line-height-rule: exactly">    for(j=0;j&lt;N;j++)<p></p></P><P 21pt; mso-line-height-rule: exactly">    dx+=b[j]*fx[j];<p></p></P><P 21pt; mso-line-height-rule: exactly">    }<p></p></P><P 21pt; mso-line-height-rule: exactly">  for(i=0;i&lt;N;i++)x1=y-dx;<p></p></P><P 21pt; mso-line-height-rule: exactly">  for(i=0;i&lt;N;i++)x0=x1;<p></p></P><P 21pt; mso-line-height-rule: exactly">  if(mx&lt;eps)break;<p></p></P><P 21pt; mso-line-height-rule: exactly">    printf("\nk=%d",k);<p></p></P><P 21pt; mso-line-height-rule: exactly">    printf("\nx1=%14.12lf  x2=%14.12lf  x3=%14.12lf",x1[0],x1[1],x1[2]);<p></p></P><P 21pt; mso-line-height-rule: exactly">  k++;if(k&gt;400)return(0);<p></p></P><P 21pt; mso-line-height-rule: exactly">  }<p></p></P><P 21pt; mso-line-height-rule: exactly">return(1);<p></p></P><P 21pt; mso-line-height-rule: exactly">}<p></p></P><P 21pt; mso-line-height-rule: exactly"> <p></p></P><P 21pt; mso-line-height-rule: exactly">main()<p></p></P><P 21pt; mso-line-height-rule: exactly">{<p></p></P><P 21pt; mso-line-height-rule: exactly">int i;<p></p></P><P 21pt; mso-line-height-rule: exactly">double x0[N]={3.0,2.0,1.0},eps=1.0e-12;<p></p></P><P 21pt; mso-line-height-rule: exactly">pi=4.0*atan(1.0);<p></p></P><P 21pt; mso-line-height-rule: exactly">if(newtonfa(x0,eps))<p></p></P><P 21pt; mso-line-height-rule: exactly">  {<p></p></P><P 21pt; mso-line-height-rule: exactly">  for(i=0;i&lt;N;i++)<p></p></P><P 21pt; mso-line-height-rule: exactly">    printf("\nx[%d] = %14.12lf  ",i,x0);<p></p></P><P 21pt; mso-line-height-rule: exactly">  }<p></p></P><P 21pt; mso-line-height-rule: exactly">else printf("\nFiled !");<p></p></P><P 21pt; mso-line-height-rule: exactly">}<p></p></P><P 23pt; mso-line-height-rule: exactly">循环5次,计算结果:<v:shapetype> <v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path gradientshapeok="t" connecttype="rect" extrusionok="f"></v:path><lock v:ext="edit" aspectratio="t"></lock></v:shapetype><v:shape><v:imagedata></v:imagedata></v:shape>,<v:shape> <v:imagedata></v:imagedata></v:shape>,<v:shape> <v:imagedata></v:imagedata></v:shape><p></p></P>
 楼主| 发表于 2004-5-15 07:45:31 | 显示全部楼层
< center" align=center><B>一般迭代法解线性方程组</B><B>  didai.c<p></p></B></P>< 23pt; mso-line-height-rule: exactly">#include&lt;math.h&gt;<p></p></P>< 23pt; mso-line-height-rule: exactly">#include&lt;stdio.h&gt;<p></p></P><P 23pt; mso-line-height-rule: exactly"> <p></p></P><P 23pt; mso-line-height-rule: exactly">int didai(double *a[],double b[],double x[],double eps,int n)<p></p></P><P 23pt; mso-line-height-rule: exactly">{<p></p></P><P 23pt; mso-line-height-rule: exactly">int i,j,k=1;<p></p></P><P 23pt; mso-line-height-rule: exactly">double s,dx,maxdx,x1[80];<p></p></P><P 23pt; mso-line-height-rule: exactly">for(;;)<p></p></P><P 23pt; mso-line-height-rule: exactly">  {<p></p></P><P 23pt; mso-line-height-rule: exactly">  maxdx=0.0;<p></p></P><P 23pt; mso-line-height-rule: exactly">  for(i=0;i&lt;n;i++)<p></p></P><P 23pt; mso-line-height-rule: exactly">    {<p></p></P><P 23pt; mso-line-height-rule: exactly">    s=b;<p></p></P><P 23pt; mso-line-height-rule: exactly">    for(j=0;j&lt;n;j++)  s+=(a[j]*x[j]);<p></p></P><P 23pt; mso-line-height-rule: exactly">    x1=s;  dx=fabs(s-x);<p></p></P><P 23pt; mso-line-height-rule: exactly">    if(dx&gt;maxdx)maxdx=dx;<p></p></P><P 23pt; mso-line-height-rule: exactly">    }<p></p></P><P 23pt; mso-line-height-rule: exactly">  k++;<p></p></P><P 23pt; mso-line-height-rule: exactly">  printf("\nk=%d  ",k);<p></p></P><P 23pt; mso-line-height-rule: exactly">  if(k&gt;200)return(0);<p></p></P><P 23pt; mso-line-height-rule: exactly">  if(maxdx&lt;eps)break;<p></p></P><P 23pt; mso-line-height-rule: exactly">  for(j=0;j&lt;n;j++)x[j]=x1[j];<p></p></P><P 23pt; mso-line-height-rule: exactly">  }<p></p></P><P 23pt; mso-line-height-rule: exactly">return(1);<p></p></P><P 23pt; mso-line-height-rule: exactly">}<p></p></P><P 23pt; mso-line-height-rule: exactly">main()<p></p></P><P 23pt; mso-line-height-rule: exactly">{<p></p></P><P 23pt; mso-line-height-rule: exactly">int i,n=3;<p></p></P><P 23pt; mso-line-height-rule: exactly">double a[3][3]={0,0.2,0.1,0.2,0,0.1,0.2,0.4,0};<p></p></P><P 23pt; mso-line-height-rule: exactly">double x[3]={1,1,1},b[3]={0.3,1.5,2.0},eps=1.0e-15;<p></p></P><P 23pt; mso-line-height-rule: exactly">double *pa[3];<p></p></P><P 23pt; mso-line-height-rule: exactly">for(i=0;i&lt;n;i++)pa=a;<p></p></P><P 23pt; mso-line-height-rule: exactly">if(didai(pa,b,x,eps,n))<p></p></P><P 23pt; mso-line-height-rule: exactly">  {<p></p></P><P 23pt; mso-line-height-rule: exactly">  for(i=0;i&lt;n;i++)<p></p></P><P 23pt; mso-line-height-rule: exactly">    printf("\nx[%d] = %g",i,x);<p></p></P><P 23pt; mso-line-height-rule: exactly">  }<p></p></P><P 23pt; mso-line-height-rule: exactly">else printf("\nFiled !");<p></p></P><P 23pt; mso-line-height-rule: exactly">}</P>
 楼主| 发表于 2004-5-15 07:46:00 | 显示全部楼层
<>/*已知概率密度,计算概率*/</P><> <p></p></P><>#include&lt;math.h&gt;</P><P>#include&lt;stdio.h&gt;</P><P>double fx(double x)</P><P>  {</P><P>  return(exp(-x*x*0.5));  /*<v:shapetype> <v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path gradientshapeok="t" connecttype="rect" extrusionok="f"></v:path><lock v:ext="edit" aspectratio="t"></lock></v:shapetype><v:shape><v:imagedata></v:imagedata></v:shape>*/</P><P>  }</P><P>double simpson(double a,double b,double eps,double (*f)(double))</P><P>  {</P><P>  int m=1; double x,h,h1,sam1,sam2,s2,s1,d,rs;</P><P>  h=0.5*(b-a); rs=1.0/3.0;</P><P>  sam1=f(a)+f(b); sam2=f(a+h); s1=h*rs*(sam1+4.0*sam2);</P><P>  while(m&lt;=19)</P><P>    {</P><P>    h1=h; h*=0.5; sam1+=(sam2*2.0);</P><P>    sam2=0.0; x=a+h;</P><P>    while(x&lt;b)</P><P>      {</P><P>      sam2+=f(x); x+=h1;</P><P>      }</P><P>    s2=h*rs*(sam1+4.0*sam2);</P><P>    if(fabs(s2-s1)&lt;eps)break;</P><P>    s1=s2; m++;</P><P>    }</P><P>  return(s2);</P><P>  }</P><P>main()</P><P>{</P><P>double x=1.0,gailv,eps=1.0e-011,pi,c;</P><P>pi=4.0*atan(1.0);c=1.0/sqrt(pi*2.0);</P><P>printf("\nInput x=");scanf("%lf",&amp;x);</P><P>gailv=c*simpson(-8.0,x,eps,fx);  /*<v:shape> <v:imagedata></v:imagedata></v:shape>*/</P><P>printf("\nF(x)=%15.14lf ",gailv);</P><P>}</P>
 楼主| 发表于 2004-5-15 07:47:44 | 显示全部楼层
<>上个式子的公式没有弄上去  </P><> 我不知道如何在论坛里写公式 </P><>请知道的哥们告诉我一 191838238</P><P>给我论坛短信也行</P>
 楼主| 发表于 2004-5-15 07:49:12 | 显示全部楼层
f(x)=e (-(x*x)/2) 是计算公式
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-27 22:33 , Processed in 0.052680 second(s), 12 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表