爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: t_imba

[求助] 求【0,2】 定积分 ∫(x2+4X+7)dx ,用梯形法,计算精度为10-3.怎么做

[复制链接]

新浪微博达人勋

发表于 2014-4-30 01:29:56 | 显示全部楼层
这个,我第一个想到的就是goto啊,只要逻辑是对的,用goto语句也不会有什么问题吧,一般我是这么用的啊,因为这个是有条件的循环,所以用do这种的循环语句就不好使了,或者你可以尝试用do...while循环
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-30 01:41:11 | 显示全部楼层
这个1e-3的精度实际上都不用让程序来判定
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-30 01:43:07 | 显示全部楼层
直接这样就已经是1e-3的精度了
program ex15
    implicit none
    real::h,f1,f2,s1=0.0,si,s2=0.0
    integer n,i,j
   
    n=2000

    h=2./n
    f1=7.
   
        do i=1,n
            f2=(i*h)**2+4*(i*h)+7
            si=(f1+f2)*h/2.
            f1=f2
            s1=s1+si
            s2=s1-si
        enddo
        

    print *,s1,i,s1-s2
    end
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-30 01:43:44 | 显示全部楼层
超简单的方法,2/2000的步长,精度就是1e-3
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-30 01:46:27 | 显示全部楼层
石破天惊 发表于 2014-4-30 01:43
超简单的方法,2/2000的步长,精度就是1e-3

那为啥你前面写的那个求S1的值不对呢?我没看出问题来,还有,这个怎么算求到正好满足精度的N的值
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-30 01:53:16 | 显示全部楼层
问题出在if语句上,那个判定语句是错的,精度的话就是看你的步长,比如你现在是0到2的积分,那么2/n就确定了积分的步长,这样你的精度就确定了2/2000=0.001,也就是你想要的精度了,这种简单的运算都不需要用程序来算
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-30 01:55:15 | 显示全部楼层
石破天惊 发表于 2014-4-30 01:53
问题出在if语句上,那个判定语句是错的,精度的话就是看你的步长,比如你现在是0到2的积分,那么2/n就确定 ...

哦哦,似乎明白了。大晚上的麻烦你了。我是值班没事瞎摸索
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-30 01:57:16 | 显示全部楼层
啊,没事,我也是值班
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-30 07:14:49 | 显示全部楼层
t_imba 发表于 2014-4-30 01:24
请问如果不用GOTO语句还有更好的方法么?

可以用do while语句的,当满足什么条件时就执行!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-30 07:57:11 | 显示全部楼层
石破天惊 发表于 2014-4-30 01:43
直接这样就已经是1e-3的精度了
program ex15
    implicit none

想想还是不太对,睡了一觉起来好像知道为啥错了。S1=0.0,S2=0.0也要加入循环,忘记加了所以到最后值有问题
program ex15
    implicit none
    real::h,f1,f2,s1=0.0,si,s2
        integer n,i,j
        n=10
100 continue
        h=2./n
        f1=7.0
        si=0.0
                s1=0.0
                s2=0.0

      
        do i=1,n
        
            f2=(i*h)**2+4*(i*h)+7
        si=(f1+f2)*h/2.0
        f1=f2
        s1=s1+si
        s2=s1-si
        enddo
        if (abs(s1-s2)<=0.01) then
        goto 200
        elseif(abs(s1-s2)>0.01)then
                print*,n
        n=n+1
        goto 100
        endif
200 continue
    print *,s1,s2,si,n
        end
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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