Math 给定曲线上某一点的值,如何近似曲线上其他点的值
我有一个曲线图的趋势,它的方程我不知道,它在xy平面上绘制,其中x表示1到96的时间(代表15分钟的周期),y表示给定x的值。我在给定的x上得到y的值,比如(4,30)。现在我需要追踪曲线,找到所有其他x的y值 你知道如何用微积分来实现吗?我该如何编程 我正在尝试使用切线,但我不能完全想清楚 示例:假设我使用x,y值绘制一个图,它将是一条不对称曲线。现在,一旦绘制了曲线。同一条曲线可用于近似显示相同曲线趋势的不同数据集上的值。所以,如果只给我一个点,比如说,在x=10时,y=40,那么对于显示类似曲线趋势的数据集,如何得到其他x的y值呢Math 给定曲线上某一点的值,如何近似曲线上其他点的值,math,curve-fitting,curve,discrete-mathematics,calculus,Math,Curve Fitting,Curve,Discrete Mathematics,Calculus,我有一个曲线图的趋势,它的方程我不知道,它在xy平面上绘制,其中x表示1到96的时间(代表15分钟的周期),y表示给定x的值。我在给定的x上得到y的值,比如(4,30)。现在我需要追踪曲线,找到所有其他x的y值 你知道如何用微积分来实现吗?我该如何编程 我正在尝试使用切线,但我不能完全想清楚 示例:假设我使用x,y值绘制一个图,它将是一条不对称曲线。现在,一旦绘制了曲线。同一条曲线可用于近似显示相同曲线趋势的不同数据集上的值。所以,如果只给我一个点,比如说,在x=10时,y=40,那么对于显示类
1,6.81
2,5.516
3,6.088
4,8.025
5,6.89
6,9.98
7,8.511
8,8.458
9,8.172
10,8.467
11,10.294
12,11.106
13,10.517
14,7.905
15,8.141
16,9.608
17,8.774
基本上,您有两项任务:
y=a*x+b
的方程)或多项式模型(即形式为y=c_n*x^n+c_n-1*x^n-1+…+c_0
的方程),但您也必须选择n
)。或者一个神经网络(你必须修复拓扑结构)
如果您这样做,参数拟合就很容易(如果您有一个像我提到的那样健全的模型)。特别是线性和多项式模型的外观和外观如果新数据少于模型所需的数据,则必须手动修复某些参数,例如,对于线性模型,可以说斜率保持不变,只拟合恒定部分。因此,这两个图形相同或缩放或相互移动?
让
(x,y)
成为您的通缉点x
已知y
未知
让
(xx,yy)
成为第二个图形/数据中的已知点
让已知图成为源图 因此:
在源数据
(x0,y0)、(x1,y1)
中查找最近的2个点,其中x0您可以应用遗传编程(GP)或其变体之一。我有一个简单易用的软件,名为Multi-Expression Programming X,用于发现此类函数。我已将您的数据加载到程序中,并已获得以下C函数:
#include <math.h>
#include <stdio.h>
void mepx(double *x /*inputs*/, double *outputs)
{
//constants ...
double constants[5];
constants[0] = 0.429823;
constants[1] = -0.327464;
constants[2] = -0.389508;
constants[3] = -0.315653;
constants[4] = 0.166875;
double prg[22];
prg[0] = x[0];
prg[1] = cos(prg[0]);
prg[2] = constants[4];
prg[3] = prg[0] + prg[1];
prg[4] = pow(10, prg[1]);
prg[5] = sin(prg[0]);
prg[6] = -prg[1];
prg[7] = constants[4];
prg[8] = atan(prg[3]);
prg[9] = prg[4] * prg[6];
prg[10] = prg[5] > prg[9]?prg[5] : prg[9];
prg[11] = prg[6] < prg[7]?prg[6] : prg[7];
prg[12] = atan(prg[10]);
prg[13] = tan(prg[4]);
prg[14] = prg[13] - prg[12];
prg[15] = x[0];
prg[16] = prg[8] / prg[2];
prg[17] = sin(prg[14]);
prg[18] = prg[16] - prg[11];
prg[19] = prg[18] + prg[17];
prg[20] = prg[6] / prg[15];
prg[21] = prg[19] - prg[20];
outputs[0] = prg[21];
}
int main(void)
{
//example of utilization ...
double x[1];
x[0] = 1.000000;
double outputs[1];
mepx(x, outputs);
printf("%lf", outputs[0]);
getchar();
}
#包括
#包括
无效mepx(双*x/*输入*/,双*输出)
{
//常数。。。
双常数[5];
常数[0]=0.429823;
常数[1]=-0.327464;
常数[2]=-0.389508;
常数[3]=-0.315653;
常数[4]=0.166875;
双prg[22];
prg[0]=x[0];
prg[1]=cos(prg[0]);
prg[2]=常数[4];
prg[3]=prg[0]+prg[1];
prg[4]=功率(10,prg[1]);
prg[5]=sin(prg[0]);
prg[6]=-prg[1];
prg[7]=常数[4];
prg[8]=atan(prg[3]);
prg[9]=prg[4]*prg[6];
prg[10]=prg[5]>prg[9]?prg[5]:prg[9];
prg[11]=prg[6]
该函数的误差(与数据的距离)为0.32。如果使用程序的参数,可以获得更多
你现在要做的是为函数提供其他输入(其他x),然后你会得到其他y。我会先问math.stackexchange.com我认为当你只知道一个点时,你找不到函数…什么曲线?以什么形式?(图像(光栅/向量?),点集…)添加您已添加的数据示例添加一个示例来解决我的问题。您不能用一个点“生成”函数。您至少需要两个点,但这还不够,您需要知道您的函数应该是什么样的(线性函数、多项式…)。一旦你有了这些,你就可以使用标准的机器学习技术将你选择的函数形式与数据相匹配。对于线性函数,使用线性回归很容易。对于多项式,通过转换输入,然后使用线性回归也很容易。
#include <math.h>
#include <stdio.h>
void mepx(double *x /*inputs*/, double *outputs)
{
//constants ...
double constants[5];
constants[0] = 0.429823;
constants[1] = -0.327464;
constants[2] = -0.389508;
constants[3] = -0.315653;
constants[4] = 0.166875;
double prg[22];
prg[0] = x[0];
prg[1] = cos(prg[0]);
prg[2] = constants[4];
prg[3] = prg[0] + prg[1];
prg[4] = pow(10, prg[1]);
prg[5] = sin(prg[0]);
prg[6] = -prg[1];
prg[7] = constants[4];
prg[8] = atan(prg[3]);
prg[9] = prg[4] * prg[6];
prg[10] = prg[5] > prg[9]?prg[5] : prg[9];
prg[11] = prg[6] < prg[7]?prg[6] : prg[7];
prg[12] = atan(prg[10]);
prg[13] = tan(prg[4]);
prg[14] = prg[13] - prg[12];
prg[15] = x[0];
prg[16] = prg[8] / prg[2];
prg[17] = sin(prg[14]);
prg[18] = prg[16] - prg[11];
prg[19] = prg[18] + prg[17];
prg[20] = prg[6] / prg[15];
prg[21] = prg[19] - prg[20];
outputs[0] = prg[21];
}
int main(void)
{
//example of utilization ...
double x[1];
x[0] = 1.000000;
double outputs[1];
mepx(x, outputs);
printf("%lf", outputs[0]);
getchar();
}