Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#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 |
![]() |
![]() |
![]() |
主题工具 | |
显示模式 | |
|
|
![]() |
||||
主题 | 主题作者 | 版面 | 回复 | 最后发表 |
[资料]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 |