一个优化问题
问题是:有一个AX=b的线性方程组,X是n*1的未知数矩阵,A是n*n的系数矩阵,b是n*1的数矩阵。A系数矩阵中有m个参数,这些参数有确定的取值范围,所以,可以说这个方程组为符号方程组。
现在是,比如给定一组m个参数,然后解AX=b方程,得到一组X值,然后用这组X值求一个关系式F(X),使得F(X)最小。求得这时的m个参数、X值、F(X)。
不知道我说明白了没有。希望大家给我一个建议,谢谢! 问题本身挺清楚,不过你自己有什么问题好像不太清楚哦:@) 请直接将问题及你的处理贴出来,以便他人给出建议. 大概属于有约束优化问题 不知道该怎么说,因为源程序很长。
我用一个小例子吧,A=,X=,b=,
其中,参数a,b,c,有一定范围,0<a<1,1<b<2,2<c<3,
当给定一组:a=0.5,b=1.5,c=2.5,这时,解方程组AX=b(方程组直接用X=A\b解就行,这个我会),然后得到一组X的解,用这组X求的一个F(X),反复取abc直到F(X)最小。
我的问题是,不知道该怎么实现反复在abc的取值范围内达到F(X)最小。就是,我不能每次自己输进去一个abc,然后看看F(X)是多少,再输进一次abc,看看F(X)是多少,再比较一下这两次的F(X),哪个最小。把abc的组合输遍,找到最小的F(X)。我想让大家帮我实现这个。
不知道这次说清楚了么有。 通过线性方程组先将x、y、z的解析解求出来(包含a、b、c),再代入F(X),然后用一般的优化方法求F(X)的最小值不行吗? 好像没那么复杂,随便找本线性规划书看看。
我是差不多忘干净了 谢谢各位
我用了一个三重循环,设一定步长,取遍所有的abc组合,找到最小的F(X)。 matlab里面不建议用循环浪费了工具箱了建议试试fmincon 我也这么想的,这样做个循环计算起来很慢,比较无奈的方法
但是,还不知道用什么好
你说的我试试吧
谢谢 s=solve('2*a*x+y+z=0','x+b*y+c*z=0','c*y=1','x','y','z');
求出x、y、z的表达式代入f,求得f的解析表达式,再求极值不好吗? 带目标的优化问题,建议看看智能算法方面的书,比如蚁群算法,粒子群算法等
回复 #11 TurtleRock 的帖子
源程序里,如果将abc直接用符号方进去计算的话,构成的方程组就成非线性方程组了,因为,有abc的地方有ln、平方计算。
页:
[1]