使用泰勒展开式计算正弦的程序不起作用?

2024-03-14

我正在尝试编写一些代码,使用泰勒展开计算 sin(0.75) 的值,并打印每次迭代,直到使用展开计算的值与使用 Fortran 的内在 sin 函数计算的值之间的绝对差为小于1E-6。这是我的代码:

program taylor
 implicit none
 real :: x = 0.75
 do while (x - sin(0.75) < 10**(-6))
  print *, x
  x = x - ((x**3)/6) + ((x**5)/120) - ((x**7)/5040)
end do
end program taylor

然而,这并没有打印出任何东西?为什么是这样?


对于大多数人来说,这看起来太明显了,所以没有人愿意回答,但应该明确地说出来

条件x - sin(0.75) < 10**(-6)显然不正确,当x非常不同于sin(0.75), 所以do while永远不会进入循环。

另外,正如 IanH 评论的那样10**(-6)将给出 0,因为两个整数的幂的结果又是一个整数。字面意思real数字 10^-6 应表示为1e-6.

如果你把它改成x - sin(0.75) > 1e-6循环将继续,但它将永远运行,因为你的迭代是错误的。泰勒级数的工作方式不同,你应该计算

y = 0
y = y + x**1/1!
y = y - x**3/3! 
y = y + x**5/5!
y = y - x**7/7!
...

等等,这是一种非常不同的循环。

试试这个:

program taylor
 implicit none
 real :: x = 0.75
 real :: y, fact
 integer :: sgn, i

 fact = 1
 sgn = 1

 y = 0

  do i = 1, 10, 2
    y = y + sgn * x**i / fact
    fact = fact*(i+1)*(i+2)
    sgn = -sgn
  end do
  print *, y, sin(x)
end program taylor
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用泰勒展开式计算正弦的程序不起作用? 的相关文章

  • 未知长度的字符返回函数

    如何使用结果最初长度未知的字符函数 The trim 据我了解 函数表明可以不指定返回字符串的长度 例如 write trim str 将仅返回不带尾随空格的字符串的一部分 该函数在调用之前不知道返回字符串的长度 Or trim 功能有限制
  • Fortran 95 数组中具有一维变量的二维数组

    我想在代码中将一些内容存储在二维数组中 然后想扫描该数组 有N 1 行 第一个索引的数量 比如说i 在数组中 然而 对于给定值i 数量j尽管我知道最大可能值 但值不是固定的j 说它是N 2 我当然可以创建大小的数组 N 1 N 2 来存储我
  • 缺乏释放会导致什么样的问题?

    我目前遇到问题 glibc detected efit free invalid next size fast 0x00000000006127f0 带有通常的内存映射和回溯信息glibc错误 但是 我无法找到这个问题的原因 看起来 基本上
  • C++ 中的按元素运算

    是否有一个预先存在的库可以让我创建具有以下属性的类似数组的对象 运行时大小规范 在实例时选择 之后不会增长或缩小 运算符重载以执行元素明智的操作 即c a b将产生一个向量c with c i a i b i 对全部i 类似地对于 etc
  • 如何在 R 中编写 .bin 文件并在 Fortran 中打开它

    我有一个 Fortran 模型 我想强制使用来自 R 开发的模型的数据 但我在两个环境之间传输数据时遇到问题 我正在考虑使用 bin 文件 我在 R 中所做的是使用writeBin将多维数组存储在 bin 文件中 a seq 1 150 1
  • 具有重载赋值的嵌套派生类型

    我有一个派生类型 wrapper 包含其他派生类型 over 对于后者 赋值运算符已被重载 由于派生类型的分配按默认组件方式发生 因此我希望分配两个实例wrapper将调用重载分配over在某一点 然而 使用下面的程序 情况似乎并非如此 仅
  • 如何从 R 调用 Fortran 程序

    我对 Fortran 完全陌生 但对 R 很熟悉 我得到了一个巨大的 Fortran 程序 其中包含大约 30 个子例程和大约 15 个函数以及许多其他代码行 有人告诉我需要从R中调用Fortran程序 我一直在网上寻找方法 在 R 和 F
  • Fortran 接受来自 C 的字符串(?)

    我觉得这应该是一个简单的问题 但我无法让它发挥作用 我有一些 Fortran 代码 需要如下输入 SUBROUTINE TRACE X Y NAME XX YY EXTERNAL NAME CALL NAME X Y XX YY 我正在尝试
  • f77 未格式化二进制文件的内容

    我有一个 f77 未格式化的二进制文件 我知道该文件包含 2 个浮点数和一个长整数以及数据 文件的大小为 536870940 字节 应包含 512 3 个浮点数据值以及 2 个浮点和长整数 512 3 个浮点数据值组成 536870912
  • Fortran 90 - 尝试读取文件末尾之后的内容

    我在 Fortran 90 中遇到读取问题 我尝试读取 31488 行数据 我正在使用 Portland Group Fortran 90 编译器 我的错误信息是这样的 PGFIO F 217 列表定向读取 单元 14 尝试读取文件末尾 文
  • 为什么我必须在 Fortran 中隐式指定函数的双精度返回值?

    我是 Fortran 新手 我正在尝试common堵塞 我的代码很简单 program main implicit double precision p real 8 x y common yvalue y x 3d0 y 3d0 prin
  • SELECT TYPE 构造中的多态性分配

    我试图定义一个分配不同类型数组的子例程 这是代码的简化版本 subroutine Allocation1 Vec class allocatable intent out Vec select type Vec type is real 8
  • 如何为 Fortran 95+ 模块库提供显式接口,并隐藏实现

    我正在使用 gfortran 的 95 扩展 我有一个实用程序模块库 我想链接到其他项目 即作为库或共享对象 dll 但是 在 Fortran 中 我不明白如何在不维护模块接口的两个副本的情况下将接口与 Fortran 中的实现分离 在 C
  • 将派生类型中的指针分配给 Fortran 中相同类型中的目标

    我想在包含在同一派生类型中的派生类型中分配一个指针 下面的代码给了我下面的错误 这是怎么回事 我该如何解决这个问题 24 zoos i tigers 1 gt zoos i animals 1 1 1 Error Expected boun
  • OpenMP 因大型数组而崩溃

    我正在使用 Fortran 和 OpenMP 但当我尝试在存在大型数组时使用 OpenMP 并行化循环时 我不断遇到问题 例如 以下代码 PROGRAM main IMPLICIT NONE INTEGER PARAMETER NUMLOO
  • 编译错误:无法打开模块文件

    我有这个代码 PROGRAM xfit driver for routine fit USE nrtype USE nrutil USE nr USE ran state ONLY ran seed IMPLICIT NONE INTEGE
  • Fortran 2003,选择类型以区分“实数”和“实数数组”

    我的问题是 可以select type用块来区分real realInput from real realArrayInput 很清楚如何select type可以用于区分派生类型 但对我来说不太清楚它如何 或是否 可以用于内在类型 在 M
  • gfortran 未定义的引用

    我正在尝试编译一个依赖很多东西的程序 我使用并修改了提供的 makefile 来代表我的计算机设置 但在编译的最后一步中我不断收到许多未定义的引用 导致问题的命令行是 gfortran o cosmomc ParamNames o Matr
  • 如何调用模块中子程序内部的函数?

    我有一个包含子例程的模块 该子例程又包含一个函数 我说use themodule在我的主程序中 我可以call thesubroutine 但是如何访问子例程中包含的函数呢 代码如下所示 module useful integer para
  • R:使用带有 .Call 和 C/C++ 包装器的 Fortran 子例程而不是 .Fortran 的优点?

    我有一个 R 包 它使用大量 Fortran 子例程来进行递归线性代数计算的嵌套循环 很大程度上依赖于 BLAS 和 LAPACK 例程 作为 Fortran 的接口 我使用 Fortran功能 我刚刚读过乔纳森卡拉汉的博客文章 http

随机推荐