linear-algebra - 将 solve 和/或 linsolve 与 R2010b 中的符号工具箱一起使用

标签 linear-algebra matlab symbolic-math

我前几天问过一个问题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,但是即使我构造了由矩阵 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 与符号数据类型一起使用?

最佳答案

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/

相关文章:

javascript - Canvas 获取透视点

c++ - 3D vector 归一化问题

matlab - 验证属性是 MATLAB 中抽象类的子类

string - 在 MATLAB 中将字母转换为 NATO 字母表

python - Sympy 表达式为多项式之比

matlab - 加快一些矩阵算术运算

java - 圆-圆碰撞预测(后续)

java - 无法在matlab中执行 'DocumentBuilderFactory'

matlab - ubuntu下Matlab代码执行速度非常慢

python - 将 SymPy 表达式分解为仅涉及一个符号的组