首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Matlab中处理分段函数

在Matlab中处理分段函数
EN

Stack Overflow用户
提问于 2015-07-16 09:57:39
回答 1查看 97关注 0票数 0

例如,如何在Matlab中获取分段函子的句柄。

代码语言:javascript
复制
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

然后,我想将函数应用于元素数组:

代码语言:javascript
复制
f= AnaliticalF(t1,t2,t,curve);
y= arrayfun(f,trange);

但是问题是我需要在AnaliticalF(t1,t2,t,curve)中指定t,但是我希望它没有参数。因此,我需要函数f的一些“智能”句柄,例如调用f(100),它可以决定使用哪一部分分段函数,而不需要指定参数t。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-16 10:13:55

您可以使用指示函数!例如,如果您希望当t<0时函数f(t) =t,当t >= 0时,f(t) = t^2,那么您可以定义:

代码语言:javascript
复制
f = @(t) t*(t<0) + t^2*(t>=0);

当然,这可以很容易地推广到更高级的函数,比如您的函数!

我希望这能解决你的问题。

编辑:我决定为您的函数提供解决方案:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31451036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档