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

[已解决] 如何利用matlab求解带有变参数的非线性方程组

[复制链接]

新手

12 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
Fax Faz Fbx Fbz Fcx Fcz Fdx Fdz Fox Foz mz是未知变量,a b c f Fs l1 l2 l5 l7 是已知量,一共十一个未知数,十一个方程,想要Fax Faz用已知量表示出来,结果却显示无解。












  1. eq1=Fcx+Fdx+Fs*cos(b)==0;
  2. eq2=Fcz+Fdz-mz+Fs*sin(b)==0;
  3. eq3=-mz*l7+Fcz*2*l2*cos(a)-l5*sin(c-a+b)+l2*sin(b-a)==0;
  4. eq4=Fax+Fcx+Fox==0;
  5. eq5=Faz+Fcz+Foz==0;
  6. eq6=Fax*l1*sin(a)+Faz*l1*cos(a)-Fcx*l2*sin(a)-Fcz*l2*cos(a)==0;
  7. eq7=Fbx+Fdx-Fox-Fs*cos(b)==0;
  8. eq8=Fbz+Fdz-Foz-Fs*sin(b)==0;
  9. eq9=Fbx*l1*sin(a)-Fdx*l2*sin(a)-Fbz*l1*cos(a)+Fdz*l2*cos(a)-l5*sin(c+b-a)==0;
  10. eq10=Fbx-f*Fbz==0;
  11. eq11=Fcx-f*Fcz==0;
  12. solve(eq1,eq2,eq3,eq4,eq5,eq6,eq7,eq8,eq9,eq10,eq11,Faz,Fbz)
复制代码











































最后的结果是
  1. ans =

  2.   包含以下字段的 struct:

  3.     Faz: [0×1 sym]
  4.     Fbz: [0×1 sym]
复制代码
求大神帮忙解答~~~

论坛优秀回答者

专家

2690 麦片

财富积分


20003000


4

主题

5060

帖子

598

最佳答案
  • 关注者: 670
发表于 2018-4-16 11:39:18 | 显示全部楼层 |此回复为最佳答案
请先整理成线性方程的形式,
A*[Fax Faz Fbx Fbz Fcx Fcz Fdx Fdz Fox Foz mz]'=B
的形式
A和B用已知量表示

新手

12 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
 楼主| 发表于 2018-4-16 12:35:49 | 显示全部楼层
halleyhit 发表于 2018-4-16 11:39
请先整理成线性方程的形式,
A*[Fax Faz Fbx Fbz Fcx Fcz Fdx Fdz Fox Foz mz]'=B
的形式

已经整理成线性方程组的形式,请问程序改如何编写呢?

论坛优秀回答者

专家

2690 麦片

财富积分


20003000


4

主题

5060

帖子

598

最佳答案
  • 关注者: 670
发表于 2018-4-16 14:00:18 | 显示全部楼层
zov 发表于 2018-4-16 12:35
已经整理成线性方程组的形式,请问程序改如何编写呢?

既然A*[Fax Faz Fbx Fbz Fcx Fcz Fdx Fdz Fox Foz mz]'=B
那么inv(A)*B就行了呀~

新手

12 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
 楼主| 发表于 2018-4-16 14:12:13 | 显示全部楼层
本帖最后由 zov 于 2018-4-16 14:14 编辑
halleyhit 发表于 2018-4-16 14:00
既然A*[Fax Faz Fbx Fbz Fcx Fcz Fdx Fdz Fox Foz mz]'=B
那么inv(A)*B就行了呀~

可以帮我看下吗,程序怎么都不对
下面是已知的程序
  1. syms Fax Faz Fbx Fbz Fcx Fcz Fdx Fdz Fox Foz mz a b c f Fs l1 l2 l5 l7
  2. A1=[0 0 0 0 1 0 1 0 0 0 0;0 0 0 0 0 1 0 1 0 0 -1;0 0 0 0 0 2*l2*cos(a) 0 0 0 0 -l7];
  3. X=[Fax;Faz;Fbx;Fbz;Fcx;Fcz;Fdx;Fdz;Fox;Foz;mz];
  4. B1=[-cos(b);-sin(b);l5*sin(c+b-a)-l2*sin(b-a)];
  5. A4=[0 0 1 -f 0 0 0 0 0 0 0;0 0 0 0 1 -f 0 0 0 0 0];
  6. B3=[cos(b);sin(b);l5*sin(b+c-a)];
  7. A2=[1 0 0 0 1 0 0 0 2 0 0;0 1 0 0 0 1 0 0 0 1 0;l1*sin(a) l1*cos(a) 0 0 -l2*sin(a) -l2*cos(a) 0 0 0 0 0];
  8. A3=[0 0 1 0 0 0 1 0 -1 0 0;0 0 0 1 0 0 0 1 0 -1 0;0 0 l1*sin(a) -l1*cos(a) 0 0 -l2*sin(a) l2*cos(a) 0 0 0];
  9. A1*X=B1*Fs;
  10. A2*X=0;
  11. A3*X=B3*Fs;
  12. A4*X=0;
复制代码

论坛优秀回答者

专家

2690 麦片

财富积分


20003000


4

主题

5060

帖子

598

最佳答案
  • 关注者: 670
发表于 2018-4-16 14:32:29 | 显示全部楼层
zov 发表于 2018-4-16 14:12
可以帮我看下吗,程序怎么都不对
下面是已知的程序
  1. syms a b c d
  2. A=[a b;c d]
  3. B=[1;2]
  4. X=inv(A)*B
  5. F1=X(1)
  6. F2=X(2)
复制代码

大概写成这个样子

新手

12 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
 楼主| 发表于 2018-4-16 14:41:21 | 显示全部楼层
halleyhit 发表于 2018-4-16 14:32
大概写成这个样子

inv(A)*B这一步已经提示错误了
  1. inv(A)*B
  2. 错误使用 symengine
  3. The dimensions do not match.

  4. 出错 sym/privBinaryOp (line 946)
  5.             Csym = mupadmex(op,args{1}.s, args{2}.s, varargin{:});

  6. 出错  *  (line 273)
  7.         X = privBinaryOp(A, B, 'symobj::mtimes');
复制代码

论坛优秀回答者

专家

2690 麦片

财富积分


20003000


4

主题

5060

帖子

598

最佳答案
  • 关注者: 670
发表于 2018-4-16 14:45:26 | 显示全部楼层
zov 发表于 2018-4-16 14:41
inv(A)*B这一步已经提示错误了

首先,抛开你的软件,确定你正确的把方程整理成了A*X=B的形式

新手

12 麦片

财富积分


050


2

主题

6

帖子

0

最佳答案
 楼主| 发表于 2018-4-16 14:58:23 | 显示全部楼层
程序已经写成A*X=B的形式了
  1. A=[0 0 0 0 1 0 1 0 0 0 0;0 0 0 0 0 1 0 1 0 0 -1;0 0 0 0 0 2*l2*cos(a) 0 0 0 0 -l7;
  2.       1 0 0 0 1 0 0 0 2 0 0;0 1 0 0 0 1 0 0 0 1 0;l1*sin(a) l1*cos(a) 0 0 -l2*sin(a) -l2*cos(a) 0 0 0 0 0;
  3.       0 0 1 0 0 0 1 0 -1 0 0;0 0 0 1 0 0 0 1 0 -1 0;0 0 l1*sin(a) -l1*cos(a) 0 0 -l2*sin(a) l2*cos(a) 0 0 0;
  4.       0 0 1 -f 0 0 0 0 0 0 0;0 0 0 0 1 -f 0 0 0 0 0]


  5. B =

  6.                            -cos(b)
  7.                            -sin(b)
  8. l5*sin(b - a + c) + l2*sin(a - b)
  9.                                  0
  10.                                  0
  11.                                  0
  12.                             cos(b)
  13.                             sin(b)
  14.                  l5*sin(b - a + c)
  15.                                  0
  16.                                  0
  17.                                  0
  18. X=[Fax;Faz;Fbx;Fbz;Fcx;Fcz;Fdx;Fdz;Fox;Foz;mz];
复制代码

论坛优秀回答者

专家

2690 麦片

财富积分


20003000


4

主题

5060

帖子

598

最佳答案
  • 关注者: 670
发表于 2018-4-16 17:47:58 | 显示全部楼层
zov 发表于 2018-4-16 14:58
程序已经写成A*X=B的形式了

1.你忘了回复此楼
2.我在6已经贴了代码了,你按照那个改就是了
3.你这楼的代码,为啥断成这样。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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