#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main ()
{
double g_1, e_1, e_2, e_3, e_4, e_5;
int k;
// double e[k];
e_1 = 3.0;
e_2 = 9.0;
e_3 = 27.0;
e_4 = 81.0;
e_5 = 243.0;
g_1 = ((e_1*e_2 + e_2*e_3 + e_3*e_4 + e_4*e_5)/5) - (((e_1)* + (e_2) + (e_3) +(e_4) + (e_5)/5)*((e_1)* + (e_2) + (e_3) +(e_4) + (e_5)/5));
printf("\n\n this is g(1): %f",g_1);
return (0);
}我正试图编写一个计算值之间相关性的程序。我所拥有的数学函数是自相关函数或数学相关函数,即
g(T) = sum(from t = 1 to m-T) [ (e_t)*(e_(T+t)] - (sum(from t = 1 to m) [e_t/m] )^2其中m是我所拥有的值的数目。
上面我试着做最简单的版本,取5个数字,然后把它们插入公式中。但最终,我需要能够读取一个包含100到5000之间任意数量的值的文件,并找到它们之间的关联。稍后,我将担心如何将文件读取到数组的条目中,但首先,我想知道是否有一种使用数组进行此操作的逻辑方法?
例如,我试图做以下工作:
e[1] = 3.0;
e[2] = 9.0;
e[3] = 27.0;
e[4] = 81.0;
e[5] = 243.0;
for(k=1;k<=5;k++)
{
g[k]= ((e[k]*e[k+1] + e[k+1]*e[k+2] + e[k+2]*e[k+3] + e[k+3]*e[k+4])/5) - (((e[k] + e[k+1] + e[k+2] + e[k+3] + e[k+4])/5)*((e[k] + e[k+1] + e[k+2] + e[k+3] + e[k+4])/5))
}但这只对k=1有意义,因为当它达到k= 5时,k+1将为6,k+2为7。我没有这些价值观..。但我不知道该怎么编程..。有人能帮忙吗?
谢谢
这是使用MathJax的公式
G(\τ)=\sum_{\tau_{0}=1}{m-τ}((\epsilon_{_0}*\epsilon_{\tau+\tau_{0})/m)- (\sum_{\tau_{0}=1}^m \epsilon_{\tau_{0}}/m)^2
该公式的另一种形式是:
G(\τ)= <\epsilon_{\tau_{0}}\epsilon_{\tau_{0}+\tau}>-<\epsilon_{\tau_{0}}>^2
哪里表示对a的期望。
发布于 2013-08-19 19:39:11
您要查找的C代码将以以下形式出现:
int tau = 7
int m = 80;
double *e; /* An array filled with m values */
double lhs,rhs,answer;
int tau0;
/* Left Summation */
for(sum=0,tau0=1; tau0 < m-tau; ++tau0)
sum += e[tau0] * e[tau+tau0];
lhs = sum / m;
/* Right Summation */
for(sum=0,tau0=1; tau0 < m; ++tau0)
sum += e[tau0] / m;
rhs = sum * sum;
answer = lhs - rhs;希望这能让你更接近你的解决方案。
发布于 2013-08-19 19:11:56
这是一个如何阅读数学表达式的问题。在你的例子中,看起来是m= 5,所以之和永远不会超过这个值。
我对你的方程式不太清楚。已经试过Mathjax了,但是公式对我还不清楚,但是.
当将数学表达式转换为代码时,请将求和符号(西格玛)视为等效于for循环的符号!
在编写代码时,(最初)以尽可能明确的方式编写。对于这个问题,两个循环代码,一个接一个,而不是嵌套的。每个for循环完成g(k)的部分计算。
让这个对g(1)起作用。然后编写第三个for循环,包装或包围您刚刚开始工作的两个循环。这个循环将计算g(1),g(2),等等。如果m是5,并且只有5个数据点,那么只能计算g(1),如果m是6,则可以计算g(1)和g(2),等等。
希望这有帮助,如果您有更多的信息或问题,请张贴。
为了回答您的注释,下面的for循环实现了和或西格玛。请注意。这并不是您的代码应该做的,但它使用两个for循环进行演示。
int g1; x = 0; y = 0;
int i;
// compute x = sum(g(i)) + sum(f(i))
// sum i = 0 to 2 [g(i)]
for (i=0; i < 3; i++) {x += g[i];}
// sum i = 0 to 1 [f(i)];
for (i=0; i < 2; i++) {y += f[i];}
g1 = x - y^2;https://stackoverflow.com/questions/18320051
复制相似问题