Fortran Coder

查看: 2106|回复: 2
打印 上一主题 下一主题

[数值问题] 二分法无法处理浮点数,出现断点如何解决

[复制链接]

252

帖子

0

主题

0

精华

版主

World Analyser

F 币
689 元
贡献
497 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
楼主
发表于 2023-3-21 08:49:03 | 显示全部楼层
二分法的判断条件弄错了。

(1) 若f(c)=0,则c就是函数的零点;
(2) 若f(a)·f(c)<0,则令b=c;
(3) 若f(c)·f(b)<0,则令a=c.

[Fortran] 纯文本查看 复制代码
module NUMERTICAL
  implicit none
  real, parameter :: zero = 0.00001

contains

  real function bisect(A,B) result(C)!这是声明bisect返回值为一个浮点数
    real A,B,FA,FB,FC
    C=(A+B)/2.0
    FC=func(C)
    do while (abs(fc)> zero)
      FA = func(A)
      FB = func(B)
      if(FA*FC < 0)then !//这里注意
        B=C
      else if( fc*fb < 0 ) then !//这里注意
        A=C
      end if
      C=(A+B)/2.0
      FC = FUNC(C)
    end do
  end function bisect

  real function func(X)
    real X
    func = (X+3)*(X-3)
  end function func
  
end module NUMERTICAL

program main
  use NUMERTICAL
  implicit none
  real A,B
  do
    write(*,*) '输入两个猜测值'
    read(*,*)A,B
    if(func(A)*func(B)<0) exit
    write(*,*) "不正确的猜测"
  end do
  write(*,"('x=',F6.3)") bisect(A,B)
end program main
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-15 19:59

Powered by Tencent X3.4

© 2013-2024 Tencent

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