MATLAB中文论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 239|回复: 9|关注: 0

[已解决] 求解带参数的矩阵

[复制链接]

新手

46 麦片

财富积分


050


1

主题

9

帖子

0

最佳答案
本帖最后由 MasterYinYin 于 2018-2-13 23:32 编辑

用MATLAB求两个坐标系之间转换的转换矩阵,转换矩阵ROP形式已知,如下图,是一个参数为三角函数的3*3矩阵。有两个未知参数B和L,
2.png
公式为NAQ=-ROP*A+ROP*Q; NAQ、A、Q都是已知的3*1矩阵,现在需要求解矩阵ROP(就是求解B和L的值)。
我尝试用solve试图将该公式看做方程,将B和L解出来,但输出提示“Empty sym: 0-by-1”,貌似解不出解析解来。
请问各位这种矩阵要怎么来求解?
我的代码如下:
  1. nAQt=[-2.5;-2;3.464];
  2. A=[1,2,3];
  3. Q=[5,2,5];
  4. syms B L;
  5. ROP=[-sin(B)*cos(L),-sin(B)*sin(L),cos(B),
  6.      -sin(L),cos(L),0,
  7.      cos(B)*cos(L),cos(B)*sin(L),sin(B)];
  8. Y=nAQt+ROP*A.'-ROP*Q.';
  9. s=solve(Y(1),Y(2),Y(3),'B','L');
  10. s.B
  11. s.L
复制代码


论坛优秀回答者

权威

6827 麦片

财富积分



5

主题

8174

帖子

1563

最佳答案
  • 关注者: 351
发表于 2018-2-14 09:39:06 | 显示全部楼层
这个可能真没解。经过ROP*A.'-ROP*Q.'计算后变成了
  1. 4*cos(L)*sin(B) - 2*cos(B)
  2.                      4*sin(L)
  3. - 2*sin(B) - 4*cos(B)*cos(L)
复制代码

就是说你这个矩阵要等于nAQt=[-2.5;-2;3.464]',矩阵这个相等,就是每个元素都要相等,这个能做到吗?

新手

46 麦片

财富积分


050


1

主题

9

帖子

0

最佳答案
 楼主| 发表于 2018-2-14 10:20:42 | 显示全部楼层
jingzhaos 发表于 2018-2-14 09:39
这个可能真没解。经过ROP*A.'-ROP*Q.'计算后变成了
就是说你这个矩阵要等于nAQt=[-2.5;-2;3.464]',矩阵这 ...

您好,就像您说的,我认为是我的方法问题,就是说这样求解保证不了矩阵完全相等,因为矩阵是三角函数,都是精确到小数点后很多位的,在实际工程中应用我想也不可能特别精确,所以我想请教有没有办法求出近似的数值解?我昨晚想了一下,是不是有可能做一个循环,因为三角函数是在-1~1内的,所以可以步进寻找使这个方程最近似0的那个值。因为完全等于0感觉是不可能的,测量条件也不允许。

论坛优秀回答者

权威

6827 麦片

财富积分



5

主题

8174

帖子

1563

最佳答案
  • 关注者: 351
发表于 2018-2-14 11:05:10 | 显示全部楼层
MasterYinYin 发表于 2018-2-14 10:20
您好,就像您说的,我认为是我的方法问题,就是说这样求解保证不了矩阵完全相等,因为矩阵是三角函数,都 ...

真正能使NAQ=-ROP*A+ROP*Q这个式子成立的ROP是ROP=nAQt*pinv(Q-A)

新手

46 麦片

财富积分


050


1

主题

9

帖子

0

最佳答案
 楼主| 发表于 2018-2-14 12:42:36 | 显示全部楼层
jingzhaos 发表于 2018-2-14 11:05
真正能使NAQ=-ROP*A+ROP*Q这个式子成立的ROP是ROP=nAQt*pinv(Q-A)

您好,我按照您说的验证了一下,发现并不是这样。
我假设了一个矩阵ROP,利用已知的A和Q的坐标正推得到了NAQ,
如图所示, IMG_20180214_123309.jpg
然后利用您说的代码
  1. nAQt=[-2;-2;3.464];
  2. A=[1;2;3];
  3. Q=[5;2;5];
  4. ROP=nAQt*pinv(Q-A)
复制代码
得到的ROP
ROP =

   -0.4000         0   -0.2000
   -0.4000         0   -0.2000
    0.6928         0    0.3464
这和我们假设的是不一样的。因为这里用到的是这个pinv函数,我并不清楚此函数具体的求解原理,所以也不清楚哪里的问题。

论坛优秀回答者

权威

6827 麦片

财富积分



5

主题

8174

帖子

1563

最佳答案
  • 关注者: 351
发表于 2018-2-14 12:54:07 | 显示全部楼层
本帖最后由 jingzhaos 于 2018-2-14 12:59 编辑
MasterYinYin 发表于 2018-2-14 12:42
您好,我按照您说的验证了一下,发现并不是这样。
我假设了一个矩阵ROP,利用已知的A和Q的坐标正推得到了 ...

没错,就是这个结果。这个结果也可以使你的式子成立,所以使式子成立的ROP不止一个。

新手

46 麦片

财富积分


050


1

主题

9

帖子

0

最佳答案
 楼主| 发表于 2018-2-14 13:04:07 | 显示全部楼层
jingzhaos 发表于 2018-2-14 12:54
没错,就是这个结果。这个结果也可以使你的式子成立,所以使式子成立的ROP不止一个。 ...

您好,这样做确实可以使得上述那个等式成立,我认为这样就是没有把ROP矩阵的内部形式当做条件来求解,所以就等价于有三个方程9个未知数,这样就有无穷多个解了,而pinv只是提供这无穷多个解中的一个,并没解决这个问题:L

论坛优秀回答者

权威

6827 麦片

财富积分



5

主题

8174

帖子

1563

最佳答案
  • 关注者: 351
发表于 2018-2-14 13:41:37 | 显示全部楼层
本帖最后由 jingzhaos 于 2018-2-14 13:43 编辑
MasterYinYin 发表于 2018-2-14 13:04
您好,这样做确实可以使得上述那个等式成立,我认为这样就是没有把ROP矩阵的内部形式当做条件来求解,所 ...

是有这样的问题。

乘过后再解,相当于三个方程求两个未知数,也求不出来。不知啥法能圆满解决

新手

46 麦片

财富积分


050


1

主题

9

帖子

0

最佳答案
 楼主| 发表于 2018-2-14 14:03:03 | 显示全部楼层
jingzhaos 发表于 2018-2-14 13:41
是有这样的问题。

乘过后再解,相当于三个方程求两个未知数,也求不出来。不知啥法能圆满解决 ...

您好,我刚刚基本解决这个问题了。我查阅了一下求解方程数值解的方法,发现求解非线性问题时基本都用fsolve函数。我修改代码如下:
首先定义函数:就是需要求解的矩阵方程,
  1. function F=myfun(x)
  2. ROP=[-sin(x(1))*cos(x(2)),-sin(x(1))*sin(x(2)),cos(x(1)),
  3.       -sin(x(2)),cos(x(2)),0,
  4.       cos(x(1))*cos(x(2)),cos(x(1))*sin(x(2)),sin(x(1))];
  5. nAQt=[-2;-2;3.464];
  6. A=[1;2;3];
  7. Q=[5;2;5];
  8. F=nAQt+ROP*A-ROP*Q;
  9. end
复制代码

对于fsolve函数来说,需要给他一个初值,然后他会从初值开始迭代知道找到使得方程等于0的点。
  1. x0=[1,1];
  2. [x,fval]=fsolve(@myfun,x0)
复制代码

我给的初值是x0=[1,1],x1就表示之前的B,x2表示之前的L。
这样可以解出来
x =

    1.0472    0.5236


fval =

   1.0e-04 *

    0.3520
    0.3520
   -0.6097
误差也是10e-4级的。

论坛优秀回答者

权威

6827 麦片

财富积分



5

主题

8174

帖子

1563

最佳答案
  • 关注者: 351
发表于 2018-2-14 17:12:36 | 显示全部楼层 |此回复为最佳答案
MasterYinYin 发表于 2018-2-14 14:03
您好,我刚刚基本解决这个问题了。我查阅了一下求解方程数值解的方法,发现求解非线性问题时基本都用fsol ...

竟然将fsolve给忘了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

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