我必须计算一些限制:
syms x1 x2 a
x0 = [0, 1];
x_dir = [1, 0];
f = max(0,x1) + (x1^2)*abs(x2)
f_lim = (1/a) * (f(x0 + a*x_dir) - f(x0))
f_lim_left = limit(f_lim, a, 0, 'left');
f_lim_right = limit(f_lim, a, 0, 'right');
我不能在符号值上使用max函数,因为MATLAB不允许这样做。但是,显而易见的是:要获得一段独立于变量(x0,x_dir)的代码,因此我可以轻松地更改它们。我尝试过在网上使用双重或使用feval(symengine,' max',x,-y),但没有运气。任何解决方法,伙计们?
答案 0 :(得分:1)
您可以将f
定义为
f(x1,x2) = feval(symengine,'max',x1,0) + (x1^2)*abs(x2);
然后通过有限差分计算其相对于x1
的方向导数
f_lim_x1(x1, x2) = (f(x1+a, x2)-f(x1,x2))/abs(a);
您还可以查看limit
功能
limit(f, x1, x0, direction)
其中direction
可以是'left'
或'right'
。