求解答:matlab中分段函数问题

syms u
f=-2*u.^4+2*u.^2+u/6+0.3;
if u >= (-0.9-f(-0.9)) & u <= (-0.9)
g =0.9+u+f(-0.9);
else if u>=(-0.9) & u<=1
g=f;
else if u>=1 & u<=(1+f(1))
g=1-u-f(1);
end
end
end
求大神帮忙看看哪里出错了?是分段函数写的不对还是 syms 的缘故?

这样就对了:

>> f = @(u) -2*u.^4+2*u.^2+u/6+0.3;

>> g = @(u) (u>= -0.9-f(-0.9) & u <= -0.9).*(0.9 + u+f(-0.9)) + (u>= -0.9 & u<=1).*f(u) + (u>=1 & u<=1+f(1)).*(1-u-f(1))

g = 

    @(u)(u>=-0.9-f(-0.9)&u<=-0.9).*(0.9+u+f(-0.9))+(u>=-0.9&u<=1).*f(u)+(u>=1&u<=1+f(1)).*(1-u-f(1))

>> plot(linspace(-1,1,100),g(linspace(-1,1,100)))

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-19
太混乱了。。。
你需要先说明白你的最终目的,

像什么f(-0.9),你指望matlab能认识这种东西吗?f是个符号变量。。
f(-0.9)的表示方法应该是subs(f,u,-0.9)

另外,为什么不把先把f(-0.9)和f(1)直接算出来呢?
最后,你是要得到一个函数呢?还是一个函数呢?。。。
是函数就得有函数的样子。
如果你一定要用符号运算的话,

function fun_g(x)

syms u
f=-2*u.^4+2*u.^2+u/6+0.3;
if( x>=-0.9-subs(f,u,-0.9) && x<=-0.9 )
g = 0.9+x+subs(f,u,-0.9);
else if( x>=-0.9 && x<=1 )
g = subs(f,u,x);
else if( x>=1 && x<=1+subs(f,u,1)
g = 1-x-subs(f,u,1);
end
fun_g = g;

把上面的语句保存到文件fun_g.m
放在一个英文的工作目录下面
然后你在command窗口,可以输入命令使用这个函数

例如,你要得到g(0.7)
输入
fun_g(0.7)
你要得到g(0.9)
输入
fun_g(0.9)追问

改了好几次,总是出现Function 'ge' is not implemented for MuPAD symbolic objects.

追答

你能把你的代码贴出来,然后怎么操作的说明一下吗?

追问

(⊙o⊙)…就是把你写的贴过去就出现那个警告了

追答

这是个函数,不是可以直接运行的命令,当然不能直接粘贴过去了。

追问

不懂,我已经放弃了。不过还是很感谢你,O(∩_∩)O~

相似回答