怎么定义一个分段函数 在matlab中

我要用fminsearch计算一个结果 格式是
[x,fval] = fminsearch(banana,[-1.2, 1])
因此要定义一个函数banana
我要计算的是一个3维的分段的函数
当x1<0时是 100 * (x(3) - 5/pi * atan(x(2)/x(1)))^2 + (sqrt(x(1)^2+x(2)^2) - 1)^2 + x(3)^2
当x1>=0时是 100 * (x(3) - 5/pi * (pi + atan(x(2)/x(1))))^2 + (sqrt(x(1)^2+x(2)^2) - 1)^2 + x(3)^2

1、绘制分段函数图像,需要知道分段函数的表达式。来绘制分段函数图像,该函数分为三段。

2、x的取值范围选取0到3,y的表达式书写如下图所示,表示为每段的函数表达式乘以x区间的逻辑表达式,如果x的值在范围内,就乘以1,不在范围内,就乘以0。

3、点击回车键,运行程序,运行结果如下图所示,可以看到绘制的分段函数图像,一次性就绘制成功了。

4、分段函数为三段,每个x区间内有对应的y值表达式。

5、书写y的值如方框处所示,表达出了y的函数值。

6、点击回车键,开始运行程序,运行结果如下图所示,分段函数绘制成功了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-11-14

matlab提供了了两种定义分段函数的方法:

    常规方法:使用if...else...语句定义不同的分支

    推荐方法:使用逻辑表达式将不同分支写成一个完整的函数表达式

下面进行举例说明:在matlab中定义如下分段函数

1、常规方法:

function y = fun(x)
  if(x<1)
    y = x;
  elseif(x<2)
    y = x^2;
  else
    y = x^3;
  end
return

2、推荐方法:

function y = fun(x)
  y = (x<1)*x + (x>=1&x<2)*x^2 + (x>=2)*x^3;
return

% 当然,也乐意直接写成匿名函数的形式
f = @(x) (x<1)*x + (x>=1&x<2)*x^2 + (x>=2)*x^3;

第2个回答  2010-04-24
这个很简单吧:
if(x1<0)
banana = ...;
else if(x1>=0)
banana = ...;
[x,fval] = fminsearch(banana,[-1.2, 1])本回答被网友采纳
第3个回答  2010-04-25
if x1<0

else

end
相似回答