关于MATLAB符号运算的问题

如何用Matlab解带参数的方程组?比如下面:1.2*x+y=4;2.x+y=3;但是如果系数阵里面的元素是由另外一个变量的来的,即a=[21];b=[11];这个时候我... 如何用Matlab解带参数的方程组?
比如下面:
1. 2*x+y=4;

2. x+y=3;

但是如果系数阵里面的元素是由另外一个变量的来的,即a=[2 1]; b=[1 1];
这个时候我尝试用solve求解:
eq1='a(1)*x+a(2)*y=4;

eq2='b(1)*x+b(2)*y=3;

syms x y;

[x y]=solve(eq1,eq2,x,y);
x y返回的值是不对的,有几个问题:
1. 如果在solve中指定变量x y(如上面一样)就得不到结果,如果不指定变量(删除solve中最后两项),就可以得出结果,这个区别在哪里?

2. 如果不指定变量会得到一个x y关于a b四个元素的表达式,这个时候为何用subs(x) subs(y)还是表达式的形式,而不是数值?并且用double(subs(x))会报错,但是用eval(x)就可以得到数值结果,请问MATLAB在操作表达式的时候将a(1)这样的元素当成了一个新变量的名字了吗?何时subs(x)可以得到实际的数值,何时需要double(sbus())?

还有关于MATLAB符号运算的书能不能推荐一本啊?
多谢!
展开
 我来答
tianxiawulang
推荐于2016-04-07 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2677万
展开全部

1、MATLAB的符号运算是借助于其它符号运算内核完成的,2008a之前是用Maple,2008b之后用MuPad,不同版本对符号运算的具体支持可能存在差别,例如,你说的第一个问题,我在6.5和2007b、2013a等几种版本下测试,用这两种写法都可以得到相同的结果:

[x y]=solve(eq1,eq2,x,y)
[x y]=solve(eq1,eq2)

所以,谈到符号运算的问题时,最好说明自己使用的版本,以便有针对性地解决。

 

至于说两种写法的区别,前面一种指定把哪个变量作为未知数,后一种写法由符号运算内核自动确定,对于x、y、a、b这样的四个变量而言,两种写法没有区别。

 

2、subseval这两个函数的最主要区别是,subs适用于结果中仍然存在符号量的情况,得到的结果一般是解析表达式,而eval则适用于结果是具体的数值的情况,不能再含有未知量。

 

就实际测试的结果看,几种版本用eval都可以得到相同的结果,但用subs的情况则有差别:6.5和2007b会导致出错,而2013a不报错,但得到的结果中仍然有a(1)等符号。这一点也许正意味着,MATLAB可能真的将a(1)这样的元素当成了一个新变量的名字。

 

3、其实用符号运算解方程,比较合理的做法是先定义符号变量,然后用符号变量(而不是用字符串)写方程:

a=[2 1]; b=[1 1];
syms x y;
eq1=a(1)*x+a(2)*y-4;
eq2=b(1)*x+b(2)*y-3;
[x, y]=solve(eq1,eq2,x,y)

这段代码在各种版本下都能正确运行,而且得到的结果无论用subs(x)double(x)还是eval(x)都可以转换为数值。

数码答疑

2014-10-02 · 解答日常生活中的数码问题
数码答疑
采纳数:8805 获赞数:18623

向TA提问 私信TA
展开全部
符号解方程,直接写方程式
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
52spn
2014-10-01 · TA获得超过2193个赞
知道大有可为答主
回答量:3322
采纳率:60%
帮助的人:596万
展开全部
直接查帮助文档,很详细的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式