几天前我问了一个问题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
,但即使我构造了由上面的矩阵A
和b
表示的等式,我也遇到了问题。这是我正在尝试的:
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
用于符号数据类型?
答案 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{:})