You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

手动拟合三角函数曲线时精准计算相移c值的方法

手动拟合三角函数曲线时精准计算相移c值的方法

嗨,我来帮你搞定这个相移c的精准计算问题!先理清楚你的现状:你已经确定了拟合余弦曲线的框架 y = 3.685 cos 29.1(x+c) + 5.455,现在需要手动算出最准确的c值,而不是依赖Desmos自动给出的1.22。你之前尝试用单个点代入求解得到了27.1894,虽然相关性rho达到了0.946,但确实有优化空间——单个点的误差会影响结果,用所有数据点做最小二乘拟合才是更精准的方案。

下面是具体的分步计算方法,能帮你得到和Desmos接近的精准c值:

步骤1:转换函数形式,简化计算

先把你的原函数展开:
y = 3.685 cos(29.1x + 29.1c) + 5.455
C = 29.1c,同时把垂直偏移项移到左边,得到:
y' = y - 5.455 = 3.685 cos(29.1x + C)

步骤2:把三角函数转化为线性形式

利用余弦的和角公式展开:
cos(29.1x + C) = cos(29.1x)cosC - sin(29.1x)sinC
代入后式子变为:
y' = 3.685cosC * cos(29.1x) - 3.685sinC * sin(29.1x)
我们设两个新的参数:
P = 3.685cosCQ = -3.685sinC
这样式子就变成了线性回归模型
y' = P*cos(29.1x) + Q*sin(29.1x)

步骤3:用最小二乘法求解线性参数P和Q

这一步需要用到你所有的(x,y)数据点:

  1. 对每个数据点,计算:
    • X₁ = cos(29.1x)(注意这里的29.1是角度,计算时要和Desmos的角度模式保持一致)
    • X₂ = sin(29.1x)
    • Y = y - 5.455
  2. 计算各项均值:mean(X₁)mean(X₂)mean(Y)
  3. 计算以下求和项:
    • S₁₁ = sum((X₁ - mean(X₁))²)
    • S₂₂ = sum((X₂ - mean(X₂))²)
    • S₁₂ = sum((X₁ - mean(X₁))*(X₂ - mean(X₂)))
    • S₁Y = sum((X₁ - mean(X₁))*(Y - mean(Y)))
    • S₂Y = sum((X₂ - mean(X₂))*(Y - mean(Y)))
  4. 解下面的线性方程组,得到P和Q:
    S₁₁*P + S₁₂*Q = S₁Y
    S₁₂*P + S₂₂*Q = S₂Y
    

步骤4:从P和Q反推C,再得到c

  1. 根据P和Q的定义,我们可以得到:
    cosC = P / 3.685sinC = -Q / 3.685
  2. 反正切函数arctan2计算C(这个函数能正确判断象限,避免单值反正切的象限误差):
    C = arctan2(-Q, P)
  3. 最后算回相移c:
    c = C / 29.1

为什么这个方法更精准?

单个点代入的方法容易受某一个偏离拟合曲线的点影响,而最小二乘法是让所有数据点到拟合曲线的误差平方和最小,充分利用了所有数据的信息,算出来的c值会和Desmos自动拟合的1.22非常接近,同时rho值也会比你之前的0.946更高。

算完之后你可以把c代入原函数,和数据点对比验证拟合效果,相信结果会让你满意!

备注:内容来源于stack exchange,提问作者amateur

火山引擎 最新活动