找回密码
 注册
Simdroid-非首页
查看: 92|回复: 8

关于matlab求解多元超越方程组的讨论

[复制链接]
发表于 2013-2-1 10:18:30 | 显示全部楼层 |阅读模式 来自 陕西西安
最近在研究一个问题时遇到了一个方程组,经过几天努力,虽然没解出来,但有些心得。论坛里帖子看了许久,没发现类似的。这里贴出来跟大家讨论下。
问题描述
一个4*4的转换矩阵,有8个未知数。
T06=
[k*cos(b)*cos(e),     k*cos(a)*sin(e)+k*cos(e)*sin(a)*sin(b),       k*sin(a)*sin(e)-k*cos(a)*cos(e)*sin(b),       m + bb*k*sin(e) + aa*k*cos(e)]
[-k*cos(b)*sin(e),      k*cos(a)*cos(e)-k*sin(a)*sin(b)*sin(e),       k*cos(e)*sin(a)+k*cos(a)*sin(b)*sin(e),       n - aa*k*sin(e) + bb*k*cos(e)]
[          0,          0,               0,                             0]
[      0,            0,                 0,                             1]

为求解这八个未知数,我找了4组点,有下列关系
T06*(x10,y10,z10,1)=(x16,y16,z16)
T06*(x20,y20,z20,1)=(x26,y26,z26)
T06*(x30,y30,z30,1)=(x36,y36,z36)
T06*(x40,y40,z40,1)=(x46,y46,z46)

这个其实就是八个方程。


 楼主| 发表于 2013-2-1 10:22:24 | 显示全部楼层 来自 陕西西安
Simdroid开发平台
本帖最后由 qizc061076 于 2013-2-1 10:22 编辑

解法1,solve。
程序
clear
clc
syms a b aa bb k e m n ;

E1='m+bb*k*sin(e)+aa*k*cos(e)=3277/100'
E2='n-aa*k*sin(e)+bb*k*cos(e)=264/5'
E3='m+bb*k*sin(e)+2*k*cos(b)*cos(e)+aa*k*cos(e)=231/5'
E4='n-aa*k*sin(e)-2*k*cos(b)*sin(e)+bb*k*cos(e)=2637/50'
E5='m+bb*k*sin(e)+2*k*cos(a)*sin(e)+aa*k*cos(e)+2*k*cos(e)*sin(a)*sin(b)=3253/100'
E6='n-aa*k*sin(e)+2*k*cos(a)*cos(e)+bb*k*cos(e)-2*k*sin(a)*sin(b)*sin(e)=1019/25'
E7='m+bb*k*sin(e)-2*k*cos(b)*cos(e)+aa*k*cos(e)=1899/100'
E8='n-aa*k*sin(e)+2*k*cos(b)*sin(e)+bb*k*cos(e)=211/4'
J=solve(E1,E2,E3,E4,E5,E6,E7,E8,a,b,aa,bb,k,e,m,n)

运行结果:没有解析解。这个必然解不出,太复杂了。
回复 不支持

使用道具 举报

 楼主| 发表于 2013-2-1 10:42:23 | 显示全部楼层 来自 陕西西安
解法2,fsolve。
首先定义函数文件
function F=Fcz(x)
a=x(1);b=x(2);aa=x(3); bb= x(4); k=x(5);e= x(6); m=x(7);n=x(8);
F=[m+bb*k*sin(e) + aa*k*cos(e)-3277/100, n-aa*k*sin(e)+bb*k*cos(e)-264/5, m+bb*k*sin(e)+2*k*cos(b)*cos(e) + aa*k*cos(e) - 231/5,    n - aa*k*sin(e) - 2*k*cos(b)*sin(e) + bb*k*cos(e) - 2637/50,     m + bb*k*sin(e) + 2*k*cos(a)*sin(e) + aa*k*cos(e) + 2*k*cos(e)*sin(a)*sin(b) - 3253/100,     n - aa*k*sin(e) + 2*k*cos(a)*cos(e) + bb*k*cos(e) - 2*k*sin(a)*sin(b)*sin(e) - 1019/25,     m + bb*k*sin(e) - 2*k*cos(b)*cos(e) + aa*k*cos(e) - 1899/100,    n - aa*k*sin(e) + 2*k*cos(b)*sin(e) + bb*k*cos(e) - 211/4
    ]
end
然后主程序求解
zhongjiex(8)=0       %赋初值
[x,fval]=fsolve(@Fcz,zhongjiex);

求解结果:根据赋初值的不同得到结果不同,但结果都不对
一般结果状态提示,too many function evaluation or iterations.
回复 不支持

使用道具 举报

 楼主| 发表于 2013-2-1 10:49:54 | 显示全部楼层 来自 陕西西安
本帖最后由 qizc061076 于 2013-2-1 11:22 编辑

解法3,遗传算法
考虑到该方程组可能没有精确解,仅存在接近解,所以用优化算法。
将方程组求解问题化成四个函数的绝对值之和的最小值问题。






















结果:这个精度设置一高的话,就会Error using bin2dec at36 ,Binary string must be 52 bits or less。染色体转换十进制的时候就溢出了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

 楼主| 发表于 2013-2-1 10:55:17 | 显示全部楼层 来自 陕西西安
解法4,模拟退火算法
这个真心算不出来,不收敛的样子。迭代多少次也没用,最好的结果也是优化的目标函数30多。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

 楼主| 发表于 2013-2-1 11:11:54 | 显示全部楼层 来自 陕西西安
有没有做过类似工作的,请指点下,还可以怎么解这个方程?
回复 不支持

使用道具 举报

发表于 2013-2-3 19:28:13 | 显示全部楼层 来自 北京
可以试下1stOpt

  1. Function
  2. m+bb*k*sin(e) + aa*k*cos(e)-3277/100;
  3. n-aa*k*sin(e)+bb*k*cos(e)-264/5;
  4. m+bb*k*sin(e)+2*k*cos(b)*cos(e) + aa*k*cos(e) - 231/5;
  5. n - aa*k*sin(e) - 2*k*cos(b)*sin(e) + bb*k*cos(e) - 2637/50;
  6. m + bb*k*sin(e) + 2*k*cos(a)*sin(e) + aa*k*cos(e) + 2*k*cos(e)*sin(a)*sin(b) - 3253/100;
  7. n - aa*k*sin(e) + 2*k*cos(a)*cos(e) + bb*k*cos(e) - 2*k*sin(a)*sin(b)*sin(e) - 1019/25;
  8. m + bb*k*sin(e) - 2*k*cos(b)*cos(e) + aa*k*cos(e) - 1899/100;
  9. n - aa*k*sin(e) + 2*k*cos(b)*sin(e) + bb*k*cos(e) - 211/4;
复制代码
目标函数值(最小): 0.022433333333332
m: -16.1264616946215
bb: 1.19809382795766
k: -6.8036717299729
e: -9.42441044849287
aa: 7.16918812395558
n: 44.629822853043
b: -6.26462955783997
a: 22.481590056388

结果有多组(目标函数一样)。1stOpt都是如此估计应该是没有精确解了。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2013-3-5 16:12:16 | 显示全部楼层 来自 陕西西安
shamohu 发表于 2013-2-3 19:28
可以试下1stOpt目标函数值(最小): 0.022433333333332
m: -16.1264616946215
bb: 1.19809382795766

多谢。我去下软件试试。
回复 不支持

使用道具 举报

 楼主| 发表于 2013-3-5 17:16:20 | 显示全部楼层 来自 陕西西安
shamohu 发表于 2013-2-3 19:28
可以试下1stOpt目标函数值(最小): 0.022433333333332
m: -16.1264616946215
bb: 1.19809382795766

我用1stopt算结果跟你的不大一样,你用什么优化算法?
回复 不支持

使用道具 举报

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

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-7-1 14:37 , Processed in 0.040097 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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