Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.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
C# 如何将凸曲线拟合到数据点集_C#_Math_Curve_Curve Fitting - Fatal编程技术网

C# 如何将凸曲线拟合到数据点集

C# 如何将凸曲线拟合到数据点集,c#,math,curve,curve-fitting,C#,Math,Curve,Curve Fitting,我有一组数据点(x1,y1)(x2,y2)(x3,y3)等。这些数据使得连续点的斜率在大部分时间都在增加。但也有一些例外。我加载数据到的软件期望斜率总是增加,或者换句话说,曲线应该是凸的。因此,我需要一个数据点(x1,y1),(x2,y2)等的结果集,以便it删除“异常”数据点,并用适当的数据点替换它们,从而使斜率始终增加 我本来打算写一个程序(用C#)来做这件事,但我想我会在这里发帖子来检查这是否是一个标准问题,解决方案可能已经存在。解决问题取决于目标。您可以限制自己更改点的Y坐标,同时保持X

我有一组数据点(x1,y1)(x2,y2)(x3,y3)等。这些数据使得连续点的斜率在大部分时间都在增加。但也有一些例外。我加载数据到的软件期望斜率总是增加,或者换句话说,曲线应该是凸的。因此,我需要一个数据点(x1,y1),(x2,y2)等的结果集,以便it删除“异常”数据点,并用适当的数据点替换它们,从而使斜率始终增加


我本来打算写一个程序(用C#)来做这件事,但我想我会在这里发帖子来检查这是否是一个标准问题,解决方案可能已经存在。

解决问题取决于目标。您可以限制自己更改点的Y坐标,同时保持X固定。然后,合理的目标可能是最小化每个点的新Y值Y'和旧Y值Y'之间的绝对差值ABS(Y'-Y)之和。(我不知道这对你的问题是否合理,但对我来说也不是很不合理。)

然后可以将问题建模为线性规划,请参见:


在这种情况下,有标准库可以找到最佳解决方案

你的意思是说你想断言
P2->P3
的斜率总是大于
P1->P2
的斜率吗?如果(P2,P3)斜率不大于(P1,P2),我想删除P3并用合适的值(可能是(P4+P2)/2)替换P3,这样新的P3的斜率就会增加。哦,是否总是超过3分?(P4或更高?)如果斜率相等(线性),该怎么办?编辑:如果超过3个点,是否需要检查所有连续点?大约有32个数据点。对所有的点都需要检查。同样的坡度也是例外。因此,在我之前的评论中,P4可能也必须被删除,P3和P4 my都必须被替换。例外情况很少。i、 e.在32个数据点中可能有2个或3个你所说的“适合”是什么意思?你所说的凸意味着斜率总是增加,这是不正确的。椭圆是凸的,但其梯度会发生变化。为了得到你上面描述的,你可以拟合一个正二次系数的二次最小二乘近似。该函数具有不断增加的梯度,是凸函数。有关凸函数定义,请参见此链接