Algorithm 版 (精华区)

发信人: sino (蚱蜢舟), 信区: Algorithm
标  题: 小修小补龙贝格
发信站: 哈工大紫丁香 (2002年01月16日11:00:03 星期三), 站内信件


发信人: cutemic (CS99-::我是杂草), 信区: ACMICPC
标  题: 小修小补龙贝格
发信站: 逸仙时空 Yat-sen Channel (Tue Jan 15 19:55:32 2002), 站内信件

把原来的 while(fabs(A-T[0])>e);
更改为   while(fabs(T[1]-T[0])>e);
结果由 17 秒钟变成 8 秒钟
原因是 T[1]是T(h/2)的结果,T[0]是T[h]的结果;
T[1]要比T[0]精确些;每次求解可以省略1步;
在特殊情况下可以省略两部;
不过没有什么用,只是小修小补流程而已。

#include<iostream.h>
#include<time.h>
#ifndef fabs
#define fabs(x)  ((x)>0?double(x):double(-(x)))
#endif
double f(double x)
{
 return x*x;
}
double Romberg(double f(double x), double a,double b,double e)
{
 double T[50];
 double h;
 double M;
 //double A;
 int l;
 int n;
 l = 0;
 n = 1;
 h = b-a;
 T[0] = (f(a)+f(b))*h*0.5;
 do
 {
  M = 0;
  //A = T[0];
  for(int i=0;i<n;i++)
  {
   M+=f(a+(i+0.5)*h);
  } M*=h;
  T[l+1] = (T[l]+M) / 2;
  double G = 4;
  for(int j=l;j>=0;j--)
  {
   T[j] = (T[j+1] - T[j]/G) / (1-1/G);
   G*=4;
  }
  l++;n*=2;h*=0.5;
 }
 while(fabs(T[1]-T[0])>e);
 return T[0];
}

--
    ... 这一阵歌声传入湖边一个道姑耳中。她在一排柳树下悄立已久,

  晚风拂动她杏黄色道袍的下摆,拂动她颈中所插拂尘的万缕柔丝,心

  头思潮起伏,当真亦是「芳心只共丝争乱」 ...

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: mtlab4.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.116毫秒