处理 Matlab 中的分段函数
Handle to piece-wise function in Matlab
如何在 Matlab 中获取分段函数的句柄,例如
function f= AnaliticalF(t1,t2,t,curve)
%solved in Maxima
%solve([a3*t1^3+a2*t1^2+a1*t1+a0= L1, a3*t2^3+a2*t2^2+a1*t2+a0= L2, 3*a3*t1^2+2*a2*t1+a1= 0, 3*a3*t2^2+2*a2*t2+a1= 0],[a3,a2,a1,a0]);
L1= curve(t1);
L2= curve(t2);
if (t <= t1)
f= @(t)L1;
elseif(t >= t2)
f= @(t)L2;
else
a3=-(2*L1-2*L2)/(-t2^3+3*t1*t2^2-3*t1^2*t2+t1^3);
a2=(-3*t2*L2-3*t1*L2+(3*t2+3*t1)*L1)/(-t2^3+3*t1*t2^2-3*t1^2*t2+t1^3);
a1=-(6*t1*t2*L1-6*t1*t2*L2)/(-t2^3+3*t1*t2^2-3*t1^2*t2+t1^3);
a0=(-3*t1^2*t2*L2+t1^3*L2+(3*t1*t2^2-t2^3)*L1)/(-t2^3+3*t1*t2^2-3*t1^2*t2+t1^3);
f= @(t)a3*t^3 + a2*t^2 + a1*t + a0;
end
end
然后我想将函数应用于元素数组:
f= AnaliticalF(t1,t2,t,curve);
y= arrayfun(f,trange);
但问题是我需要在 AnaliticalF(t1,t2,t,curve)
中指定 t ,但我希望它没有 t 参数。
所以我需要函数 f 的一些 'smart' 句柄,例如调用 f(100) 它可以在不指定参数 t 的情况下确定使用分段函数的哪一部分。
您可以使用指标函数!
例如,如果您想要函数 f(t) = t when t < 0 和 f(t) = t^2 when t >= 0,那么您可以定义:
f = @(t) t*(t<0) + t^2*(t>=0);
这当然可以很容易地推广到更高级的功能,例如您的功能!
希望这能解决您的问题。
编辑:我决定为您的函数提供解决方案:
function f= AnaliticalF(t1,t2,curve)
L1= curve(t1);
L2= curve(t2);
a3=-(2*L1-2*L2)/(-t2^3+3*t1*t2^2-3*t1^2*t2+t1^3);
a2=(-3*t2*L2-3*t1*L2+(3*t2+3*t1)*L1)/(-t2^3+3*t1*t2^2-3*t1^2*t2+t1^3);
a1=-(6*t1*t2*L1-6*t1*t2*L2)/(-t2^3+3*t1*t2^2-3*t1^2*t2+t1^3);
a0=(-3*t1^2*t2*L2+t1^3*L2+(3*t1*t2^2-t2^3)*L1)/(-t2^3+3*t1*t2^2-3*t1^2*t2+t1^3);
f = @(t) (t <= t1)*L1 + (t >= t2)*L2 + ((t > t1)&(t<t2))*(a3*t^3 + a2*t^2 + a1*t + a0);
end
如何在 Matlab 中获取分段函数的句柄,例如
function f= AnaliticalF(t1,t2,t,curve)
%solved in Maxima
%solve([a3*t1^3+a2*t1^2+a1*t1+a0= L1, a3*t2^3+a2*t2^2+a1*t2+a0= L2, 3*a3*t1^2+2*a2*t1+a1= 0, 3*a3*t2^2+2*a2*t2+a1= 0],[a3,a2,a1,a0]);
L1= curve(t1);
L2= curve(t2);
if (t <= t1)
f= @(t)L1;
elseif(t >= t2)
f= @(t)L2;
else
a3=-(2*L1-2*L2)/(-t2^3+3*t1*t2^2-3*t1^2*t2+t1^3);
a2=(-3*t2*L2-3*t1*L2+(3*t2+3*t1)*L1)/(-t2^3+3*t1*t2^2-3*t1^2*t2+t1^3);
a1=-(6*t1*t2*L1-6*t1*t2*L2)/(-t2^3+3*t1*t2^2-3*t1^2*t2+t1^3);
a0=(-3*t1^2*t2*L2+t1^3*L2+(3*t1*t2^2-t2^3)*L1)/(-t2^3+3*t1*t2^2-3*t1^2*t2+t1^3);
f= @(t)a3*t^3 + a2*t^2 + a1*t + a0;
end
end
然后我想将函数应用于元素数组:
f= AnaliticalF(t1,t2,t,curve);
y= arrayfun(f,trange);
但问题是我需要在 AnaliticalF(t1,t2,t,curve)
中指定 t ,但我希望它没有 t 参数。
所以我需要函数 f 的一些 'smart' 句柄,例如调用 f(100) 它可以在不指定参数 t 的情况下确定使用分段函数的哪一部分。
您可以使用指标函数! 例如,如果您想要函数 f(t) = t when t < 0 和 f(t) = t^2 when t >= 0,那么您可以定义:
f = @(t) t*(t<0) + t^2*(t>=0);
这当然可以很容易地推广到更高级的功能,例如您的功能!
希望这能解决您的问题。
编辑:我决定为您的函数提供解决方案:
function f= AnaliticalF(t1,t2,curve)
L1= curve(t1);
L2= curve(t2);
a3=-(2*L1-2*L2)/(-t2^3+3*t1*t2^2-3*t1^2*t2+t1^3);
a2=(-3*t2*L2-3*t1*L2+(3*t2+3*t1)*L1)/(-t2^3+3*t1*t2^2-3*t1^2*t2+t1^3);
a1=-(6*t1*t2*L1-6*t1*t2*L2)/(-t2^3+3*t1*t2^2-3*t1^2*t2+t1^3);
a0=(-3*t1^2*t2*L2+t1^3*L2+(3*t1*t2^2-t2^3)*L1)/(-t2^3+3*t1*t2^2-3*t1^2*t2+t1^3);
f = @(t) (t <= t1)*L1 + (t >= t2)*L2 + ((t > t1)&(t<t2))*(a3*t^3 + a2*t^2 + a1*t + a0);
end