程序计算 sin(0.75) 关闭,但不工作?
Program to calculate sin(0.75) close, but not working?
我已经发布了关于此问题的问题,并实施了我从答案中学到的知识。我现在正处于屏幕上打印出的答案非常接近但不正确的地步。这是我现在拥有的代码:
program taylor
implicit none
integer :: k = 0
real :: y = 0.75
real :: x = 0.75
do while (abs(y - sin(0.75)) > 1E-6)
k = k + 1
y = y + ((y * (-x * x)) /( 2 * k * (2 * k + 1 )))
print *, y
end do
end program taylor
我似乎无法发现这里的错误,为什么这不起作用?它打印的第一个答案是正确的,但随后它似乎逐渐变低,而不是更接近真实值。 (do while循环是为了保证当计算和内函数sin函数的绝对值小于1E-6时程序停止)。我可以看到程序在不断减少最终输出,泰勒级数假设在 - 和 + 之间交替,那么我的程序怎么写呢?
谢谢。
泰勒级数使用阶乘和 x 的幂。
taylor_sin(x) = sum[0->n] ( [(-1 ^ n) / (2n + 1)!] * x**(2n + 1) )
(抱歉我的键盘数学技能不好...)
program taylor
implicit none
integer :: n = 0
real :: fac = 1
real :: y = 0.75
real :: x = 0.75
real :: px = 1
integer :: sgn = -1
integer :: s = 1
do while (abs(y - sin(0.75)) > 1E-6)
n = n + 1
fac = fac * (2 * n) * ((2 * n) + 1)
px = px * (x * x)
s = s * sgn
y = y + ((s /fac) * (px * x))
print *, y
end do
end program taylor
在循环中计算阶乘 fac
相当简单。
要计算 x**(2n + 1),请计算并保留 x**(2n) 并额外乘以 x。
我使用整数来计算 -1**n,因为使用实数 可能 随着时间的推移会失去精度。
[编辑] 愚蠢的我......你可以通过在循环之前将 px 设置为 0.75 来保存 x 的额外乘法。
我已经发布了关于此问题的问题,并实施了我从答案中学到的知识。我现在正处于屏幕上打印出的答案非常接近但不正确的地步。这是我现在拥有的代码:
program taylor
implicit none
integer :: k = 0
real :: y = 0.75
real :: x = 0.75
do while (abs(y - sin(0.75)) > 1E-6)
k = k + 1
y = y + ((y * (-x * x)) /( 2 * k * (2 * k + 1 )))
print *, y
end do
end program taylor
我似乎无法发现这里的错误,为什么这不起作用?它打印的第一个答案是正确的,但随后它似乎逐渐变低,而不是更接近真实值。 (do while循环是为了保证当计算和内函数sin函数的绝对值小于1E-6时程序停止)。我可以看到程序在不断减少最终输出,泰勒级数假设在 - 和 + 之间交替,那么我的程序怎么写呢?
谢谢。
泰勒级数使用阶乘和 x 的幂。
taylor_sin(x) = sum[0->n] ( [(-1 ^ n) / (2n + 1)!] * x**(2n + 1) )
(抱歉我的键盘数学技能不好...)
program taylor
implicit none
integer :: n = 0
real :: fac = 1
real :: y = 0.75
real :: x = 0.75
real :: px = 1
integer :: sgn = -1
integer :: s = 1
do while (abs(y - sin(0.75)) > 1E-6)
n = n + 1
fac = fac * (2 * n) * ((2 * n) + 1)
px = px * (x * x)
s = s * sgn
y = y + ((s /fac) * (px * x))
print *, y
end do
end program taylor
在循环中计算阶乘 fac
相当简单。
要计算 x**(2n + 1),请计算并保留 x**(2n) 并额外乘以 x。
我使用整数来计算 -1**n,因为使用实数 可能 随着时间的推移会失去精度。
[编辑] 愚蠢的我......你可以通过在循环之前将 px 设置为 0.75 来保存 x 的额外乘法。