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

求教:定义一个字母代表一个矩阵

[复制链接]
发表于 2011-3-31 17:42:13 | 显示全部楼层 |阅读模式 来自 江苏南京
比如[a,b;c;d]*[x1;x2]=[f1;f2],我要得到x1=……*f1+……*f2。
其中的a,b,c……,所有的符号都是代表矩阵的,然后让matlab计算,求得x1,x2的表达式。
    就要定义a,b,c……是矩阵,让matlab按照矩阵的运算规则求解。如果直接定义a是符号,那计算就直接按照代数的法则了,最后出来的结果不对。
   应该怎么实现呢????谢谢啦
发表于 2011-3-31 18:00:00 | 显示全部楼层 来自 陕西西安
Simdroid开发平台
1# zselery
你这样表示的方程的话,a b c d应该代表的都是数字,不是矩阵。
至于你说a定义为符号,不能解。
其实可以解啊
  1. syms f1 f2 a b c d
  2. A=[a b;c d];
  3. B=[f1;f2];
  4. inv(A)*B
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2011-3-31 21:03:45 | 显示全部楼层 来自 江苏南京
2# mhkmars

2楼所说的我知道,这样出来的结果就是代数运算的。
  而我要的是a,b,c,d等都被定义为矩阵,然后同样用inv(A)*B。来求解x1,x2。谢谢了
回复 不支持

使用道具 举报

发表于 2011-3-31 21:21:34 | 显示全部楼层 来自 陕西西安
3# zselery
不解,如果a,b,c,d为矩阵而来,x1,x2又为什么呢?矩阵,还是一个数?
回复 不支持

使用道具 举报

 楼主| 发表于 2011-3-31 21:24:37 | 显示全部楼层 来自 江苏南京
下面这个程序,能更好的表达我的意思。
矩阵A,B中的元素A1,A2都是2*2矩阵,但我要的inv(A)*B的结果只包含A1,A2,等,就是事先要定义A1,A2是个矩阵,让MATLAB按照矩阵的法则运算。怎么实现?

clear all
syms a b c d f1 f2
A1=[a b;c d];A2=[b c;a d];A3=[a d;c b];A4=[d c;b a];
F1=[f1 ;f2];F2=[f2 ;f1];
A=[A1 A2;A3 A4];
B=[F1;F2];
inv(A)*B
回复 不支持

使用道具 举报

 楼主| 发表于 2011-3-31 21:35:43 | 显示全部楼层 来自 江苏南京
http://bbs.simwe.com/viewthread. ... hlight=%BE%D8%D5%F3
如果解这样的矩阵方程组
方程, 矩阵
Ax+By=U, Cx+Dy=V,
A,B,C,D,U,V 都是n×n的已知矩阵,x,y为n×1的数组,如何求解x,y?
%%%%%%%%%%%%%%%%%

而我的是Ax+By+Cz+Di=U……四个未知量,四个方程。而且其中的系数都是n*n的矩阵,但并不赋值,只是矩阵,怎么求x,y,c,i。注意都是符号,绝对不是数字。

是不是事先要定义A等是矩阵呢??
回复 不支持

使用道具 举报

 楼主| 发表于 2011-3-31 21:39:24 | 显示全部楼层 来自 江苏南京
3# zselery  
不解,如果a,b,c,d为矩阵而来,x1,x2又为什么呢?矩阵,还是一个数?
mhkmars 发表于 2011-3-31 21:21

x1,x2也是矩阵。哈哈
回复 不支持

使用道具 举报

发表于 2011-3-31 21:46:53 | 显示全部楼层 来自 英国
本帖最后由 nwcwww 于 2011-3-31 21:51 编辑

不知道楼主是不是这个意思:

a1=sym('a1',[2 2]);a2=sym('a2',[2 2]);a3=sym('a3',[2 3]);a4=sym('a4',[2 1]);
% 4个子矩阵

a=[a1 a2;a3 a4]
%a是4*4的矩阵
a =

[ a11_1, a11_2, a21_1, a21_2]
[ a12_1, a12_2, a22_1, a22_2]
[ a31_1, a31_2, a31_3,   a41]
[ a32_1, a32_2, a32_3,   a42]

inv(a)
%求逆,但是symbolic的结果相当恐怖, 不贴了。。。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-3-31 22:15:06 | 显示全部楼层 来自 江苏南京
8# nwcwww
我就是想声明a1……是矩阵,按照矩阵的法则运算就可以了……
回复 不支持

使用道具 举报

发表于 2011-3-31 22:20:58 | 显示全部楼层 来自 英国
a1=sym('a1',[m n]);

这样a1就是一个m*n的symbolic matrix。
回复 不支持

使用道具 举报

发表于 2011-3-31 22:44:24 | 显示全部楼层 来自 陕西西安
5# zselery
其实你这个程序跟我那个是一个意思,想法都是一样的。nwcwww中也提到,如果全用符号运算的话,计算成本很大。
我给的建议可以这样,你的A1最后用subs来赋值。
Ps:matlab是个工具,程序什么都有一定的应用的方法,如果硬是按照自己的想法去实现,就算能出结果,也可能得不偿失,最好的就是顺着软件的思路走,个人见解,嘿嘿
回复 不支持

使用道具 举报

 楼主| 发表于 2011-4-1 07:12:47 | 显示全部楼层 来自 江苏南京
直接在命令窗口里面运行  a1=sym('a1',[2 2]);  提示下面的是什么意思啊?
我的版本是2007b。

??? Error using ==> error
Formatted arguments cannot be non-scalar numeric matrices.

Error in ==> sym.sym at 106
         error('symbolic:sym:sym:errmsg4','Second argument %s not recognized.',a);
回复 不支持

使用道具 举报

发表于 2011-4-1 07:50:11 | 显示全部楼层 来自 陕西西安
12# zselery
这样操作时想一次定义多个符号变量,你可以先搜索num2str,sym等关键词。至于你出现的问题,可能是版本问题。今天还有课,中午回来再交流

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2011-4-1 18:03:33 | 显示全部楼层 来自 陕西西安
5# zselery
不知道你的问题解决了没,可否把你的解决方法之类的给大家共享一下,\(^o^)/~
回复 不支持

使用道具 举报

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

本版积分规则

Simapps系列直播

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

GMT+8, 2024-10-4 23:29 , Processed in 0.063757 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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