在R2010b中使用解决和/或linsolve与符号工具箱

时间:2013-12-04 10:33:03

标签: linear-algebra matlab symbolic-math

几天前我问了一个问题here并得到了一个似乎可行的答案 - 它涉及使用linsolve来找到所有模p的方程组的解,其中p是a非素数整数。

但是,当我尝试从提供的答案或linsolve帮助页面运行命令时,我收到一条错误消息,指出linsolve不支持“sym”类型的参数。是否仅在R2013b中使用linsolve和sym变量?我也尝试过我学校的副本,即R2012b。这是我试图执行的代码(来自上面链接的答案):

A = [0 5 4 1;1 7 0 2;8 1 0 2;10 5 1 0];
b = [2946321;5851213;2563617;10670279];
s = mod(linsolve(sym(A),sym(b)),8)

输出是:

??? Undefined function or method linsolve' for input arguments of type 'sym'.

我也尝试使用函数solve,但即使我构造了由上面的矩阵Ab表示的等式,我也遇到了问题。这是我正在尝试的:

syms x y z q;
solve(5*y + 4*z + q == 2946321, x + 7*y + 2*q == 5851213, 8*x + y + 2*q == 2563617, 10*x + 5*y + z == 10670279,x,y,z,q)

输出是:

??? Error using ==> char
Conversion to char from logical is not possible.

Error in ==> solve>getEqns at 169
vc = char(v);

Error in ==> solve at 67
[eqns,vars] = getEqns(varargin{:});

我使用solve错了吗?我是否应该尝试在R2013b中执行我的代码以将linsolve用于符号数据类型?

1 个答案:

答案 0 :(得分:3)

多年来,符号数学工具箱数学工具箱已经发生了很大变化(更好)。你可能没有sym/linsolve,但这有用吗?:

s = mod(sym(A)\sym(b),8)

那基本上会做同样的事情。 sym/linsolve只是进行一些额外的输入检查和排名计算,以反映linsolve的功能。

您正在为当前版本正确使用solve,但在此上下文中,R2010b可能无法理解==运算符(sym/eq)。您可以使用旧的字符串格式来指定方程式:

eqs = {'5*y + 4*z + q = 2946321',...
       'x + 7*y + 2*q = 5851213',...
       '8*x + y + 2*q = 2563617',...
       '10*x + 5*y + z = 10670279'};
vars = {'x','y','z','q'};
[x,y,z,q] = solve(eqs{:},vars{:})