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
函数和x
的linspace
函数只是一个例子。
我正在尝试计算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
。我已经尝试了许多不同的例子,我的答案还没有排好。我这边有什么问题吗?任何帮助都将不胜感激!
我已经附上了我的屏幕图像时,运行裸代码。
代码给出了错误的标准值
1条答案
按热度按时间zfycwa2u1#
你关于函数
f = @(x) c*sqrt(1-x)
的导数的假设是错误的,当x
接近1
时,导数指向-Inf
,因此max(abs(df))
应该是Inf
,而不是c
。Matlab在离散化引入的近似限制内返回正确值。