您的位置:首页 > 编程语言 > MATLAB

matlab 数值微分与函数句柄 补充最优化与函数句柄

2019-05-19 10:30 1746 查看

function shuzhiweifen
clc

%ode23 ode45
% t=[0,20];
% y0=[1;0];
% [t,y]=ode45(@dfun,t,y0)//就固定用匿名函数这样写,其他出错
% plot(t,y(:,1),t,y(:,2))
% function y=dfun(t,y)
% u=2;
% y=[y(2);
% u.*(1-y(1).^2).*y(2)-y(1)];

%Euler
tn=2;
h=0.2;
y0=1;
**% [t,y]=odeEuler(@diffeq,tn,h,y0)%对应 kk=t-2.y;
% [t,y]=odeEuler(‘diffeq’,tn,h,y0)%对应 kk=t-2.y;
[t,y]=odeEuler(diffeq,tn,h,y0)%对应kk=inline('t-2.y’);和kk=@(t,y)t-2.y
function [t,y]=odeEuler(diffeq,tn,h,y0)
f=diffeq
t=(0:h:tn);
n=length(t);
y=y0ones(n,1);
for k=2:n
y(k)=y(k-1)+hfeval(diffeq,t(k-1),y(k-1));%feval
end

function kk=diffeq(t,y)
% kk=inline(‘t-2.*y’);
kk=@(t,y)t-2.*y
% kk=t-2.*y;

最优化与函数句柄
% 求一元函数 f (x) = 0.5 – x*exp(– x2) 在区间[0,2]内的极小值。
%法一,用inline
% [xmin,ymin]=fminbnd(dfun,0,2)
% ezplot(dfun,[0,2])
% function kk=dfun(x)
% % kk=0.5-x.*exp(-x.^2);
% kk=inline(‘0.5-x.*exp(-x.^2)’);

%法二,用匿名函数
% [xmin,ymin]=fminbnd(@dfun,0,2)
% ezplot(@dfun,[0,2])
% function kk=dfun(x)
% kk=0.5-x.*exp(-x.^2);

% %法三,用匿名函数
% [xmin,ymin]=fminbnd(dfun,0,2)
% ezplot(dfun,[0,2])
% function kk=dfun(x)
% kk=@(x)0.5-x.*exp(-x.^2);

%出错
[xmin,ymin]=fminbnd(‘dfun’,0,2)
ezplot(‘dfun’,[0,2])
function kk=dfun(x)
kk=0.5-x.*exp(-x.^2);
%%最后一种出错的原因,可能是fminbnd函数本身定义的问题。。可见,前三种方式才比较保险

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: