《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 303|回复: 5
收起左侧

[提问] 调用遗传算法ga函数优化求解超定方程组

[复制链接]
发表于 2018-9-18 20:22:57 | 显示全部楼层 |阅读模式
20贝壳
T*C=F,T是8*2矩阵,C是2*1矩阵,F是8*1矩阵,其中T和F已知,C未知T*(1e-6)*C=F*(1e-6)
令T*1e-6=T1
  1. T1=[2.39E-12        1.50E-11
  2. -1.72E-11        3.21E-12
  3. 1.36E-12        -1.87E-11
  4. -1.47E-11        -1.46E-12
  5. -6.44E-12        2.54E-11
  6. 7.14E-12        1.79E-12
  7. 2.84E-12        -2.18E-11
  8. 1.38E-11        -1.26E-12
  9. -2.83E-13        5.75E-12
  10. 5.90E-12        -8.28E-13
  11. 1.48E-13        -5.61E-12
  12. 5.06E-12        -1.45E-12
  13. ];
  14. F=[0
  15. 0
  16. 0
  17. 0
  18. 0
  19. 0
  20. 0
  21. 0
  22. 0
  23. 63018.6
  24. 0
  25. 63018.6
  26. ];
复制代码

C=[a/(1-b^2);a*b/(1-b^2)];
用遗传算法ga函数计算得到a=270.35;b=-0.998
现在换一种思路,T不乘1e-6,直接T*C=F*1e-6
  1. T=[2.39E-06        1.50E-05
  2. -1.72E-05        3.21E-06
  3. 1.36E-06        -1.87E-05
  4. -1.47E-05        -1.46E-06
  5. -6.44E-06        2.54E-05
  6. 7.14E-06        1.79E-06
  7. 2.84E-06        -2.18E-05
  8. 1.38E-05        -1.26E-06
  9. -2.83E-07        5.75E-06
  10. 5.90E-06        -8.28E-07
  11. 1.48E-07        -5.61E-06
  12. 5.06E-06        -1.45E-06
  13. ];
  14. F=[0
  15. 0
  16. 0
  17. 0
  18. 0
  19. 0
  20. 0
  21. 0
  22. 0
  23. 63018.6
  24. 0
  25. 63018.6
  26. ];
复制代码

那么计算得到的结果,应该是a变为原来的1e6倍,但是实际计算结果:a=-41.52,b=1.083
两次计算结果相差不大,分析原因,第一次计算结果代入C中,
  1. T1*C=[-7.3345E-07
  2. -1.1902E-06
  3. 1.1690E-06
  4. -7.7199E-07
  5. -1.8523E-06
  6. 3.1227E-07
  7. 1.4325E-06
  8. 8.7833E-07
  9. -3.5061E-07
  10. 3.9222E-07
  11. 3.3490E-07
  12. 3.7933E-07
  13. ]
复制代码

第二次计算结果带入C中,
  1. T*C=[-3.3178E-03
  2. -4.9507E-03
  3. 5.1821E-03
  4. -3.1387E-03
  5. -8.1231E-03
  6. 1.2451E-03
  7. 6.3261E-03
  8. 3.6309E-03
  9. -1.5568E-03
  10. 1.6268E-03
  11. 1.4895E-03
  12. 1.5866E-03
  13. ]
复制代码

两次计算,优化算法本身目标是让T*C-F的值无限趋近于0,一次为1e-3,一次为1e-7,只是精度不一样导致结果差了1e6倍,有什么方法可以纠正吗,用options.FitnessLimit限制,但是并不管用,请教大家,谢谢

 楼主| 发表于 2018-9-19 08:49:01 | 显示全部楼层
不知道为什么上面的T乱码了,就是T1乘以1e6倍
回复

使用道具 举报

发表于 2018-9-19 08:49:52 | 显示全部楼层
这样的方程组,用左除不就好了么
回复

使用道具 举报

 楼主| 发表于 2018-9-19 13:42:44 | 显示全部楼层
安东尼先生 发表于 2018-9-19 08:49
这样的方程组,用左除不就好了么

如果未知矩阵C是单纯的两个未知量,可以直接用左除,但是C是由两个未知量a,b组成的分式,C=[a/(1-b^2);a*b/(1-b^2)],左除不能解非线性超定方程组
回复

使用道具 举报

发表于 2018-9-20 08:42:18 | 显示全部楼层
夹柠檬0 发表于 2018-9-19 13:42
如果未知矩阵C是单纯的两个未知量,可以直接用左除,但是C是由两个未知量a,b组成的分式,C=[a/(1-b^2);a* ...

左除得到两个值,用这两个值解a和b的两个方程有何不可呢
回复

使用道具 举报

 楼主| 发表于 2018-9-20 09:53:32 | 显示全部楼层
谢谢您的回答,您说的方法可以实施,但是您的这种方法是最小二乘法,只能得到局部最优解,我最开始用的就是这种方法,得到的结果很不理想,于是换作遗传算法,可以得到全局最优解,但是眼前这个问题我无法解决,想请大家帮帮忙
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号 

GMT+8, 2019-8-21 23:46 , Processed in 0.077413 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表