我前几天问过一个问题here并得到了一个看起来可行的答案 - 它涉及使用 linsolve 找到方程组的解,这些方程组都是以 p 为模,其中 p 是一个非素数整数。
但是,当我尝试从提供的答案或 linsolve
帮助页面运行命令时,我收到一条错误消息,指出 linsolve
不支持类型的参数'符号'。是否只能在 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
与符号数据类型一起使用?
最佳答案
The Symbolic Math toolbox 多年来,数学工具箱发生了很大变化(变得更好)。你可能没有 sym/linsolve
,但这行得通吗?:
s = mod(sym(A)\sym(b),8)
这基本上会做同样的事情。 sym/linsolve
只是进行一些额外的输入检查和排名计算以反射(reflect) 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{:})
关于linear-algebra - 将 solve 和/或 linsolve 与 R2010b 中的符号工具箱一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20372917/