Matlab 符号表达式中的绝对值

Posted

技术标签:

【中文标题】Matlab 符号表达式中的绝对值【英文标题】:Absolute values in Matlab symbolic expressions 【发布时间】:2016-03-12 09:07:04 【问题描述】:

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

|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】:

我不确定符号工具箱为什么会在这里失败,尤其是因为它可以解决任何情况下的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)

【讨论】:

以上是关于Matlab 符号表达式中的绝对值的主要内容,如果未能解决你的问题,请参考以下文章

matlab怎么求矩阵的绝对值

Matlab中的傅里叶级数系数​​使用FFT不是负数

MATLAB函数库

matlab fill函数的绘图颜色怎样设定?

matlab 如何求一个矩阵所有元素的绝对值的和

MATLAB学习笔记-1.3变量及其操作