Matlab 符号表达式中的绝对值
Absolute values in Matlab symbolic expressions
在我正在阅读的论文中,他们写道
|x-y|^2
我正在尝试使用符号工具在 Matlab 中对此进行编码,但我不太确定如何阅读它,但我想确保捕捉到正确的解释。他们并没有在论文中具体说明,但根据我的阅读 here,称其为范数与绝对值比较合适。无论如何,好像 Matlab 不喜欢我写
(norm(x-y))^2
使用符号变量。如果我将方程式读作绝对值的平方,那么我可以简单地放弃对范数的需求并写成
(x-y)^2
我知道这听起来微不足道,但我发现 Matlab 不喜欢在符号表达式中包含范数(或绝对值)。我在下面放了一些代码。我的问题是......是否有将 norm 与符号变量一起使用的正确方法?如果我正在处理 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_
我不确定为什么符号工具箱在这里失败,特别是因为它可以解决 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)
在我正在阅读的论文中,他们写道
|x-y|^2
我正在尝试使用符号工具在 Matlab 中对此进行编码,但我不太确定如何阅读它,但我想确保捕捉到正确的解释。他们并没有在论文中具体说明,但根据我的阅读 here,称其为范数与绝对值比较合适。无论如何,好像 Matlab 不喜欢我写
(norm(x-y))^2
使用符号变量。如果我将方程式读作绝对值的平方,那么我可以简单地放弃对范数的需求并写成
(x-y)^2
我知道这听起来微不足道,但我发现 Matlab 不喜欢在符号表达式中包含范数(或绝对值)。我在下面放了一些代码。我的问题是......是否有将 norm 与符号变量一起使用的正确方法?如果我正在处理 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_
我不确定为什么符号工具箱在这里失败,特别是因为它可以解决 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)