⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 visual c++常微分方程初值问题求解2.htm

📁 Visual C++常微分方程解法(转载)
💻 HTM
📖 第 1 页 / 共 2 页
字号:
            href="http://www.yesky.com/20021122/1641169.shtml">1</A> 2 
            &nbsp;</FONT></P><SPAN class=txt> <B><FONT color=#ac000> 三、 
            使用经典龙格-库塔算法进行高精度求解</FONT></B><BR><BR>  龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。同前几种算法一样,该算法也是构建在数学支持的基础之上的。对于一阶精度的欧拉公式有:<BR><BR>  yi+1=yi+h*K1<BR>  K1=f(xi,yi)<BR><BR>  当用点xi处的斜率近似值K1与右端点xi+1处的斜率K2的算术平均值作为平均斜率K*的近似值,那么就会得到二阶精度的改进欧拉公式:<BR><BR>  yi+1=yi+h*( 
            K1+ 
            K2)/2<BR>  K1=f(xi,yi)<BR>  K2=f(xi+h,yi+h*K1)<BR><BR>  依次类推,如果在区间[xi,xi+1]内多预估几个点上的斜率值K1、K2、……Km,并用他们的加权平均数作为平均斜率K*的近似值,显然能构造出具有很高精度的高阶计算公式。经数学推导、求解,可以得出四阶龙格-库塔公式,也就是在工程中应用广泛的经典龙格-库塔算法:<BR><BR>  yi+1=yi+h*( 
            K1+ 2*K2 +2*K3+ 
            K4)/6<BR>  K1=f(xi,yi)<BR>  K2=f(xi+h/2,yi+h*K1/2)<BR>  K3=f(xi+h/2,yi+h*K2/2)<BR>  K4=f(xi+h,yi+h*K3)<BR><BR>  下面的具体程序实现同改进的欧拉算法类似,只需作些必要的改动,下面将该算法的关键部分代码清单列出:<BR><BR>
            <TABLE width="100%" bgColor=#ffffff>
              <TBODY>
              <TR>
                <TD>……<BR>for(float 
                  x=0;x&lt;0.6;x+=0.1)<BR>{<BR>r=x+expf(-x);<BR>K1=x-y[i]+1; 
                  file://求K1<BR>K2=(x+(float)(0.1/2))-(y[i]+K1*(float)(0.1/2))+1; 
                  file://求K2<BR>K3=(x+(float)(0.1/2))-(y[i]+K2*(float)(0.1/2))+1; 
                  file://求K3<BR>K4=(x+0.1)-(y[i]+K3*0.1)+1; 
                  file://求K4<BR>y[i+1]=y[i]+(float)(0.1*(K1+2*K2+2*K3+K4)/6); 
                  file://求yi+1<BR>r=fabs(r-y[i]); 
                  file://计算误差<BR>str.Format("y[%d]=%f r=%f\r\n",i,y[i],r); 
                  <BR>i++;<BR>msg+=str;<BR>}<BR>AfxMessageBox(msg); 
                  file://报告计算结果及误差情况</TD></TR></TBODY></TABLE><BR>  从下表记录的程序运行结果来看,在步长为0.1的情况下所计算出来的常微分方程的数值解是非常精确的,用浮点数进行运算时由近似所引入的误差几乎不会对计算结果产生影响,这样高的精度是非常令人满意的。无论是从计算速度上还是从计算精度要求上,都能非常好的满足工程计算的需要。<BR><BR>
            <TABLE cellSpacing=0 width=600 align=center border=1>
              <TBODY>
              <TR>
                <TD>xI(各分点)</TD>
                <TD>yI (数值解)</TD>
                <TD>y(xi) (真实值)</TD>
                <TD>| y(xi)- yI | (误差)</TD></TR>
              <TR>
                <TD>0.0</TD>
                <TD>1.000000</TD>
                <TD>1.000000</TD>
                <TD>0.000000</TD></TR>
              <TR>
                <TD>0.1 </TD>
                <TD>1.004838 </TD>
                <TD>1.004837 </TD>
                <TD>0.000001</TD></TR>
              <TR>
                <TD>0.2 </TD>
                <TD>1.018731 </TD>
                <TD>1.018731 </TD>
                <TD>0.000000</TD></TR>
              <TR>
                <TD>0.3 </TD>
                <TD>1.040818 </TD>
                <TD>1.040818</TD>
                <TD>0.000000</TD></TR>
              <TR>
                <TD>0.4 </TD>
                <TD>1.070320 </TD>
                <TD>1.070320</TD>
                <TD>0.000000</TD></TR>
              <TR>
                <TD>0.5 </TD>
                <TD>1.106531 </TD>
                <TD>1.106531 </TD>
                <TD>0.000000</TD></TR></TBODY></TABLE><BR> <B> 小结:</B>本文针对工程计算中遇到的常微分方程初值问题的求解,根据实际情况引如了计算机作为辅助计算工具,并根据高等数学的有关知识将欧拉公式、改进的欧拉公式、经典龙格-库塔方法等融入到计算机程序算法之中,充分利用了计算机的速度优势,大大减轻了工程技术人员的劳动强度,同时也使计算结果更加可靠、准确。但在实际应用时,针对不同的工程函数选择合适的求解方法需要有较高的要求,既要考虑到方法的简易,又要减少计算量,同时又不能让截断误差超出指定范围。一般来说经典龙格-库塔算法精确度高又利于计算机编程实现,稳定性也很好,可以考虑作为首选实现算法。<BR><BR><BR></SPAN>
            <P align=right><FONT color=red><A 
            href="http://www.yesky.com/20021122/1641169.shtml">上一页</A>&nbsp;&nbsp;<A 
            href="http://www.yesky.com/20021122/1641169.shtml">1</A> 2 
            &nbsp;</FONT></P></TD></TR>
        <TR>
          <TD>
            <DIV align=right>【责任编辑:方舟】 <BR>
            <SCRIPT src="Visual C++常微分方程初值问题求解2.files/dell.js"></SCRIPT>
            <IMG height=10 src="Visual C++常微分方程初值问题求解2.files/kong.gif" 
            width=100></IMG><A href="javascript:sendemail()"><IMG height=13 
            src="Visual C++常微分方程初值问题求解2.files/ms_020220.gif" width=73 
            border=0></IMG></A><A 
            href="http://bbs.yesky.com/servlet/IBBS2.ListTopic?forumID=123">【发表评论】</A><A 
            href="javascript:window.close()"><FONT 
            color=#000000>【关闭窗口】</FONT></A></DIV></TD></TR>
        <TR>
          <TD><IFRAME src="Visual C++常微分方程初值问题求解2.files/software.html" 
            frameBorder=0 width=550 scrolling=no height=80></IFRAME>
            <TABLE cellSpacing=0 cellPadding=0 width=550 border=0>
              <TBODY>
              <TR>
                <TD width=1 bgColor=#000000 rowSpan=5></TD>
                <TD bgColor=#000000 height=1></TD>
                <TD width=1 bgColor=#000000 rowSpan=5></TD></TR>
              <TR>
                <TD bgColor=#a0d0d0>■ 相关内容</TD></TR>
              <TR>
                <TD bgColor=#000000 height=1></TD></TR>
              <TR>
                <TD> <A 
                  href="http://www.yesky.com/20030102/1646785.shtml"><FONT 
                  color=#000000>基于Visual C++的Winsock API研究</FONT></A><BR> <A 
                  href="http://www.yesky.com/20021224/1645640.shtml"><FONT 
                  color=#000000>Visual C++实现数字图像增强处理</FONT></A><BR> <A 
                  href="http://www.yesky.com/20021209/1643404.shtml"><FONT 
                  color=#000000>Visual C++模态对话框消息处理机制的分析</FONT></A><BR> <A 
                  href="http://www.yesky.com/20021203/1642559.shtml"><FONT 
                  color=#000000>VC++实现对退化图像的恢复</FONT></A><BR> <A 
                  href="http://www.yesky.com/20021112/1639489.shtml"><FONT 
                  color=#000000>微软Visual C#.NET和Visual C++.NET开发蓝图 
                  </FONT></A><BR> <A 
                  href="http://www.yesky.com/20021021/1635957.shtml"><FONT 
                  color=#000000>Visual C++6.0 API函数操作技巧集 </FONT></A><BR> <A 
                  href="http://www.yesky.com/20021014/1634708.shtml"><FONT 
                  color=#000000>在Visual C++中使用内联汇编</FONT></A><BR> <A 
                  href="http://www.yesky.com/20021014/1634674.shtml"><FONT 
                  color=#000000>理解 Visual C++ Extensions for 
                  ADO</FONT></A><BR> <A 
                  href="http://www.yesky.com/20020730/1622842.shtml"><FONT 
                  color=#000000>Visual C++ COM/DCOM设计专辑</FONT></A><BR> <A 
                  href="http://www.yesky.com/20020629/1618242.shtml"><FONT 
                  color=#000000>C++ Builder与Visual C++孰优孰劣</FONT></A><BR> <A 
                  href="http://www.yesky.com/20020524/1612773.shtml"><FONT 
                  color=#000000>基于Visual C++ 的自动化客户端的实现</FONT></A><BR></TD></TR>
              <TR>
                <TD bgColor=#000000 height=1></TD></TR></TBODY></TABLE></TD></TR>
        <TR>
          <TD align=middle><A href="http://www.yesky.com/hdong/zz.htm" 
            target=_blank><FONT 
            color=#000000>感谢访问天极网,如果您觉得该文章涉及版权问题,请看这里!</FONT></A><BR><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=760 bgColor=#4e4e4e border=0>
  <TBODY>
  <TR>
    <TD height=3></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=770 align=center border=0>
  <TBODY>
  <TR>
    <TD><IFRAME src="Visual C++常微分方程初值问题求解2.files/floor-tougao.htm" 
      frameBorder=0 width=770 scrolling=no 
height=20></IFRAME></TD></TR></TBODY></TABLE>
<TABLE height=40 cellSpacing=0 cellPadding=0 width=770 align=center border=0>
  <TBODY>
  <TR>
    <TD>
      <DIV align=center><SPAN class=nava><FONT 
      face="Arial, Helvetica, sans-serif" color=#000000>Copyright (C) 2001 
      Yesky.com, All Rights Reserved </FONT><FONT color=#000000><BR>版权所有  <FONT 
      face="Arial, Helvetica, sans-serif">Yesky </FONT><A 
      href="mailto:webmaster@yesky.com"></A></FONT></SPAN></DIV></TD></TR></TBODY></TABLE>
<SCRIPT language=Javascript>document.write("<img src='http://counter.yesky.com/counter.shtml?CID=72342371928702976&AID=1641169&refer="+escape(document.referrer)+"&cur="+escape(document.URL)+"' border='0' alt='' width='0' height='0'>");</SCRIPT>
<BR></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -