求二次型极值的搜索算法

xiao_dang 2008-03-21 12:23:06
遇到了一个问题,经典算法似乎不能直接解决:
f(x)=(x-x0)'A(x-x0)是正定二次型,其中A已知,x0未知
但是对于任何给定的x,都能算出f(x)的值(因为在问题的理论上这个二次型等于另一个可计算的东东)。

现需要根据上述条件,求出x0的值。不知应当如何进行搜索,请高手指点!
...全文
362 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiao_dang 2008-03-21
  • 打赏
  • 举报
回复
谢谢2楼的回复!

我来说明一下:
你提的第一种方法当然没有问题,但是不是一种有效的算法,因为你并没有提出找到是的f(x)=0的x的具体方法。
第二种方法也是对的。但是我忘了补充一下:对于给定的x,计算出的f(x)是近似值,所以只用一次计算的方法误差会很大,我更希望有一种迭代(搜索)的算法。

还是要谢谢你的回答!
  • 打赏
  • 举报
回复
方法一:求近似解
注意到这是个(半)正定二次型,当且仅当x=x0时才会出现f(x)=0。
所以如果能找到当x在某个值附近时f(x)近似为0,那么x0的近似解也找到了。

方法二:解线性方程组
将x0视为自变量,将f(x)展开可以得到一个多元二次方程。
当x取不同值时,将x和f(x)的值代入,会得到若干个多元二次方程。
虽然这里每个方程都是二次的,但注意到每个方程中二次项的部分是完全相同的,所以两两相减,最终会得到一个线性方程组。
解线性方程组,最终可以得到x0.
  • 打赏
  • 举报
回复
关于方法二:
你提到了只计算一次误差会比较大,实际上我觉得这个问题不难解决。
你可以将线性方程组中的方程个数多列一些,然后用最小二乘法来求解,这样出来的解兼顾到了多次测试结果,应该还是比较准确的。

关于方法一:
大致想到的思路:对于x这个n维向量来说,在其它n-1维分量上的值暂时保持不变,只在其中一维上进行变化,类似牛顿法,找到这时的最小值。
当寻找到这个值以后,再换到其它分量上逐步试探...直到最后找出f(x)=0的近似值。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧