数模论坛

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

2004D题创意版

[复制链接]
 楼主| 发表于 2004-11-10 20:09:40 | 显示全部楼层
<a href="http://album.tom.com/pic_show.php?PictureID=1895833&amp;DirectoryID=259891&amp;UserName_Author=slx81&amp;return_url=albumdirectory_bybreviary.php?UserName=slx81&amp;DirectoryID=259891" target="_blank" ><img src="http://pic5.album.tom.com/album_pic/2004/7/23/1090592810_24770_l.jpg?%75%4e%6d%42%6e%77%4d%78%6e%72"></A>
 楼主| 发表于 2004-11-10 20:10:11 | 显示全部楼层
<a href="http://album.tom.com/pic_show.php?PictureID=1895814&amp;DirectoryID=259891&amp;UserName_Author=slx81&amp;return_url=albumdirectory_bybreviary.php?UserName=slx81" target="_blank" ><img src="http://pic5.album.tom.com/album_pic/2004/7/23/1090591708_45542_l.jpg?%75%4e%6d%42%6e%77%4d%78%6d%7d"></A>
 楼主| 发表于 2004-11-10 20:10:31 | 显示全部楼层
<a href="http://album.tom.com/pic_show.php?PictureID=1895812&amp;DirectoryID=259891&amp;UserName_Author=slx81&amp;return_url=albumdirectory_bybreviary.php?UserName=slx81" target="_blank" ><img src="http://pic5.album.tom.com/album_pic/2004/7/23/1090591614_40997_l.jpg?%75%4e%6d%42%6e%77%4d%78%68%75"></A>
 楼主| 发表于 2004-11-10 20:11:03 | 显示全部楼层
<a href="http://album.tom.com/pic_show.php?PictureID=1895805&amp;DirectoryID=259891&amp;UserName_Author=slx81&amp;return_url=albumdirectory_bybreviary.php?UserName=slx81" target="_blank" ><img src="http://pic5.album.tom.com/album_pic/2004/7/23/1090591282_69056_l.jpg?%75%4e%6d%42%6e%77%4d%78%66%73"></A>
 楼主| 发表于 2004-11-10 20:11:31 | 显示全部楼层
<a href="http://album.tom.com/pic_show.php?PictureID=1895801&amp;DirectoryID=259891&amp;UserName_Author=slx81&amp;return_url=albumdirectory_bybreviary.php?UserName=slx81" target="_blank" ><img src="http://pic5.album.tom.com/album_pic/2004/7/23/1090590935_63807_l.jpg?%75%4e%6d%42%6e%77%4d%79%6f%7c"></A>
发表于 2004-11-11 03:13:18 | 显示全部楼层
 楼主| 发表于 2004-11-11 03:47:58 | 显示全部楼层
haha
 楼主| 发表于 2004-11-11 04:13:54 | 显示全部楼层
#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cstdlib&gt;
using namespace std;
const int M=100;
const int N=20;
int Jacobi(double (*a)[4],double b[],double eps,int n);
int GussSaider(double (*a)[4],double b[],double eps,int n);
int SuccessiveOverRelaxationMethed(double (*a)[4],double b[],double eps,int n,double w);
int main()
{
double a[4][4]={5,2,3,2,2,4,1,-2,1,-3,4,3,3,2,2,8};
double b[4]={-1,5,4,-6};
int n=4;
double eps=1.0e-5;
cout&lt;&lt;"精度为"&lt;&lt;eps&lt;&lt;endl;
cout&lt;&lt;"用雅可比迭代法求解的结果"&lt;&lt;endl;
    Jacobi (a, b,eps, n);
cout&lt;&lt;"用高斯赛德尔迭代法求解的结果"&lt;&lt;endl;
    GussSaider (a,b,eps,n);
cout&lt;&lt;"用SOR迭代法求解"&lt;&lt;endl;
double v=1.1784;
cout&lt;&lt;"松弛因子为"&lt;&lt;v&lt;&lt;endl;
    SuccessiveOverRelaxationMethed(a,b,eps,n,v);
    return 0;
}
int Jacobi(double (*a)[4],double b[],double eps,int n)
{
int i,j,u;
    double nx[N]={0},x[N]={0},d[N]={0};
for(i=0;i&lt;n;i++)
  for (j=0;j&lt;n;j++)
   if(i==j)
    d=a[j];
for (u=0;u&lt;M;u++)
{
     for (i=0;i&lt;n;i++)
  {
   double s=0.;
    for (j=0;j&lt;n;j++)
    {
    if (i==j) continue;
    else
      s+=a[j]*x[j];
    }
   nx=(b-s)/d;
  }
  double err=0.0;
        for (j=0;j&lt;n;j++)
   if(err&lt;fabs(nx[j]-x[j]))
     err=fabs(nx[j]-x[j]);
  for (j=0;j&lt;n;j++)
    x[j]=nx[j];
  if (err&lt;eps)   
  {  cout&lt;&lt;"求得的解为x_i"&lt;&lt;endl;
    for(i=0;i&lt;n;i++)
     cout&lt;&lt;x&lt;&lt;'\t';
             cout&lt;&lt;endl;
             cout&lt;&lt;"迭代的次数为"&lt;&lt;u&lt;&lt;endl;
    cout&lt;&lt;endl;
    return 0;
  }
}
   cout&lt;&lt;"迭代100次后不能得到结果,求解失败"&lt;&lt;endl;
               return 1;
}  
int GussSaider(double (*a)[4],double b[],double eps,int n)
{
int i,j,u;
double s1,s2;
    double nx[N]={0},x[N]={0},d[N]={0};
for(i=0;i&lt;n;i++)
  for (j=0;j&lt;n;j++)
   if(i==j)
    d=a[j];
for (u=0;u&lt;M;u++)
{
   for (i=0;i&lt;n;i++)
   {     s1=0.0;
     for (j=0;j&lt;i;j++)
    s1+=a[j]*nx[j];
            s2=0.0;
  for (j=i+1;j&lt;n;j++)
            s2+=a[j]*x[j];
        nx=(b-s1-s2)/d;
   }
    double err=0.0;
      for (j=0;j&lt;n;j++)
      if(err&lt;fabs(nx[j]-x[j]))
   err=fabs(nx[j]-x[j]);
   for (j=0;j&lt;n;j++)
  x[j]=nx[j];
   if (err&lt;eps)   
   {  cout&lt;&lt;"求得的解为x_i"&lt;&lt;endl;
  for(i=0;i&lt;n;i++)
   cout&lt;&lt;x&lt;&lt;'\t';
        cout&lt;&lt;endl;
        cout&lt;&lt;"迭代的次数为"&lt;&lt;u&lt;&lt;endl;
        cout&lt;&lt;endl;
  return 0;
   }
}
   cout&lt;&lt;"迭代100次后不能得到结果,求解失败"&lt;&lt;endl;
   return 1;
}     
int SuccessiveOverRelaxationMethed(double (*a)[4],double b[],double eps,int n,double w)
{
int i,j,u;
double s1,s2;
    double nx[N]={0},x[N]={0},d[N]={0};
for(i=0;i&lt;n;i++)
  for (j=0;j&lt;n;j++)
   if(i==j)
    d=a[j];
for (u=0;u&lt;16;u++)
{
   for (i=0;i&lt;n;i++)
   {     s1=0.0;
     for (j=0;j&lt;i;j++)
    s1+=a[j]*nx[j];
            s2=0.0;
  for (j=i;j&lt;n;j++)
            s2+=a[j]*x[j];
        nx=x+w*(b-s1-s2)/d;
   }
    double err=0.0;
      for (j=0;j&lt;n;j++)
      if(err&lt;fabs(nx[j]-x[j]))
   err=fabs(nx[j]-x[j]);
   for (j=0;j&lt;n;j++)
  x[j]=nx[j];
   if (err&lt;eps)   
   {  cout&lt;&lt;"求得的解为x_i"&lt;&lt;endl;
  for(i=0;i&lt;n;i++)
   cout&lt;&lt;x&lt;&lt;'\t';
        cout&lt;&lt;endl;
        cout&lt;&lt;"迭代的次数为"&lt;&lt;u&lt;&lt;endl;
        cout&lt;&lt;endl;
  return 0;
   }
}
     cout&lt;&lt;"迭代100次后不能得到结果,求解失败"&lt;&lt;endl;
   return 1;
}        
 楼主| 发表于 2004-11-11 04:20:19 | 显示全部楼层
< center" align=center><FONT face="Times New Roman"><B>Jacobi迭代法</B><p></p></FONT></P>< 0cm 0cm 0pt"><B><FONT face="Times New Roman">一、实验目的<p></p></FONT></B></P>< 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><FONT face="Times New Roman">1</FONT>.掌握线性代数方程组迭代法的思想;<p></p></P><P 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><FONT face="Times New Roman">2</FONT>.掌握使用雅可比迭代法的程序过程以及经改进后的高斯迭代法;<p></p></P><P 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><FONT face="Times New Roman">3</FONT>.比较高斯迭代与雅可比迭代法的迭代速度。<p></p></P><P 0cm 0cm 0pt"><B>二、实验内容</B><p></p></P><P 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><FONT face="Times New Roman">1</FONT>.要求用<FONT face="Times New Roman">c++</FONT>来编写雅可比迭代法程序。<p></p></P><P 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><FONT face="Times New Roman">2</FONT>.雅可比迭代法的迭代公式如下:<p></p></P><P 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><FONT face="Times New Roman">    </FONT><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><FONT face="Times New Roman"></FONT></v:imagedata></v:shape><FONT face="Times New Roman">  </FONT>(<FONT face="Times New Roman">i=1,2,…,n;k=0,1,2….</FONT>)<p></p></P><P 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><FONT face="Times New Roman">3</FONT>.将雅可比迭代法稍加改变编写高斯迭代法的同解实现程序。<p></p></P><P 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><FONT face="Times New Roman">4</FONT>.高斯迭代法的迭代公式如下:<p></p></P><P 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><v:shape><v:imagedata></v:imagedata></v:shape><FONT face="Times New Roman">   </FONT>(<FONT face="Times New Roman">i=1,2,…,n;k=0,1,2….</FONT>)<p></p></P><P 0cm 0cm 0pt; TEXT-INDENT: 42pt; mso-char-indent-count: 4.0"><p><FONT face="Times New Roman"> </FONT></p></P><P 0cm 0cm 0pt"><B>三、实验步骤与要求</B><p></p></P><P 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><v:shapetype><v:formulas><v:f eqn="val #0"></v:f><v:f eqn="sum 21600 0 #0"></v:f><v:f eqn="prod #0 9598 32768"></v:f><v:f eqn="sum 21600 0 @2"></v:f></v:formulas><v:path connecttype="custom" gradientshapeok="t" textboxrect="6326,@2,21600,@3" connectlocs="21600,0;0,10800;21600,21600" arrowok="t"></v:path><v:handles><v:h yrange="0,10800" position="topLeft,#0"></v:h></v:handles></v:shapetype><v:shape></v:shape><v:shapetype><v:formulas><v:f eqn="val #0"></v:f><v:f eqn="sum 21600 0 #0"></v:f><v:f eqn="prod #0 9598 32768"></v:f><v:f eqn="sum 21600 0 @2"></v:f></v:formulas><v:path connecttype="custom" gradientshapeok="t" textboxrect="0,@2,15274,@3" connectlocs="0,0;0,21600;21600,10800" arrowok="t"></v:path><v:handles><v:h yrange="0,10800" position="bottomRight,#0"></v:h></v:handles></v:shapetype><v:shape></v:shape><v:shape></v:shape><v:shape></v:shape><v:shape></v:shape><v:shape></v:shape><FONT face="Times New Roman">1</FONT>.按“实验内容”完成操作,计算<FONT face="Times New Roman">  5   2   3   2    x1  =  -1<p></p></FONT></P><P 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><FONT face="Times New Roman">                                 2   4   1  -2    x2  =   5<p></p></FONT></P><P 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><FONT face="Times New Roman">                                 1  -3   4   3    x3  =   4<p></p></FONT></P><P 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><FONT face="Times New Roman">                                 3   2   2   8    x4  =   -6<p></p></FONT></P><P 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><p><FONT face="Times New Roman"> </FONT></p></P><P 0cm 0cm 0pt; TEXT-INDENT: 20.15pt; mso-char-indent-count: 1.92"><FONT face="Times New Roman">2</FONT>.完成实验报告,在实验报告中要求记录如下内容:<p></p></P><P 0cm 0cm 0pt; TEXT-INDENT: 20.15pt; mso-char-indent-count: 1.92"><FONT face="Times New Roman">⑴</FONT>.所编写的程序原代码如下:<p></p></P><P 0cm 0cm 0pt 30.55pt; TEXT-INDENT: -10.5pt; mso-char-indent-count: -1.0; mso-para-margin-left: 1.91gd">(程序说明:本程序能完成本实验的功能,但是过于具体化,对上述程序做出改进,加入输入语句,得到一个计算不是太大“维”的线性方程组的程序二和本程序一都在邮件附件中)<p></p></P>
 楼主| 发表于 2004-11-11 04:23:56 | 显示全部楼层
< 0cm 0cm 0pt; TEXT-INDENT: 20.15pt; mso-char-indent-count: 1.92"><FONT face="Times New Roman">⑵</FONT>.记录所算出的答案如下:<p></p></P>< 0cm 0cm 0pt; TEXT-INDENT: 20.25pt; mso-char-indent-count: 1.92"><B>精度为</B><B><FONT face="Times New Roman">1e-005<p></p></FONT></B></P>< 0cm 0cm 0pt; TEXT-INDENT: 20.25pt; mso-char-indent-count: 1.92"><B>用雅可比迭代法求解的结果</B><B><p></p></B></P><P 0cm 0cm 0pt; TEXT-INDENT: 20.25pt; mso-char-indent-count: 1.92"><B>求得的解为</B><B><FONT face="Times New Roman">x_i<p></p></FONT></B></P><P 0cm 0cm 0pt; TEXT-INDENT: 20.25pt; mso-char-indent-count: 1.92"><B><FONT face="Times New Roman">-2      1       3       -0.999997<p></p></FONT></B></P><P 0cm 0cm 0pt; TEXT-INDENT: 20.25pt; mso-char-indent-count: 1.92"><B>迭代的次数为</B><B><FONT face="Times New Roman">53<p></p></FONT></B></P><P 0cm 0cm 0pt; TEXT-INDENT: 20.25pt; mso-char-indent-count: 1.92"><B>用高斯赛德尔迭代法求解的结果</B><B><p></p></B></P><P 0cm 0cm 0pt; TEXT-INDENT: 20.25pt; mso-char-indent-count: 1.92"><B>求得的解为</B><B><FONT face="Times New Roman">x_i<p></p></FONT></B></P><P 0cm 0cm 0pt; TEXT-INDENT: 20.25pt; mso-char-indent-count: 1.92"><B><FONT face="Times New Roman">-1.99999        0.999996        3       -1<p></p></FONT></B></P><P 0cm 0cm 0pt; TEXT-INDENT: 20.25pt; mso-char-indent-count: 1.92"><B>迭代的次数为</B><B><FONT face="Times New Roman">16<p></p></FONT></B></P><P 0cm 0cm 0pt; TEXT-INDENT: 20.25pt; mso-char-indent-count: 1.92"><B>用</B><B><FONT face="Times New Roman">SOR</FONT></B><B>迭代法求解</B><B><p></p></B></P><P 0cm 0cm 0pt; TEXT-INDENT: 20.25pt; mso-char-indent-count: 1.92"><B>松弛因子为</B><B><FONT face="Times New Roman">1.1784<p></p></FONT></B></P><P 0cm 0cm 0pt; TEXT-INDENT: 20.25pt; mso-char-indent-count: 1.92"><B>求得的解为</B><B><FONT face="Times New Roman">x_i<p></p></FONT></B></P><P 0cm 0cm 0pt; TEXT-INDENT: 20.25pt; mso-char-indent-count: 1.92"><B><FONT face="Times New Roman">-2      1       3       -1<p></p></FONT></B></P><P 0cm 0cm 0pt; TEXT-INDENT: 20.25pt; mso-char-indent-count: 1.92"><B>迭代的次数为</B><B><FONT face="Times New Roman">9<p></p></FONT></B></P>(3).三种迭代方法的优缺点各异,相比之下GaussSaidel迭代法要好一些,无论从迭代速度还是其有效性上都算上乘,虽然SuccessiveOverRelaxationMethed的速度更快,但是它要求的条件太高,要选择适当的松弛因子谈何容易,而且如果选不好,将使迭代速度大打折扣,故应选择GaussSaidel迭代法。
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

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

GMT+8, 2025-5-16 02:01 , Processed in 0.061445 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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