matlab 为什么我用中心差分法得到的Lipschitz 1/2范数的值不正确?

v9tzhpje  于 2022-12-27  发布在  Matlab
关注(0)|答案(1)|浏览(161)

Lipschitz 1/2范数被定义为函数在定义域中所有点上的导数的绝对值的最大值。我有一个代码可以近似给定函数的这个值:

% Define the function f
f = @(x) x.^2;

% Define the domain of the function
x = linspace(-1, 1, 1000);

% Compute the derivative of the function using the central difference method
df = (f(x+1e-8) - f(x-1e-8)) / (2*1e-8);

% Compute the Lipschitz 1/2 norm of the function
lipschitz_norm = max(abs(df));

这里,我们的f函数和xlinspace函数只是一个例子。
我正在尝试计算f = @(x) 2*sqrt(1-x), with x = linspace(0, 1, 1000)的范数。或者实际上,f = @(x) c*sqrt(1-x),其中c是一个实数。理论上,对于给定的c,这些函数的范数显然是abs(c)。在线上,使用示例f = @(x) 2*sqrt(1-x)的此代码,其中x = linspace(0, 1, 1000)给出lipschitz_norm = 2,正如它应该的那样,但是当我自己在MATLAB上运行完全相同的代码时,我得到了1.4142e+04。我已经尝试了许多不同的例子,我的答案还没有排好。我这边有什么问题吗?任何帮助都将不胜感激!
我已经附上了我的屏幕图像时,运行裸代码。
代码给出了错误的标准值

zfycwa2u

zfycwa2u1#

你关于函数f = @(x) c*sqrt(1-x)的导数的假设是错误的,当x接近1时,导数指向-Inf,因此max(abs(df))应该是Inf,而不是c
Matlab在离散化引入的近似限制内返回正确值。

相关问题