Fortran Coder

标题: 各位前辈,麻烦帮忙看一下关于求相关系数的程序如何优化 [打印本页]

作者: 我是一头牛    时间: 2015-1-8 21:21
标题: 各位前辈,麻烦帮忙看一下关于求相关系数的程序如何优化
[latex]r=\frac{\sum_{i=1}^{n}({x}_{i}-\bar{x})({y}_{i}-\bar{y})}{\sqrt{\sum_{i=1}^{n}({x}_{i}-\bar{x})^{2}*\sum_{i=1}^{n}({y}_{i}-\bar{y})^{2}}}[/latex]
各位大神 我想右边的公式来求左边的红框内的数和蓝框内的数的相关系数  
外面是我写的程序 想麻烦大神们给看看 有哪些地方需要改进(也就是优化该程序) 谢谢
程序运行是没有问题的 ,我只是想看看大家是如何优化这个程序的,看看熟手是如何来写程序的
[Fortran] 纯文本查看 复制代码
program main
implicit none
integer::i,c(3,4),a_1(3,2),a(6),b_1(3,2),b(6)
real amean,bmean,sfenzi,sfenmu_1,sfenmu_2,coefficient

open(12,file=1.txt')
read(12,*)c

a_1=c(:,1:2)
b_1=c(:,3:4)

a=reshape(a_1,(/6/))  
b=reshape(b_1,(/6/))

amean=real(sum(a))/real(size(a))
bmean=real(sum(b))/real(size(b))

write(*,*)"a=",a
write(*,*)"b=",b
write(*,*)"amean=",amean
write(*,*)"bmean=",bmean

sfenzi=0.0
sfenmu_1=0.0
sfenmu_2=0.0
do i=1,size(a)
     sfenzi=sfenzi+(real(a(i))-amean)*(real(b(i))-bmean)
     sfenmu_1=sfenmu_1+(real(a(i))-amean)**2
     sfenmu_2=sfenmu_2+(real(b(i))-bmean)**2
end do

coefficient=sfenzi/sqrt(sfenmu_1*sfenmu_2)

write(*,*)"coefficient=",coefficient
stop
end program





作者: 楚香饭    时间: 2015-1-8 21:53
[Fortran] 纯文本查看 复制代码
Program main
Implicit None
Integer , parameter :: N = 6
Real :: a(N) , b(N)
Real :: amean , bmean , sfenzi = 0.0 , sfenmu_1 = 0.0 ,sfenmu_2 = 0.0 , coefficient
Integer :: i
Open(12,file='1.txt')
Read(12,*) a , b
Close(12)
amean= sum(a) / N
bmean= sum(b) / N
write(*,*)"a=",a
write(*,*)"b=",b
write(*,*)"amean=",amean
write(*,*)"bmean=",bmean
Do i = 1 , N
   sfenzi = sfenzi + ( a(i)-amean ) * ( b(i)-bmean )
   sfenmu_1 = sfenmu_1 + (a(i)-amean)**2
   sfenmu_2 = sfenmu_2 + (b(i)-bmean)**2
End Do
coefficient=sfenzi/sqrt(sfenmu_1*sfenmu_2)
write(*,*)"coefficient=",coefficient
End Program main

作者: 我是一头牛    时间: 2015-1-8 22:12
谢谢 弱弱地问一句 你为什么喜欢用空格 我感觉这样很费劲啊  比如amean= sum(a) / N
为什么不写成amean=sum(a)/N

作者: 楚香饭    时间: 2015-1-8 22:25
好看,唉,打字快就是任性
作者: 我是一头牛    时间: 2015-1-8 22:29
哎 牛人就是任性  晚安




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2