使用 Fortran 正确查找标准差和总体方差时出现问题
当我在 fortran 95 上搜索标准差和总体方差时,我找不到太多东西。所以我想知道是否有人可以帮助我?感谢您抽出时间。
这是我所做的,它编译得很好,但结果给出了错误的值:
SUBROUTINE ComputeStats(num, sum, avg, variance, sdv)
REAL, INTENT(IN):: num(10)
REAL, INTENT(OUT):: sum
REAL, INTENT(OUT):: avg, variance, sdv
DO i=1, 10
sum=sum+num(i)
END DO
avg=sum/10
DO i=1, 10
variance=(((num(i)-avg)**2.0)/10)
variance=variance+i
sdv=variance**0.5
END DO
END SUBROUTINE
I couldn't find much when I searched for standard deviations and population variances on fortran 95. So I'm wondering if someone could help me? Thanks for your time.
Here is what I did, it compiled fine but it turned out giving wrong values:
SUBROUTINE ComputeStats(num, sum, avg, variance, sdv)
REAL, INTENT(IN):: num(10)
REAL, INTENT(OUT):: sum
REAL, INTENT(OUT):: avg, variance, sdv
DO i=1, 10
sum=sum+num(i)
END DO
avg=sum/10
DO i=1, 10
variance=(((num(i)-avg)**2.0)/10)
variance=variance+i
sdv=variance**0.5
END DO
END SUBROUTINE
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您没有正确计算方差。
这为您提供了正确的方差,例如 1,1,1,1,1,1,1,1,1,1,即 0,而不是 10。
You don't calculate the variance correctly.
This gives you the right variance for e.g. 1,1,1,1,1,1,1,1,1,1 which is 0, not 10.
用于查找数组标准差的简单子例程
数组的大小在此处作为第一个参数 (n) 传递。
我们可以通过使用假定形状数组并将子例程放在显式接口(如模块或接口块)下来规避此问题。
A simple subroutine for finding the standard deviation of an array
The size of the array is passed here as the first argument (n).
We can circumvent this by using an assumed-shape array and putting the subroutine under an explicit interface like module or an interface block.