我离开Mathematica已经有一段时间了,我正在尝试修复v4中不再在v11下工作的某些旧笔记本。我也有点生锈。
我正在尝试使用函数最小化,以根据给定的起始猜测(ao)和关注域(d)将可变程度的多项式拟合到任意函数(F)。请注意,尽管F是任意的,但其性质使得F和多项式(或F ^ 2)的乘积的积分始终可以用代数方式求值。为了举例,我将使用以下输入:
ao = { 1, 2, 3, 4 }
d = { -1, 1 }
F = Sin[x]
为此,我创建了一个“索引”变量数组
polyCoeff = Array[a,Length[a],0]
结果:polycoeff = {a [0],a [1],a [2],a [3]}
然后我使用以下代码创建多项式本身
genPoly[{},x_] := 0
genPoly[a_List,x_] := First[a] + x genPoly[Rest[a],x]
poly = genPoly[polyCoeff,x]
结果:poly = a [0] + x(a [1] + x(a [2] + x a [3]))
然后,我将目标函数定义为此poly和我尝试拟合的函数之间的差的平方的整数:
Q = Integrate[ (poly - F[x])^2, {x, d[[1]],d[[2]]} ]
结果:Q = 0.545351-2. a [0。] ^ 2 + 0.66667 a [1。] ^ 2 + .....
这就是问题所在。 poly看起来像我期望的那样:x中的多项式,其系数看起来像a [0],a [1],a [2],...但是Q并不是我所期望的。我期望并得到了一个新的多项式。但系数不包含a [0。],a [1。],a [2。],...
下一步是为FindMinimum创建初始猜测
init = Transpose[{polyCoeff,ao}]
结果:{{a [0],1},{a [1],2},{a [3],3},{a [4],4}}
这看起来不错。
但是当我调用FindMinimum时,由于在目标(a [0。],a [1。],...)中传递的系数与在初始猜测中传递的系数不匹配( a [0],a [1],...)。
S = FindMinimum[Q,init]
所以我思考,我的问题是如何使Integrate避免将参数更改为系数?但是,我也对其他方法持开放态度。请记住,尽管这是“遗留”工作,但我真的不想完全进行修改。
非常感谢您提供所有帮助。