24小时热门版块排行榜    

查看: 525  |  回复: 3

fgwei2000

铜虫 (正式写手)

[求助] 哪位大侠帮忙看看我编的Newton插值程序错在哪里?

如题,我写的一个Newton插值程序代码,自己感觉没有问题,可是算出来的值不正确,哪位大侠帮忙看看,错在哪里?谢谢!
【注】正确的计算值应为:0.5325909 (+误差)
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

fgwei2000(金币+1): 2011-10-18 10:29:16
没有学过数值计算,不知道 newton 插值的算法是个啥样子,但从你的这个程序来看,并不复杂。所以,你再仔细检查一下是不是哪里算错了……

我大概看了一下,有两个地方,需要你自己看一下:
dd.f 第35行
         do i=n,k+1
k+1比n小,那么正确的写法应该是
         do i=n,k+1,-1

newton.f第36行
      do i=n-1,1
正确的写法应该是
      do i=n-1,1,-1

不排除你的编译器支持你的写法,但至少这不是标准写法。

别的就帮不了你了……
2楼2011-10-18 09:03:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

fgwei2000(金币+1): 2011-10-18 10:29:37
另外,你的程序中有两个 blank common,这是不允许的,每个程序中只允许一个 blank common

建议不要使用 blank common,任何时候都使用 named common...
3楼2011-10-18 09:45:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★
fgwei2000(金币+3): 谢谢你的提示,以前从来没有加过后面的‘-1’,程序都是循环的,今天竟然不循环,不过现在我加上“-1”后,结果已经正确了。以上三贴都是你回复的,所有全部加给你了。 2011-10-18 10:28:56
微尘、梦想(金币+2): 谢谢参与应助 2011-10-18 18:43:33
呵呵,我发现我已经得到了正确的答案了,下面是一个diff,你自己看着改一下就好了……
CODE:
diff -rbuN NEWTON1/dd.f NEWTON/dd.f
--- NEWTON1/dd.f        Tue Oct 18 00:36:44 2011
+++ NEWTON/dd.f        Tue Oct 18 09:49:51 2011
@@ -20,8 +20,8 @@
       real:: Y(100)       
                

-      common n
-      common X, Y
+      common /A/ n
+      common /B/ X, Y

c-----open the reading file main.dat and writing file main.out
               
@@ -32,7 +32,7 @@

      
       do k=2,n          
-         do i=n,k+1
+         do i=n,k+1,-1
             Y(i)=(Y(i)-Y(i-1))/(X(i)-X(i-k+1))                               
          end do
           Y(k)=(Y(k)-Y(k-1))/(X(k)-X(1))          
diff -rbuN NEWTON1/newton.f NEWTON/newton.f
--- NEWTON1/newton.f        Tue Oct 18 00:49:03 2011
+++ NEWTON/newton.f        Tue Oct 18 09:50:05 2011
@@ -18,8 +18,8 @@
       real:: X(100)
       real:: Y(100)            

-      common n
-      common X, Y
+      common /A/ n
+      common /B/ X, Y

c-----open the writing file main.out
               
@@ -33,7 +33,7 @@

       Nt=Y(n)

-      do i=n-1,1          
+      do i=n-1,1,-1
          Nt=(Nt*(t-X(i)))+Y(i)
       end do
      
diff -rbuN NEWTON1/reader.f NEWTON/reader.f
--- NEWTON1/reader.f        Mon Oct 17 23:54:19 2011
+++ NEWTON/reader.f        Tue Oct 18 09:50:11 2011
@@ -19,8 +19,8 @@
       real:: X(100)
       real:: Y(100)

-      common n
-      common X, Y
+      common /A/ n
+      common /B/ X, Y

c-----open the reading file main.dat and writing file main.out

4楼2011-10-18 09:52:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 fgwei2000 的主题更新
信息提示
请填处理意见