作业帮 > 综合 > 作业

关于MATLAB符号运算的问题

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/07/14 02:04:31
关于MATLAB符号运算的问题
如何用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符号运算的书能不能推荐一本啊?
关于MATLAB符号运算的问题
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、subs和eval这两个函数的最主要区别是,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)都可以转换为数值.