Matlab符号表达式中的绝对值

时间:2016-03-12 09:07:04

标签: matlab distance symbolic-math norm absolute-value

在我正在阅读的一篇论文中,他们写了

| X-Y | ^ 2

我正在尝试使用符号工具在Matlab中对此进行编码,我不太清楚如何阅读本文,但我想确保捕获正确的解释。他们没有在论文中真正指出,但从我所读的here开始,将其称为规范与绝对值是恰当的。无论如何,似乎Matlab不喜欢我写作

(norm(x-y))^2

使用符号变量。如果我将方程式读作绝对值平方,那么我可以简单地转换对范数的需要并写入

(x-y)^2

我知道这听起来微不足道,但我发现Matlab不喜欢在符号表达式中包含范数(或绝对值)。我在下面放了一些代码。我的问题是....有没有一种正确的方法来使用带有符号变量的规范?如果我正在处理一个norm3(为了论证),并且需要在符号表达式中使用它,我如何修改代码仍然能够绘制?

clear all
clc
syms x lim A real
expression = 2*A*cos(x);

% Squaring
metric = (x - expression)^2;
sq_ = eval(subs(metric,{'x','A'},{linspace(-1,1,10),1}));
error = -int(metric,x,0,lim);
ezsurf(error,[0,pi,-1,2])
view(127,38)

% Using norm
metric = (norm(x - expression))^2;
norm_ = eval(subs(metric,{'x','A'},{linspace(-1,1,10),1}));
error = -int(metric,x,0,lim);
ezsurf(error,[0,pi,-1,2])
view(127,38)

% Using abs
metric = (abs(x - expression))^2;
abs_ = eval(subs(metric,{'x','A'},{linspace(-1,1,10),1}));
error = -int(metric,x,0,lim);
ezsurf(error,[0,pi,-1,2])
view(127,38)

sq_==norm_
sq_==abs_

1 个答案:

答案 0 :(得分:1)

我不确定为什么符号工具箱在这里失败,特别是因为它可以在任何情况下解决int(metric,x)

用两行替换你的单行,你得到结果:

clear all
clc
syms x lim A real
expression = 2*A*cos(x);

% Squaring
metric = (x - expression)^2;
sq_ = eval(subs(metric,{'x','A'},{linspace(-1,1,10),1}));
error = -int(metric,x,0,lim);
ezsurf(error,[0,pi,-1,2])
view(127,38)

% Using norm
metric = (norm(x - expression))^2;
norm_ = eval(subs(metric,{'x','A'},{linspace(-1,1,10),1}));
%error = -int(metric,x,0,lim);
e2=-int(metric,x);
error=subs(e2,x,lim)-subs(e2,x,0);
ezsurf(error,[0,pi,-1,2])
view(127,38)

% Using abs
metric = (abs(x - expression))^2;
abs_ = eval(subs(metric,{'x','A'},{linspace(-1,1,10),1}));
%error = -int(metric,x,0,lim);
e2=-int(metric,x);
error=subs(e2,x,lim)-subs(e2,x,0);
ezsurf(error,[0,pi,-1,2])
view(127,38)