【发布时间】:2017-01-30 21:22:42
【问题描述】:
我想将由n 维向量data(值在-1 和1 之间,对应的x 值linspace(0,9,n))给出的数据集拟合到由下式给出的参数曲线
x = cos(t)/sqrt(1-(a/b)^2)
y = b*sin(t)-a
对于a < b 和0 < t < pi。这条曲线是椭圆的上半部分,它已降低到 x 轴下方a,并在 -1 和 1 处与 x 轴相交。我正在拟合参数 a,b。
在y(x)的形式上写这个函数似乎是不可能的(编辑:不是这样,见 cmets - 但是,我仍然想知道以下问题的答案:)... Matlab中的拟合可以从参数形式完成吗?怎么样?
谢谢。
【问题讨论】:
-
你不能把你的函数写成
y = @(x,a,b)b*sin(acos(x*sqrt(1 - (a/b)^2))) - a。而且由于它可以写成这种形式,您可以使用fitnlm来适应? -
@SomeGuy 嗯,这可能会起作用,但我担心会发生一些奇怪的事情,这是由三角函数中的主要值混乱引起的。此外,关于间隔的信息
t以这种方式丢失了.. 但感谢您的建议(如果您发现它确实有效,我很乐意接受该实现作为答案)! -
@SomeGuy 我认为它有效...表达式简化为
y = b*sqrt(1-x^2*(1-(a/b)^2))-a,这似乎有效。再次感谢。但是,我认为参数拟合是否可能的问题本身仍然很有趣,所以我暂时不讨论。
标签: matlab data-fitting