Вывел систему уравнений для нахождения коэ-тов параболы по методу наименьших квадратов. Кто помнит линейку? Или самому придется лезть в детерминанты...
Вывел систему уравнений для нахождения коэ-тов параболы по методу наименьших квадратов. Кто помнит линейку? Или самому придется лезть в детерминанты...
这里有一个解决线性方程组的算法,并以多项式回归的形式实现。
如果m=1,它就是一条线。
在m=2时,它是一个抛物线。
如果m=3,就有一个立方体,以此类推。
//-------------------------------- #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 LightSkyBlue //----------------------------------- extern double hours = 24; extern int m = 2; extern int i0 = 0; //----------------------- double fx[]; double a[10,10],b[10],x[10],sx[20]; double sum; int p; int nn; //******************************************* int init() { IndicatorShortName("at_PR (Din)"); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,fx); p=hours*60/Period(); nn=m+1; return(0); } //********************************************************** int start() { int i,n,k; sx[1]=p+1; SetIndexDrawBegin(0,Bars-p+i0); //----------------------sx--------------------- for(i=1; i<=nn*2-2; i++) { sum=0.0; for(n=i0; n<=i0+p; n++) {sum+=MathPow(n,i);} sx[i+1]=sum; } //----------------------syx-------------------- for(i=1; i<=nn; i++) { sum=0.0; for(n=i0; n<=i0+p; n++) { if (i==1) sum+=Close[n]; else sum+=Close[n]*MathPow(n,i-1); } b[i]=sum; } //===============Matrix======================== for(int j=1; j<=nn; j++) { for(i=1; i<=nn; i++) { k=i+j-1; a[i,j]=sx[k]; } } //===============Gauss========================= af_Gauss(nn,a,b,x); //============================================= for (i=i0; i<=i0+p; i++) { sum=0; for(k=1; k<=m; k++) sum+=x[k+1]*MathPow(i,k); fx[i]=x[1]+sum; } //------------------------------------------------------------- return(0); } //*************************************************************** void af_Gauss(int n, double& a[][],double& b[], double& x[]) { int i,j,k,l; double q,m,t; for(k=1; k<=n-1; k++) { l=0; m=0; for(i=k; i<=n; i++) { if (MathAbs(a[i,k])>m) {m=MathAbs(a[i,k]); l=i;} } if (l==0) return(0); if (l!=k) { for(j=1; j<=n; j++) { t=a[k,j]; a[k,j]=a[l,j]; a[l,j]=t; } t=b[k]; b[k]=b[l]; b[l]=t; } for(i=k+1;i<=n;i++) { q=a[i,k]/a[k,k]; for(j=1;j<=n;j++) { if (j==k) a[i,j]=0; else a[i,j]=a[i,j]-q*a[k,j]; } b[i]=b[i]-q*b[k]; } } x[n]=b[n]/a[n,n]; for(i=n-1;i>=1;i--) { t=0; for(j=1;j<=n-i;j++) { t=t+a[i,i+j]*x[i+j]; x[i]=(1/a[i,i])*(b[i]-t); } } return; } //**********************************************************************在此基础上,你可以同时建立有效值和概率水平,并优化长度和外推法。
虽然以可靠的推断,我还不是很清楚,谁能给我指点一下?
如果有人注意到它?或者,也许我把这一切都白提了?
Rosh,为什么一切都那么复杂?如果你事先不知道这个特定的样本包含你所需要的东西,你要如何找到系数呢?事实上,你可以让一切都变得更简单!弗拉迪斯拉夫在一开始就说,近似误差显示了近似的顺序。而且我已经写过了。我可以再重复一次。如果我们有一个如下形式的方程:y=ax^2+bx+c,那么通过用线性回归 通道y1=b1X+c1对样本进行近似,你实际上得到的系数b1等于初始方程的系数b。然后从第一个方程中减去线性回归方程,我们得到一个y=ax^2+c2的方程。也就是说,你可以从这个方程中看出,抛物线的顶部将被c2移向x轴。还要考虑到抛物线的顶点将在样本的中间。如果我们把抛物线的顶点放在(0,c2),也就是抛物线顶点的样本原点,我们将处理方程式(y-c2)=ax^2。但我们当然不知道这个方程中的2倍参数a和c2。但我们确实知道它们是如何相互依赖的 c2=y-ax^2。我们还知道抛物线与X轴的交点。所以我们在X轴上有三个点--顶点和与X轴的交点,我们需要通过这些点来找到所需的抛物线。在这里,我认为除了通过逐次逼近找到这样一个参数c2,即抛物线逼近的有效值误差最小之外,没有其他方法可以解决问题。然后通过已知的c2,我们也可以从第一个方程中得到参数c,由于这一点,我们得到了二次函数的完整方程。我认为这是最需要弗拉迪斯拉瓦的计算时间的,因为其他一切可能需要的计算时间较少。
好运和良好的趋势。
Rosh,为什么一切都那么复杂?如果你事先不知道这个特定的样本包含你所需要的东西,你要如何寻找系数?事实上,你可以让一切都变得更简单!弗拉迪斯拉夫在一开始就说,近似误差显示了近似的顺序。而且我已经写过了。我可以再重复一次。如果我们有一个如下形式的方程:y=ax^2+bx+c,那么通过用线性回归通道y1=b1X+c1来逼近样本,你实际上得到的系数b1等于初始方程的系数b。然后从第一个方程中减去线性回归方程,我们得到一个y=ax^2+c2的方程。也就是说,你可以从这个方程中看出,抛物线的顶部将被c2移向x轴。还要考虑到抛物线的顶点将在样本的中间。如果我们把抛物线的顶点放在(0,c2),也就是抛物线顶点的样本原点,我们将处理方程(y-c2)=ax^2。但我们当然不知道这个方程中的2倍参数a和c2。但我们确实知道它们是如何相互依赖的 c2=y-ax^2。我们还知道抛物线与X轴的交点。所以我们在X轴上有三个点--顶点和与X轴的交点,我们需要通过这些点来找到所需的抛物线。在这里,我认为除了通过逐次逼近找到这样一个参数c2,即抛物线逼近的有效值误差最小之外,没有其他方法可以解决问题。然后通过已知的c2,我们也可以从第一个方程中得到参数c,由于这一点,我们得到了二次函数的完整方程。我认为这是最需要弗拉迪斯拉瓦的计算时间的,因为其他一切都可以花费较少的计算时间。
我不明白--有什么问题。抛物线方程的寻求与线性回归 渠道的考虑相同--通过MNC。这个方程组的解是毫不含糊的,而且不需要迭代,是正面解决的。Zi=Deti/Det ,其中Zi是抛物线的系数,Det是矩阵行列式,Deti是将自由项(Ti)列代入第i列得到的矩阵行列式。同样,我们可以将同样的标准应用于所产生的曲线通道(将来会有明确的描述)--抛物线通道中整个样本的有效值不大于2/3样本的有效值。我暂时对赫斯特保持沉默,因为我没有答案,但我马上就要去找它了 :)HZ我找到了一本1986年的数学参考书,所以我变得聪明多了 :) (Kolmogorov或Demidovich会更好)。
谢谢你,我理解。虽然我不同意,并坚持我的观点。
有一个不需要迭代的简单解决方案,这是非常好的。我只是对利纳尔也有点生疏 :o(。我也要看一看一些书。Rosh,如果你已经明确地解决了这个问题,我想所有感兴趣的人也会有兴趣阅读你在上面已经勾勒出来的完整解决方案。也许你甚至可以把它作为Alpari的单独文章?
而这里有一种课程--http://www.exponenta.ru/educat/class/courses/student/la/examples.asp
这里是解决线性方程组的算法,以及以多项式回归形式的实现。
如果m=1--一条线。
在m=2时,它是一个抛物线。
如果m=3--一个立方体,等等。
是的,这正是Solandr想要的。然而,有一个问题--要用我的公式这么快写出这么一点棘手的代码--你需要成为一个专家。但我看了一下代码,我已经有了自己的算法,至少矩阵项的索引反映了我的方程组。现在我看到,ANG3110已经在这种东西上吃了一条狗(我记得是蜘蛛上的一根树枝):)
确实,我完全支持!!!。
非常好,是一个必要的指标!
ANG3110,你能解释一下这个代码吗?一开始就很难搞清楚。也许你在论坛上有自己的博客,那里详细地写着关于这个指标的一切?提前感谢您提供的信息。