判断一元多项式函数的编程问题
function y=douxiangshi(f)f=inline(f); %定义函数
% 先定义一个函数 对函数求导 求出稳定点和极值点拐点 先判断最左边的增减凹凸性 在判断中间的
% 增减凹凸性 最后判断最右边的凹凸性 然后画图
syms x
z=diff(sym(f),x); %求导
dian=solve(z);%求稳定点
%有几个极值点
erdao=diff(sym(z),x); %求二阶导
dain=sort(dian);
len=length(size(dian)); %有几个极值点
% 显示几个极值点
disp('稳定点:');
for j=1:len
fprintf('%4s ',char(dian(j)));
end
for k=1:len % 求极值点及拐点
i=subs(erdao,'x',dian(k));
if double(i)>0
fprintf('\n函数在 %s 处取得极大值\n',char(dian(k)));
elseif double(i)<0
fprintf('\n函数在 %s 处取得极小值\n',char(dian(k)));
else
fprintf('\n (%s,%s) 为拐点\n',char(dian(k)),f(dian(k)));
end
end
% len=len-1; %中间区间数
% if len>1
%判断最左区间的增减性及凹凸性
zuo=double(dian(1))-1; %取点
if subs(z,'x',zuo)>0; %判断增
if subs(erdao,'x',zuo)>0; % 判断凸
fprintf('(-∞,%s)为增区间 此区间为凸\n',char(dian(1)));
else subs(erdao,'x',zuo)<0; % 判断凹
fprintf('(-∞,%s)为增区间 此区间为凹\n',char(dian(1)));
end
else subs(z,'x',zuo)>0; % 判断减
if subs(erdao,'x',zuo)>0; % 判断凸
fprintf('(-∞,%s)为减区间 此区间为凸\n',char(dian(1)));
else subs(erdao,'x',zuo)<0; % 判断凹
fprintf('(-∞,%s)为减区间 此区间为凹\n',char(dian(1)));
end
end
%判断中间的区间的增减性及凹凸性
for m=1:len-1
n=double((dian(m)+dian(m+1))/2); %取点
if subs(z,'x',n)>0 % 判断增
if subs(erdao,'x',n)>0; % 判断凸
fprintf('(%s,%s)为增区间 此区间为凸\n',char(dian(m)),char(dian(m+1)));
else subs(erdao,'x',n)<0; % 判断凹
fprintf('(%s,%s)为增区间 此区间为凹\n',char(dian(m)),char(dian(m+1)));
end
else subs(z,'x',n)<0; % 判断减
if subs(erdao,'x',n)>0; % 判断凸
fprintf('(%s,%s)为减区间 此区间为凸\n',char(dian(m)),char(dian(m+1)));
else subs(erdao,'x',n)<0; % 判断凹
fprintf('(%s,%s)为减区间 此区间为凹\n',char(dian(m)),char(dian(m+1)));
end
end
end
% 判断最右区间的增减性及凹凸性
you=double(dian(len))+1;%取点
if subs(z,'x',you)>0 %判断增
if subs(erdao,'x',you)>0; %判断凸
fprintf('(%s,+∞)为增区间 此区间为凸\n',char(dian(len)));
else subs(erdao,'x',you)<0; %判断凹
fprintf('(%s,+∞)为增区间 此区间为凹\n',char(dian(len)));
end
else subs(z,'x',you)>0; %判断减
if subs(erdao,'x',you)>0; %判断凸
fprintf('(%s,+∞)为减区间 此区间为凸\n',char(dian(len)));
else subs(erdao,'x',you)<0; %判断凹
fprintf('(%s,+∞)为减区间 此区间为凹\n',char(dian(len)));
end
end
% end
ezplot(f);
grid
在命令窗口输入douxiangshi('x^3+6*x^2-15*x-20')
得到的答案
稳定点:
1 -5
函数在 1 处取得极大值
函数在 -5 处取得极小值
(-∞,1)为减区间 此区间为凸
(1,-5)为减区间 此区间为凹
(-5,+∞)为减区间 此区间为凹
怎么得不到全部的稳定点 拐点也没得出来 还有怎么会是
(1,-5)为减区间 此区间为凹
(-5,+∞)为减区间 此区间为凹
区间都倒了
得到的稳定点已经排序了的啊 会是1 -5