Wolfram mathematica 积分改变变量下标

Wolfram mathematica 积分改变变量下标,wolfram-mathematica,Wolfram Mathematica,我离开Mathematica已经有一段时间了,我正在尝试修复一些v4版本的旧笔记本,它们在v11版本下不再工作。我也有点生疏了 我试图使用函数极小化,在给定起始猜测(ao)和感兴趣域(d)的情况下,将变次多项式拟合到任意函数(F)。注意,虽然F是任意的,但它的性质是,F与多项式(或F^2)的乘积的积分始终可以用代数方法计算 为了举例说明,我将使用以下输入: ao = { 1, 2, 3, 4 } d = { -1, 1 } F = Sin[x] 为此,我创建了一个“索引”变量数组 polyCo

我离开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]+xa[3]))

然后,我将目标函数定义为该多边形与我试图拟合的函数之间差的平方误差的积分:

Q = Integrate[ (poly - F[x])^2, {x, d[[1]],d[[2]]} ]
结果:Q=0.545351-2。a[0.]^2+0.66667 a[1.]^2+

这就是问题的症结所在。多边形看起来和我预期的一样:x中的多项式,其系数看起来像a[0]、a[1]、a[2]、。。。但是,Q并不是我所期望的。我期望得到一个新的多项式。但系数中不包含[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],…)不匹配

所以我想,我的问题是,如何保持积分不改变参数到系数?但是,我也对其他方法持开放态度。请记住,虽然这是“遗产”的工作,我真的不想有完全改造


非常感谢您的帮助。

请尝试。函数F的定义中是否有小数点?任何小数点都可能负责将整数转换为十进制近似值。如果您能提供尽可能最简单的完整代码,那么我可能能够重现您的问题或找出问题的根源;但我仍然不明白为什么这会修改作为参数传递给a系数的固定标量值。我猜一旦引入了浮点值,所有的数字都会被转换成浮点值,不管是否有必要这样做?啊。我的猜测可能是正确的。如果你想象加1/2和1/3,你可能会得到5/6。小数点告诉MMA 0.5大约是一半,用一个近似数字计算几乎任何结果,即使它包含其他精确数字,也会给出一个近似结果。所以如果删除计算中的所有近似值并重新启动MMA,然后重新进行计算,问题是否仍然存在?请尝试。函数F的定义中是否有小数点?任何小数点都可能负责将整数转换为十进制近似值。如果您能提供尽可能最简单的完整代码,那么我可能能够重现您的问题或找出问题的根源;但我仍然不明白为什么这会修改作为参数传递给a系数的固定标量值。我猜一旦引入了浮点值,所有的数字都会被转换成浮点值,不管是否有必要这样做?啊。我的猜测可能是正确的。如果你想象加1/2和1/3,你可能会得到5/6。小数点告诉MMA 0.5大约是一半,用一个近似数字计算几乎任何结果,即使它包含其他精确数字,也会给出一个近似结果。所以如果消除计算中的所有近似值并重新启动MMA,然后重新进行计算,问题是否仍然存在?
S = FindMinimum[Q,init]