matlab分段函数

一个简单的练习题,可是我老出现错误,因此请教大家:

对于分段函数我是这样编写代码的:
clc;clear
syms a k z
if k>=0
f=a^k
else
f=0
end 运行了之后就出现这样的错误提示:
??? Function 'gt' is not defined for values of class 'sym'.
Error in ==> gt at 18
[varargout{1:nargout}] = builtin('gt', varargin{:});
我该怎么办呢?

第1个回答  2013-08-16
你是之所以出现错误是因为,符号类型变量k不能直接和数值比较大小,你可以这样来实现你要的功能。
建立f_z函数m文件
function y=f_z(s,e)
%s 累加起始值
%e 累加结束值
syms a z k;
if s<=0&e>=0 %如果s,e符号不同则需要分段级数累加
y=symsum(0*z^(-k),k,s,0)+symsum(a^k*z^(-k),k,1,e);
elseif s<0&e<0
y=symsum(0*z^(-k),k,s,e);
else
y=symsum(a^k*z^(-k),k,s,e);
end
在matlab主窗口输入
>> g=f_z(0,inf)

g =

-a/(a-z)

当然你可以计算任意,累加的值,比如说
>>g=f_z(-100,2)

g =

a/z+a^2/z^2

>> g=f_z(2,inf)

g =

-a^2/z/(a-z)追问

哥哥哎,我怎么看着这么复杂……谢谢你哦!我追问一下是想请教您,遇到分段函数非得这么搞么。。。能不能就是单独把分段函数表示出来
还有一点小弟不明,就是上面的求和符号,是0到无穷大,它表示的意思仅仅是正无穷大么?

追答

其实没那么复杂。

    分段函数的表示得看什么情况。像这个题目应该就这么来(可能知识浅薄),我尝试单独把它拿出来表示,都是一直报错无法做到分段函数的级数累加。其实大多数情况下是可能单独把分段函数表示出来,只是这个题目有点特殊。

    对,表示的是正无穷大。负无穷大用-inf表示。

追问

能否给我举一个小例子,就是那种大多数情况下把分段函数表示出来的。。。。

追答

可以的。

我们就拿你的分段函数举例,不妨就取a=2吧。这个时候你就可以建立这样的m函数文件
function y=myfun(k)
a=2;
[m,n]=size(k);%k有可能是矩阵,如果是y也相应输出矩阵
y=[];
for i=1:m
for j=1:n
if k(i,j)<0
y(i,j)=0;
else
y(i,j)=a^k(i,j);
end
end
end

这个函数就默认k为数值型
而我们之前的求级数函数symsum选择的f(k)里面k是符号类型,所以不能直接来表示,不知道有没有说清楚。

本回答被提问者采纳
第2个回答  2013-08-16
你新建1个m函数,把这个放在m函数里编写,直接调用函数的好
这个简单的
顺便问一下a 是常数还是变量?
相似回答