Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 如何在fortran 90中使用Newton-Raphson方法求平方根_Math_Fortran_Fortran90_Do Loops - Fatal编程技术网

Math 如何在fortran 90中使用Newton-Raphson方法求平方根

Math 如何在fortran 90中使用Newton-Raphson方法求平方根,math,fortran,fortran90,do-loops,Math,Fortran,Fortran90,Do Loops,我需要写一个程序,用牛顿-拉斐逊法,用猜测估计求平方根。牛顿-拉斐逊法的方程式为: xn+1 = xn-xn**2 − a/2*xn 其中n是迭代次数 分配告诉我循环应该在1和指定迭代总数之间执行。循环的每一步,都应该使用“溶液”的当前值来计算溶液的下一个值, 以方程式规定的形式 提示:请记住,在执行之前,为变量赋值会计算等于的右边 任务本身。这意味着计算每个新值只需要x的一个变量;你不需要 “旧x”和“新x”或类似 这就是我到目前为止所做的: program assign_10_2 impl

我需要写一个程序,用牛顿-拉斐逊法,用猜测估计求平方根。牛顿-拉斐逊法的方程式为:

xn+1 = xn-xn**2 − a/2*xn
其中n是迭代次数

分配告诉我循环应该在1和指定迭代总数之间执行。循环的每一步,都应该使用“溶液”的当前值来计算溶液的下一个值, 以方程式规定的形式

提示:请记住,在执行之前,为变量赋值会计算等于的右边
任务本身。这意味着计算每个新值只需要x的一个变量;你不需要 “旧x”和“新x”或类似

这就是我到目前为止所做的:

program assign_10_2
implicit none

real :: a, b, x
integer :: c, i, j 


write(*,*) 'please enter a value to determine the square root of'
read(*,*) a
write(*,*) 'please enter a value to use as the initial guess for the solution'
read(*,*) b
write(*,*) 'please enter a value for how many iterations it should perform to calculate the value'
read(*,*) c
write(*,*) a, b , c


do i= 1, c, 1
 x = b-((b**2-a)/2*b)
write(*,*)  i, x
end do

end program assign_10_2
我并不是在问答案,只是朝着正确的方向前进了一步。我对编程一无所知,这让我很困惑。我知道我在等式方面做错了什么。

这行是错的:

x = b-((b**2-a)/2*b)
b是最初的猜测。您不希望继续回到最初的猜测,而是希望使用之前计算的x值。此外,如果要除以2*x,则不应写入/2*x。我想你需要的是以下作业:

x = x - ((x**2-a)/(2*x))

我希望在循环之前看到x的一些初始化,在循环内部,x出现在赋值的两侧。这意味着什么?Sorry这意味着计算每个新值只需要x的一个变量;你不需要“旧的”和“新的”或类似的。。所以赋值左边的x是隐式的‘new_x’,右边的x是隐式的‘old_x’。您需要一些初始值“x_0”,因此x在循环之前被初始化。最初的猜测。非常感谢这帮我完成了它。谢谢你,因为你是一个初学者,并且使用fortran,我想让你看看Metcalf的fortran优化。硬件部分在这本非常古老的书中并不重要,但是关于编写代码的建议是非常宝贵的。我这么说是因为,x**2让我和许多其他开发人员感到痛心,这比简单的x*x慢得多。显然,您不会看到任何差异,但是,从长远来看,如果您使用fortran,这个习惯将是值得的。这通常会减少到x=x+a/x/2。