Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
 
 
主题工具 显示模式
旧 2008-12-10, 19:48   #1
剑八
初级会员
 
注册日期: 2008-11-24
住址: 福州
帖子: 11
声望力: 17
剑八 正向着好的方向发展
默认 [求助]判断一元多项式函数的编程问题

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
剑八 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码


相似的主题
主题 主题作者 版面 回复 最后发表
[资料]BP网络总结及应用实例 guofeng0108 MATLAB论坛 37 2012-06-11 22:08
[分享]给大家传一个图像空间变换和直方图变换的数学推导 johnny8088 MATLAB论坛 0 2009-01-31 03:26
有哪位做过BEESSEL法数字下变频? yqgame365 MATLAB论坛 0 2008-12-07 23:53
急问,如何采用所给数据进行曲面拟合? ormosia MATLAB论坛 3 2008-10-21 10:44
[求助]在SIMULINK里,如何将inegrator上方的箭头移到下面去 yijianmei MATLAB论坛 1 2008-07-24 10:15


所有时间均为北京时间。现在的时间是 09:09


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.