设(0,0)和(Xo,Yo)是笛卡尔平面上的两个点。我们想要确定抛物线曲线,Y = AX ^ 2 + BX + C,它从这两个点通过并且具有等于S的给定弧长。显然,S> 1。 sqrt(Xo ^ 2 + Yo ^ 2)。由于曲线必须从(0,0)传递,因此它应该是C = 0。因此,曲线方程简化为:Y = AX ^ 2 + BX。我怎样才能确定{A,B}知道{Xo,Yo,S}?有两个解决方案,我想要一个A> 0的解决方案。
我有一个解析解(复数)给出了一组{A,B,Xo,Yo}的S,虽然这里的问题是倒置的......我可以通过数值求解一个复杂的方程组来进行。 ..但也许有一个数字例程就是这样做的?
任何有用的Python库?其他想法?
非常感谢: - )
答案 0 :(得分:0)
请注意,二次a*x0^2 + b*x0
的弧长(线积分)由sqrt(1 + (2ax + b)^2)
从x = 0
到x = x0
的积分给出。在求解积分时,积分的值为0.5 * (I(u) - I(l)) / a
,其中u = 2ax0 + b
; l = b
;和I(t) = 0.5 * (t * sqrt(1 + t^2) + log(t + sqrt(1 + t^2))
,sqrt(1 + t^2)
的积分。
自y0 = a * x0^2 + b * x0
,b = y0/x0 - a*x0
以来。替换b
和u
,l
,u = y0/x0 + a*x0
中l = y0/x0 - a*x0
的值。在行积分(弧长)的解中替换u
和l
,我们得到弧长作为a
的函数:
s(a) = 0.5 * (I(y0/x0 + a*x0) - I(y0/x0 - a*x0)) / a
现在我们将弧长作为a
的函数,我们只需找到a
的{{1}}的值。这是我最喜欢的寻根算法Newton-Raphson method再次发挥作用的地方。
Newton-Raphson寻找根的方法的工作算法如下:
对于要获取其根的函数s(a) = S
,如果f(x)
是根的x(i)
猜测,
i
其中x(i+1) = x(i) - f(x(i)) / f'(x(i))
是f'(x)
的衍生物。这个过程一直持续到两个连续猜测之间的差异非常小。
在我们的案例中,f(x)
和f(a) = s(a) - S
。通过简单应用链规则和商规则,
f'(a) = s'(a)
s'(a) = 0.5 * (a*x0 * (I'(u) + I'(l)) + I(l) - I(u)) / (a^2)
。
剩下的唯一问题是计算好的初始猜测。由于the graph of s(a)
的性质,该函数是Newton-Raphson方法的优秀候选者,并且I'(t) = sqrt(1 + t^2)
的初始猜测在大约5-6次迭代中收敛到解决方案的容差/ epsilon y0 / x0
。
找到1e-10
的值后,a
只是b
。
将其写入代码:
y0/x0 - a*x0
Run the example on CodeSkulptor
请注意,由于作为示例中函数输入的弧长的有理逼近,所获得的系数可能与预期值略有不同。