数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 10096|回复: 20

C语言解题经典程序

[复制链接]
发表于 2004-5-14 08:12:11 | 显示全部楼层 |阅读模式

<  align=center>C语言常用数学类库函数<p></p></P>
< >1.  <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 connecttype="rect" gradientshapeok="t" extrusionok="f"></v:path><lock aspectratio="t" v:ext="edit"></lock></v:shapetype><v:shape><v:imagedata></v:imagedata></v:shape>  求整型数<I >x</I>的绝对值<p></p></P>
< >2.  double  fabs(double  <I >x</I>); 求浮点数<I >x</I>的绝对值<p></p></P>
<P >3.  double  sqrt(double  <I >x</I>); 求<I >x</I>的平方根<p></p></P>
<P >4.  double  exp(double  <I >x</I>); 求<v:shape> <v:imagedata></v:imagedata></v:shape>的值<p></p></P>
<P >5.  double  log(double  <I >x</I>); 求<I >ln</I> <I >x</I>的值<p></p></P>
<P >6.  double  log10(double  <I >x</I>); 求<I >log</I> 10 <I >x</I>的值<p></p></P>
<P >7.  double  pow(double  <I >x</I>, double  <I >y</I>); 求<I >x</I>的y次方的值<p></p></P>
<P >8.  三角函数<p></p></P>
<P >    double  sin(double  <I >x</I>); 求<I >sin</I> <I >x</I>的值<p></p></P>
<P >    double  cos(double  <I >x</I>); 求<I >cos</I> <I >x</I>的值<p></p></P>
<P >    double  tan(double  <I >x</I>); 求<I >tg</I> <I >x</I>的值<p></p></P>
<P >9.  反三角函数<p></p></P>
<P >    double  asin(double  <I >x</I>); 求<I >arcsin</I> <I >x</I>的值<p></p></P>
<P >    double  acos(double  <I >x</I>); 求<I >arccos</I> <I >x</I>的值<p></p></P>
<P >    double  atan(double  <I >x</I>); 求<I >arctg</I> <I >x</I>的值<p></p></P>
<P >10.  int  rand(void); 产生一个伪随机数<p></p></P>
<P >11.  void  srand(unsigned  sd); 用参数sd初始化随机数发生器<p></p></P>
 楼主| 发表于 2004-5-14 08:12:44 | 显示全部楼层
< center" align=center>阿达姆斯预报-校正法解微分方程  ADAMS.C<p></p></P>< 18pt; mso-line-height-rule: exactly">#include&lt;math.h&gt;<p></p></P>< 18pt; mso-line-height-rule: exactly">#include&lt;stdio.h&gt;<p></p></P><P 18pt; mso-line-height-rule: exactly"> <p></p></P><P 18pt; mso-line-height-rule: exactly">double f(double x,double y)<p></p></P><P 18pt; mso-line-height-rule: exactly">{  return(x*exp(-y));  }<p></p></P><P 18pt; mso-line-height-rule: exactly"> <p></p></P><P 18pt; mso-line-height-rule: exactly">double rungkuta(double x0,double y0,double h)<p></p></P><P 18pt; mso-line-height-rule: exactly">  {<p></p></P><P 18pt; mso-line-height-rule: exactly">  double h12,h16,x,y,K1,K2,K3,K4;<p></p></P><P 18pt; mso-line-height-rule: exactly">  h12=0.5*h;  h16=h/6.0;<p></p></P><P 18pt; mso-line-height-rule: exactly">  x=x0;  y=y0;  K1=f(x,y);<p></p></P><P 18pt; mso-line-height-rule: exactly">  x+=h12;  y=y0+h12*K1;  K2=f(x,y);<p></p></P><P 18pt; mso-line-height-rule: exactly">  y=y0+h12*K2;  K3=f(x,y);<p></p></P><P 18pt; mso-line-height-rule: exactly">  x+=h12;  y=y0+h*K3;  K4=f(x,y);<p></p></P><P 18pt; mso-line-height-rule: exactly">  y=y0+(K1+2.0*K2+2.0*K3+K4)*h16;<p></p></P><P 18pt; mso-line-height-rule: exactly">  return(y);<p></p></P><P 18pt; mso-line-height-rule: exactly">  }<p></p></P><P 18pt; mso-line-height-rule: exactly"> <p></p></P><P 18pt; mso-line-height-rule: exactly">double  get_step(double x0,double y0,double xn,double eps)<p></p></P><P 18pt; mso-line-height-rule: exactly">  {<p></p></P><P 18pt; mso-line-height-rule: exactly">  int k=0; double h,y,y1,y2;<p></p></P><P 18pt; mso-line-height-rule: exactly">  h=(xn-x0)/100.0;  y=rungkuta(x0,y0,h);<p></p></P><P 18pt; mso-line-height-rule: exactly">  while(k&lt;32)<p></p></P><P 18pt; mso-line-height-rule: exactly">    {<p></p></P><P 18pt; mso-line-height-rule: exactly">    h*=0.5;<p></p></P><P 18pt; mso-line-height-rule: exactly">    y1=rungkuta(x0,y0,h);  y2=rungkuta(x0+h,y1,h);<p></p></P><P 18pt; mso-line-height-rule: exactly">    if(fabs(y2-y)&lt;eps)break;<p></p></P><P 18pt; mso-line-height-rule: exactly">    y=y1;k++;<p></p></P><P 18pt; mso-line-height-rule: exactly">    }<p></p></P><P 18pt; mso-line-height-rule: exactly">  return(h);<p></p></P><P 18pt; mso-line-height-rule: exactly">  }<p></p></P><P 18pt; mso-line-height-rule: exactly"> <p></p></P><P 18pt; mso-line-height-rule: exactly">double adams(double x0,double y0,double xn,double eps)<p></p></P><P 18pt; mso-line-height-rule: exactly">  {<p></p></P><P 18pt; mso-line-height-rule: exactly">  int i;  unsigned int M;<p></p></P><P 18pt; mso-line-height-rule: exactly">  double h,h24,x,y;<p></p></P><P 18pt; mso-line-height-rule: exactly">  double yk0,yk1,yk2,yk3,yk4,yk40;<p></p></P><P 18pt; mso-line-height-rule: exactly">  double fk0,fk1,fk2,fk3,fk4;<p></p></P><P 18pt; mso-line-height-rule: exactly">  h=get_step(x0,y0,xn,eps);<p></p></P><P 18pt; mso-line-height-rule: exactly">  x=x0;  yk1=rungkuta(x,y0,h);x+=h;<p></p></P><P 18pt; mso-line-height-rule: exactly">  yk2=rungkuta(x,yk1,h);x+=h;<p></p></P><P 18pt; mso-line-height-rule: exactly">  yk3=rungkuta(x,yk2,h);<p></p></P><P 18pt; mso-line-height-rule: exactly">  h24=h/24.0;x=x0;yk0=y0;  fk0=f(x,yk0);  x+=h;fk1=f(x,yk1);<p></p></P><P 18pt; mso-line-height-rule: exactly">  x+=h;fk2=f(x,yk2);  x+=h;fk3=f(x,yk3);<p></p></P><P 18pt; mso-line-height-rule: exactly">  for(;;)<p></p></P><P 18pt; mso-line-height-rule: exactly">    {<p></p></P><P 18pt; mso-line-height-rule: exactly">    yk4=yk3+h24*(55.0*fk3-59.0*fk2+37.0*fk1-9.0*fk0);<p></p></P><P 18pt; mso-line-height-rule: exactly">    x+=h;fk4=f(x,yk4);<p></p></P><P 18pt; mso-line-height-rule: exactly">    yk4=yk3+h24*(9.0*fk4+19.0*fk3-5.0*fk2+fk1);<p></p></P><P 18pt; mso-line-height-rule: exactly">    if(fabs(x-xn)&lt;=h*0.2)break;<p></p></P><P 18pt; mso-line-height-rule: exactly">    fk0=fk1;fk1=fk2;fk2=fk3;<p></p></P><P 18pt; mso-line-height-rule: exactly">    fk3=f(x,yk4);    yk3=yk4;<p></p></P><P 18pt; mso-line-height-rule: exactly">    }<p></p></P><P 18pt; mso-line-height-rule: exactly">  return(yk4);<p></p></P><P 18pt; mso-line-height-rule: exactly">  }<p></p></P><P 18pt; mso-line-height-rule: exactly"> <p></p></P><P 18pt; mso-line-height-rule: exactly">main()<p></p></P><P 18pt; mso-line-height-rule: exactly">  {<p></p></P><P 18pt; mso-line-height-rule: exactly">  double answer,eps=1.0e-16;<p></p></P><P 18pt; mso-line-height-rule: exactly">  answer=adams(0.0,0.0,5.0,eps);<p></p></P><P 18pt; mso-line-height-rule: exactly">  printf("\nThe Answer is %16.15lf",answer);<p></p></P><P 18pt; mso-line-height-rule: exactly">  }</P>
 楼主| 发表于 2004-5-14 08:13:16 | 显示全部楼层
< center" align=center><B>变步长搜索法求函数的极大值</B><B>fv.c<p></p></B></P>< 22pt; mso-line-height-rule: exactly"><B>#include&lt;math.h&gt;<p></p></B></P>< 22pt; mso-line-height-rule: exactly"><B>#include&lt;stdio.h&gt;<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>#include&lt;conio.h&gt;<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>double f(double x)<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>{<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>return(x*(2.0-log(x)));<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>}<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>double fv(double a,double b,double eps)<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>{<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>double h,x0,x1,f0,f1;<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>int n=0;<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>h=(b-a)*0.25;<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>x0=a;<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>f0=f(x0);<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>for(;;)<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>  {<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>  x1=x0+h;if(x1&gt;b)x1=b;if(x1&lt;a)x1=a;<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>  f1=f(x1);<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>  if(f1&gt;f0)<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>    {<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>    x0=x1;f0=f1;h*=2.0;<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>    }<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>  else if(f1==f0)<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>    {<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>    x0=(x0+x1)*0.5;<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>    f0=f(x0);<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>    h*=(-0.25);<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>    }<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>  else<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>    {<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>    h*=(-0.25);<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>    }<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>  if(fabs(h)&lt;eps)break;<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>  n++;<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>  }<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>printf("\n n=%d",n);<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>return(x0);<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>}<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B> <p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>main()<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>{<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>double mx,my;<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>mx=fv(1.0,4.0,1.0e-10);<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>my=f(mx);<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>printf("\n Maxx=%14.12lf  Maxy=%14.12lf",mx,my);<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>getch();<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>}<p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B> <p></p></B></P><P 22pt; mso-line-height-rule: exactly"><B>计算结果:n=47<p></p></B></P><P 68.9pt; LINE-HEIGHT: 22pt; mso-line-height-rule: exactly; mso-char-indent-count: 5.0; mso-char-indent-size: 13.75pt"><B>Maxx=2.718281804060<p></p></B></P><P 68.9pt; LINE-HEIGHT: 22pt; mso-line-height-rule: exactly; mso-char-indent-count: 5.0; mso-char-indent-size: 13.75pt"><B>Maxy=2.718281828459<p></p></B></P>
 楼主| 发表于 2004-5-14 08:20:16 | 显示全部楼层
< center" align=center><B>不动点迭代法解非线性方程组</B>DIEDAIF.C<p></p></P>< 24pt; mso-line-height-rule: exactly">#include&lt;math.h&gt;<p></p></P>< 24pt; mso-line-height-rule: exactly">#include&lt;stdio.h&gt;<p></p></P><P 24pt; mso-line-height-rule: exactly">double g1(double x[])<p></p></P><P 16pt; LINE-HEIGHT: 24pt; mso-char-indent-count: 1.0; mso-char-indent-size: 16.0pt; mso-line-height-rule: exactly">{<p></p></P><P 16pt; LINE-HEIGHT: 24pt; mso-char-indent-count: 1.0; mso-char-indent-size: 16.0pt; mso-line-height-rule: exactly">return(sqrt(0.5*(x[0]*(x[1]+5)-1)));<p></p></P><P 16pt; LINE-HEIGHT: 24pt; mso-char-indent-count: 1.0; mso-char-indent-size: 16.0pt; mso-line-height-rule: exactly">}<p></p></P><P 24pt; mso-line-height-rule: exactly">double g2(double x[])<p></p></P><P 16pt; LINE-HEIGHT: 24pt; mso-char-indent-count: 1.0; mso-char-indent-size: 16.0pt; mso-line-height-rule: exactly">{<p></p></P><P 16pt; LINE-HEIGHT: 24pt; mso-char-indent-count: 1.0; mso-char-indent-size: 16.0pt; mso-line-height-rule: exactly">return(sqrt(x[0]+3*log10(x[0])));<p></p></P><P 16pt; LINE-HEIGHT: 24pt; mso-char-indent-count: 1.0; mso-char-indent-size: 16.0pt; mso-line-height-rule: exactly">}<p></p></P><P 24pt; mso-line-height-rule: exactly"> <p></p></P><P 24pt; mso-line-height-rule: exactly">int diedai(double x0[],double eps,int n)<p></p></P><P 24pt; mso-line-height-rule: exactly">{<p></p></P><P 24pt; mso-line-height-rule: exactly">int i,k=1;<p></p></P><P 24pt; mso-line-height-rule: exactly">double dx,maxdx,x1[80];<p></p></P><P 24pt; mso-line-height-rule: exactly"> <p></p></P><P 24pt; mso-line-height-rule: exactly">for(;;)<p></p></P><P 24pt; mso-line-height-rule: exactly">  {<p></p></P><P 24pt; mso-line-height-rule: exactly">  x1[0]=g1(x0);x1[1]=g2(x0);<p></p></P><P 24pt; mso-line-height-rule: exactly">  maxdx=0.0;<p></p></P><P 24pt; mso-line-height-rule: exactly">  printf("\nk=%d    ",k);<p></p></P><P 24pt; mso-line-height-rule: exactly">  for(i=0;i&lt;n;i++)<p></p></P><P 24pt; mso-line-height-rule: exactly">    printf("x[%d]=%12.10lf    ",i,x1);<p></p></P><P 24pt; mso-line-height-rule: exactly">  getch();<p></p></P><P 24pt; mso-line-height-rule: exactly">  for(i=0;i&lt;n;i++)<p></p></P><P 24pt; mso-line-height-rule: exactly">    {<p></p></P><P 24pt; mso-line-height-rule: exactly">    dx=fabs(x1-x0);<p></p></P><P 24pt; mso-line-height-rule: exactly">    if(dx&gt;maxdx)maxdx=dx;<p></p></P><P 24pt; mso-line-height-rule: exactly">    }<p></p></P><P 24pt; mso-line-height-rule: exactly">  k++;if(k&gt;200)return(0);<p></p></P><P 24pt; mso-line-height-rule: exactly">  if(maxdx&lt;eps)break;<p></p></P><P 24pt; mso-line-height-rule: exactly">  for(i=0;i&lt;n;i++)x0=x1;<p></p></P><P 24pt; mso-line-height-rule: exactly">  }<p></p></P><P 24pt; mso-line-height-rule: exactly">return(1);<p></p></P><P 24pt; mso-line-height-rule: exactly">}<p></p></P><P 24pt; mso-line-height-rule: exactly"> <p></p></P><P 24pt; mso-line-height-rule: exactly">main()<p></p></P><P 24pt; mso-line-height-rule: exactly">{<p></p></P><P 24pt; mso-line-height-rule: exactly">int i,n=2;<p></p></P><P 24pt; mso-line-height-rule: exactly">double x0[2]={3,2};<p></p></P><P 24pt; mso-line-height-rule: exactly">if(diedai(x0,1.0e-12,n))<p></p></P><P 24pt; mso-line-height-rule: exactly">  {<p></p></P><P 24pt; mso-line-height-rule: exactly">  for(i=0;i&lt;n;i++)<p></p></P><P 24pt; mso-line-height-rule: exactly">    printf("\nx[%d] = %12.10lf",i,x0);<p></p></P><P 24pt; mso-line-height-rule: exactly">  }<p></p></P><P 24pt; mso-line-height-rule: exactly">else printf("\nFiled !");<p></p></P>}
 楼主| 发表于 2004-5-14 08:23:01 | 显示全部楼层
< center" align=center>从图中找出哈密顿回路<p></p></P><>#include&lt;stdio.h&gt;<p></p></P><>#define NE  7<p></p></P><P>void getline(int ne,int *pd2[],int *de,int *me,int pp,int pe,int *no)<p></p></P><P>{<p></p></P><P>int i,j,h;<p></p></P><P>if(pe==ne&amp;&amp;de[ne-1]==0)<p></p></P><P>  {<p></p></P><P>  ++(*no);<p></p></P><P>  printf("\nNO%5d    methed:  ",*no);printf(" 0 ");<p></p></P><P>  for(i=0;i&lt;ne;++i)printf(" %d ",de);<p></p></P><P>  printf("\n");<p></p></P><P>  return;<p></p></P><P>  }<p></p></P><P>for(j=0;j&lt;ne;++j)<p></p></P><P>  {<p></p></P><P>  if(pd2[pp][j]!=0&amp;&amp;me[j]==0)<p></p></P><P>    {<p></p></P><P>    me[j]=1;de[pe]=j;<p></p></P><P>    getline(ne,pd2,de,me,j,pe+1,no);<p></p></P><P>    printf(" no=%d ",*no);    me[j]=0;<p></p></P><P>    }<p></p></P><P>  }<p></p></P><P>}<p></p></P><P> <p></p></P><P>main()<p></p></P><P>{<p></p></P><P>int ne,*pd2[NE],i,j,h,pp,pe,de[NE],me[NE],no;<p></p></P><P>int a[NE][NE]={{0,1,1,0,0,0,0},{1,0,1,1,0,0,0},{1,1,0,0,1,1,0},<p></p></P><P>{0,1,0,0,0,1,0},{0,0,1,0,0,0,1},{0,0,1,1,0,0,1},{0,0,0,0,1,1,0}};<p></p></P><P>ne=NE;<p></p></P><P>for(i=0;i&lt;ne;i++)pd2=&amp;a[0];<p></p></P><P>for(i=0;i&lt;ne;i++)me=0;<p></p></P><P>pp=0;pe=0;no=0;<p></p></P><P>getline(ne,pd2,de,me,pp,pe,&amp;no);<p></p></P><P>printf("\n* * * total methed is %d  * * *",no);<p></p></P><P>}</P>
 楼主| 发表于 2004-5-14 08:23:31 | 显示全部楼层
< 21pt; TEXT-ALIGN: center; mso-line-height-rule: exactly" align=center>/*-----大M法求解线性规划-----*/<p></p></P><>#include&lt;stdio.h&gt;<p></p></P><>#include&lt;math.h&gt;<p></p></P><P>main()<p></p></P><P>  {<p></p></P><P>  int  i,j,k,r,s,m=3,n=2,h=7,num=0,  jbl[3]={2,5,6};<p></p></P><P>  double  a[3][8]={1,1.2,1,0,0,0,0,12,6,1,0,-1,0,1,0,12,1,2,0,0,-1,0,1,16};<p></p></P><P>  double  c[8],  zeta[3]={0,0,0},  M=1.0e10,maxc,zr,d,f=0.0;<p></p></P><P>  c[0]=4+7*M; c[1]=3+3*M; c[2]=0;<p></p></P><P>  c[3]=-M; c[4]=-M;c[5]=0;c[6]=0;c[7]=28.0*M;<p></p></P><P>  while(num&lt;=h)<p></p></P><P>    {<p></p></P><P>    maxc=c[0];s=0;<p></p></P><P>    for(j=1;j&lt;h;j++)<p></p></P><P>      if(c[j]&gt;maxc)<p></p></P><P>           {   maxc=c[j];s=j;       }<p></p></P><P>    if(maxc&lt;=0.0)break;<p></p></P><P>    for(i=0;i&lt;m;i++)<p></p></P><P>      if(a&gt;0.0)zeta=a[h]/a;<p></p></P><P>           else zeta=M;<p></p></P><P>    zr=zeta[0];r=0;<p></p></P><P>    for(i=1;i&lt;m;i++)   if(zeta&lt;zr)<p></p></P><P>           {    zr=zeta;r=i;       }<p></p></P><P>    jbl[r]=s; d=a[r];<p></p></P><P 24pt">for(j=0;j&lt;=h;j++) a[r][j]/=d;<p></p></P><P>    a[r]=1.0;<p></p></P><P>    for(i=0;i&lt;m;i++)  if(i!=r)<p></p></P><P>         {   d=a;<p></p></P><P>         for(j=0;j&lt;=h;j++) a[j]-=a[r][j]*d;<p></p></P><P>         a=0.0;<p></p></P><P>         }<p></p></P><P>    d=c;<p></p></P><P>    for(j=0;j&lt;=h;j++) c[j]-=a[r][j]*d;<p></p></P><P>    c=0.0;    num++;<p></p></P><P>    }<p></p></P><P>  for(i=0;i&lt;m;i++)<p></p></P><P>    printf("\nx%d=%g",jbl+1,a[h]);<p></p></P><P>  printf("\nMax f=%g",fabs(c[h]));<p></p></P><P>  }<p></p></P>
 楼主| 发表于 2004-5-14 08:23:59 | 显示全部楼层
< center" align=center>/*-----单纯形法解线性规划-----*/<p></p></P>< 14pt; mso-line-height-rule: exactly">#include&lt;stdio.h&gt;<p></p></P>< 14pt; mso-line-height-rule: exactly">#include&lt;math.h&gt;<p></p></P><P 14pt; mso-line-height-rule: exactly">main()<p></p></P><P 14pt; mso-line-height-rule: exactly">  {<p></p></P><P 14pt; mso-line-height-rule: exactly">  int i,j,k,r,s,m=3,n=2,h=5,num=0, jbl[3]={0,0,0};<p></p></P><P 14pt; mso-line-height-rule: exactly">  double a[3][6]={2,9,1,0,0,18,2,4,0,1,0,10,3,2,0,0,1,12};<p></p></P><P 14pt; mso-line-height-rule: exactly">  double b[3]={18,10,12}, c[6]={3,4,0,0,0,0};<p></p></P><P 14pt; mso-line-height-rule: exactly">  double zeta[3]={2,3,4}, M=5.0e10,maxc,zr,d;<p></p></P><P 14pt; mso-line-height-rule: exactly">  while(num&lt;=h)<p></p></P><P 14pt; mso-line-height-rule: exactly">    {<p></p></P><P 14pt; mso-line-height-rule: exactly">    maxc=c[0];s=0;<p></p></P><P 14pt; mso-line-height-rule: exactly">    for(j=1;j&lt;h;j++)<p></p></P><P 14pt; mso-line-height-rule: exactly">      if(c[j]&gt;maxc)<p></p></P><P 14pt; mso-line-height-rule: exactly">           {    maxc=c[j];s=j;   }<p></p></P><P 14pt; mso-line-height-rule: exactly">    if(maxc&lt;=0)break;<p></p></P><P 14pt; mso-line-height-rule: exactly">    for(i=0;i&lt;m;i++)<p></p></P><P 14pt; mso-line-height-rule: exactly">      if(a&gt;0.0)zeta=a[h]/a;<p></p></P><P 14pt; mso-line-height-rule: exactly">           else zeta=M;<p></p></P><P 14pt; mso-line-height-rule: exactly">    zr=zeta[0];r=0;<p></p></P><P 14pt; mso-line-height-rule: exactly">    for(i=1;i&lt;m;i++)<p></p></P><P 14pt; mso-line-height-rule: exactly">      if(zeta&lt;zr)<p></p></P><P 14pt; mso-line-height-rule: exactly">           {    zr=zeta;r=i;   }<p></p></P><P 14pt; mso-line-height-rule: exactly">    if(zr==M){  printf(“No solution !”);exit(1);  }<p></p></P><P 14pt; mso-line-height-rule: exactly">    jbl[r]=s;d=a[r];<p></p></P><P 14pt; mso-line-height-rule: exactly">    for(j=0;j&lt;=h;j++) a[r][j]/=d;<p></p></P><P 14pt; mso-line-height-rule: exactly">    a[r]=1.0;<p></p></P><P 14pt; mso-line-height-rule: exactly">    for(i=0;i&lt;m;i++)  if(i!=r)<p></p></P><P 14pt; mso-line-height-rule: exactly">           {<p></p></P><P 14pt; mso-line-height-rule: exactly">           d=a;<p></p></P><P 14pt; mso-line-height-rule: exactly">           for(j=0;j&lt;=h;j++)   a[j]-=a[r][j]*d;<p></p></P><P 14pt; mso-line-height-rule: exactly">           a=0.0;<p></p></P><P 14pt; mso-line-height-rule: exactly">           }<p></p></P><P 14pt; mso-line-height-rule: exactly">    d=c;<p></p></P><P 14pt; mso-line-height-rule: exactly">    for(j=0;j&lt;=h;j++)      c[j]-=a[r][j]*d;<p></p></P><P 14pt; mso-line-height-rule: exactly">    c=0.0;<p></p></P><P 14pt; mso-line-height-rule: exactly">    num++;<p></p></P><P 14pt; mso-line-height-rule: exactly">    }<p></p></P><P 14pt; mso-line-height-rule: exactly">  for(i=0;i&lt;m;i++)<p></p></P><P 14pt; mso-line-height-rule: exactly">    printf("\nx%d=%g",jbl+1,a[h]);<p></p></P><P 14pt; mso-line-height-rule: exactly">  printf("\nMax f=%g",fabs(c[h]));<p></p></P><P 14pt; mso-line-height-rule: exactly">  }<p></p></P>
 楼主| 发表于 2004-5-14 08:24:38 | 显示全部楼层
<H2 center" align=center>等距离法求函数的极大值dengq.c<p></p></H2>< 18pt"><B>#include&lt;math.h&gt;<p></p></B></P>< 18pt"><B>#include&lt;stdio.h&gt;<p></p></B></P>< 18pt"><B>double f(double x)<p></p></B></P><P 18pt"><B>{<p></p></B></P><P 18pt"><B>return(x*sin(x));<p></p></B></P><P 18pt"><B>}<p></p></B></P><P 18pt"><B>double ca_max(double a,double b,double eps)<p></p></B></P><P 18pt"><B>{<p></p></B></P><P 18pt"><B>unsigned int n=0;<p></p></B></P><P 18pt"><B>double c,x1,x2,x3,f1,f2,f3;<p></p></B></P><P 18pt"><B>c=(b-a)*0.25;<p></p></B></P><P 18pt"><B>x1=a+c;f1=f(x1);<p></p></B></P><P 18pt"><B>x2=x1+c;f2=f(x2);<p></p></B></P><P 18pt"><B>x3=x2+c;f3=f(x3);<p></p></B></P><P 18pt"><B>for(;;)<p></p></B></P><P 18pt"><B>  {<p></p></B></P><P 18pt"><B>  if(f1&gt;=f2&amp;&amp;f1&gt;f3)<p></p></B></P><P 18pt"><B>    {<p></p></B></P><P 18pt"><B>    b=x2;x2=x1;f2=f1;<p></p></B></P><P 18pt"><B>    }<p></p></B></P><P 18pt"><B>  else if(f3&gt;=f2&amp;&amp;f3&gt;f1)<p></p></B></P><P 18pt"><B>    {<p></p></B></P><P 18pt"><B>    a=x2;x2=x3;f2=f3;<p></p></B></P><P 18pt"><B>    }<p></p></B></P><P 18pt"><B>  else<p></p></B></P><P 18pt"><B>    {<p></p></B></P><P 18pt"><B>    a=x1;b=x3;<p></p></B></P><P 18pt"><B>    }<p></p></B></P><P 18pt"><B>  c=(b-a)*0.25;<p></p></B></P><P 18pt"><B>  if(fabs(c)&lt;eps)break;<p></p></B></P><P 18pt"><B>  x1=a+c;f1=f(x1);<p></p></B></P><P 18pt"><B>  x3=x2+c;f3=f(x3);<p></p></B></P><P 18pt"><B>  n++;<p></p></B></P><P 18pt"><B>  }<p></p></B></P><P 18pt"><B>printf("\nn=%u",n);<p></p></B></P><P 18pt"><B>return(x2);<p></p></B></P><P 18pt"><B>}<p></p></B></P><P 18pt"><B> <p></p></B></P><P 18pt"><B>main()<p></p></B></P><P 18pt"><B>{<p></p></B></P><P 18pt"><B>double mx,my;<p></p></B></P><P 18pt"><B>mx=ca_max(0.0,3.16,1.0e-12);<p></p></B></P><P 18pt"><B>my=f(mx);<p></p></B></P><P 18pt"><B>printf("\n Maxx=%14.12lf  Maxy=%14.12lf",mx,my);<p></p></B></P><P 18pt"><B>}<p></p></B></P><P 18pt"><B> <p></p></B></P><P 18pt"><B>计算结果:n=39<p></p></B></P><P 59.05pt; LINE-HEIGHT: 18pt; mso-char-indent-count: 5.0; mso-char-indent-size: 11.8pt"><B>Maxx=2.028757837284<p></p></B></P><P 59.05pt; LINE-HEIGHT: 18pt; mso-char-indent-count: 5.0; mso-char-indent-size: 11.8pt"><B>Maxy=1.819705741160<p></p></B></P><P 18pt"><B> <p></p></B></P>
 楼主| 发表于 2004-5-14 08:25:08 | 显示全部楼层
< center" align=center>等距离法求函数的极小值<p></p></P><>#include&lt;math.h&gt;</P><>#include&lt;stdio.h&gt;</P><P>#include&lt;conio.h&gt;</P><P>double fx(double x)</P><P>{</P><P>return(sin(x)-log(1+x*x));</P><P>}</P><P>double ca_min(double a,double b,double eps)</P><P>{</P><P>double c,x1,x2,x3,f1,f2,f3;</P><P>c=(b-a)*0.25; x1=a+c; f1=fx(x1);</P><P>x2=x1+c; f2=fx(x2); x3=x2+c; f3=fx(x3);</P><P>for(;;)</P><P>  {</P><P>  if(f1&lt;=f2&amp;&amp;f1&lt;f3)</P><P>    {</P><P>    b=x2; x2=x1; f2=f1;</P><P>    }</P><P>  else if(f3&lt;=f2&amp;&amp;f3&lt;f1)</P><P>    {</P><P>    a=x2; x2=x3; f2=f3;</P><P>    }</P><P>  else</P><P>    {</P><P>    a=x1;b=x3;</P><P>    }</P><P>  c=(b-a)*0.25;  if(fabs(c)&lt;eps)break;</P><P>  x1=a+c;f1=fx(x1);  x3=x2+c;f3=fx(x3);</P><P>  }</P><P>return(x2);</P><P>}</P><P>main()</P><P>{</P><P>double mx,my;</P><P>mx=ca_min(4.0,6.0,1.0e-10); my=fx(mx);</P><P>printf("\n Maxx=%14.12lf  Maxy=%14.12lf",mx,my); getch();</P><P>}</P>
发表于 2004-5-20 01:26:26 | 显示全部楼层
<>好东东!!!!!!!!</P>
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

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

GMT+8, 2024-11-28 04:52 , Processed in 0.065591 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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