matlab - 绘制具有特定条件的趋势线(例如特定 x 值的斜率,必须通过特定点等)
matlab - plot trendline with specific condition(e.g. slope at specific x value, must past through specific point,etc)
美好的一天。
我在 MatLab 中绘制了散点图。我也想在绘图上绘制数据趋势线。但是我想在 x=0 时用斜率=0 来约束趋势线,而不是正常的二次曲线拟合。我怎样才能做到这一点?
出于好奇,如何限制趋势线必须通过特定点?就像在 excel?
中设置拦截一样
趋势线可以像我上面描述的那样有多个约束吗?
谢谢。
您想对您的数据拟合二次方程 a*x^2+b*x+c
,但您希望导数在某处为零。这是一个将变量关联起来的额外约束。导数是 2*a*x+b
所以要在 x=0
处为 0,你需要 b=0
。因此,您现在正在尝试使 a*x^2+c
适合您的数据。这个不算太难,
A=[x(:).^2 ones(size(x(:)))];
coeffs=A\y(:);
fittedY=@(x) coeffs(1)*x.^2+coeffs(2)
而fittedY(x)
给出拟合曲线在x
处的值。
如果你想让你的拟合有一个特定的值,而不是某个地方的某个导数,你做类似的事情。假设您希望 x=1
处的拟合值等于 1。然后a+b+c=1
,所以设置c=1-b-a
,你拟合的函数就是a*x^2+b*x+1-b-a
.
您最多可以使用三个这样的约束,但是使用 3 个约束将(通常)唯一地确定一个二次函数,因此将没有剩余的参数可以适应。
美好的一天。
我在 MatLab 中绘制了散点图。我也想在绘图上绘制数据趋势线。但是我想在 x=0 时用斜率=0 来约束趋势线,而不是正常的二次曲线拟合。我怎样才能做到这一点?
出于好奇,如何限制趋势线必须通过特定点?就像在 excel?
中设置拦截一样趋势线可以像我上面描述的那样有多个约束吗?
谢谢。
您想对您的数据拟合二次方程 a*x^2+b*x+c
,但您希望导数在某处为零。这是一个将变量关联起来的额外约束。导数是 2*a*x+b
所以要在 x=0
处为 0,你需要 b=0
。因此,您现在正在尝试使 a*x^2+c
适合您的数据。这个不算太难,
A=[x(:).^2 ones(size(x(:)))];
coeffs=A\y(:);
fittedY=@(x) coeffs(1)*x.^2+coeffs(2)
而fittedY(x)
给出拟合曲线在x
处的值。
如果你想让你的拟合有一个特定的值,而不是某个地方的某个导数,你做类似的事情。假设您希望 x=1
处的拟合值等于 1。然后a+b+c=1
,所以设置c=1-b-a
,你拟合的函数就是a*x^2+b*x+1-b-a
.
您最多可以使用三个这样的约束,但是使用 3 个约束将(通常)唯一地确定一个二次函数,因此将没有剩余的参数可以适应。