求大神帮忙修改一个Matlab的函数
来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/08/18 20:30:46
求大神帮忙修改一个Matlab的函数
如题,在Matlab里写了一个函数
function eulermethods(xy,t,nSteps)
a=1;b=1;d=1;g=1.2;
h = (t(2)-t(1))/nSteps;
x=xy(1);
y=xy(2);
X = a*x - b*x*y;
Y = g*x*y - d*y;
xvec = [x zeros(1,nSteps)];
yvec = [y zeros(1,nSteps)];
for n = 1:nSteps
xvec(n+1) = xvec(n)+h*X;
yvec(n+1) = yvec(n)+h*Y;
X = a*xvec(n+1) - b*xvec(n+1)*yvec(n+1);
Y = g*xvec(n+1)*yvec(n+1) - d*yvec(n+1);
end
xvec=xvec';
yvec=yvec';
t = (t(1):h:t(2))';
m=[xvec,yvec];
disp(m);
disp(t);
end
怎样把这个函数改成使用Function Handle的函数(即输入eulermethods(@(x,y) [x-x*y,1.2*x*y-y],[2 2],[0 5],20) 也能有同样输出的函数)
如题,在Matlab里写了一个函数
function eulermethods(xy,t,nSteps)
a=1;b=1;d=1;g=1.2;
h = (t(2)-t(1))/nSteps;
x=xy(1);
y=xy(2);
X = a*x - b*x*y;
Y = g*x*y - d*y;
xvec = [x zeros(1,nSteps)];
yvec = [y zeros(1,nSteps)];
for n = 1:nSteps
xvec(n+1) = xvec(n)+h*X;
yvec(n+1) = yvec(n)+h*Y;
X = a*xvec(n+1) - b*xvec(n+1)*yvec(n+1);
Y = g*xvec(n+1)*yvec(n+1) - d*yvec(n+1);
end
xvec=xvec';
yvec=yvec';
t = (t(1):h:t(2))';
m=[xvec,yvec];
disp(m);
disp(t);
end
怎样把这个函数改成使用Function Handle的函数(即输入eulermethods(@(x,y) [x-x*y,1.2*x*y-y],[2 2],[0 5],20) 也能有同样输出的函数)
![求大神帮忙修改一个Matlab的函数](/uploads/image/z/220346-26-6.jpg?t=%E6%B1%82%E5%A4%A7%E7%A5%9E%E5%B8%AE%E5%BF%99%E4%BF%AE%E6%94%B9%E4%B8%80%E4%B8%AAMatlab%E7%9A%84%E5%87%BD%E6%95%B0)
感觉你没把需求表达清楚. 比如,对于你现在贴出来的函数代码,输入参数是什么?如果改写成下述调用方式:eulermethods(@(x,y) [x-x*y, 1.2*x*y-y],[2 2], [0 5],20)按你的说法,【也能有同样输出】,和谁有相同的输出? 不过,我(应该)总算搞明白了你的需要:你的意思是,把函数进行修改后,按照上面你说的调用方式,和对现在的函数进行下述调用:eulermethods([2 2], [0 5],20)得到相同的结果,是不是? 如果是这个意思,按照下面的方式修改:function eulermethods(fxy,xy0,t,nSteps)
h = (t(2)-t(1))/nSteps;
x = xy0(1);
y = xy0(2);
XY = fxy(x,y);
X = XY(1);
Y = XY(2);
xvec = [x zeros(1,nSteps)];
yvec = [y zeros(1,nSteps)];
for n = 1:nSteps
xvec(n+1) = xvec(n)+h*X;
yvec(n+1) = yvec(n)+h*Y;
XY = fxy(xvec(n+1),yvec(n+1));
X = XY(1);
Y = XY(2);
end
xvec=xvec';
yvec=yvec';
t = (t(1):h:t(2))';
m=[xvec, yvec];
disp(m);
disp(t);需要说明的是,这只是对二元函数的写法,如果对于多元函数(或者说,高阶微分方程),其实应该写成向量的形式——也就是说,匿名函数的定义应该是@(t,x)的形式,其中x是向量,t是时间(可用于时变系统).要想更深入的了解,可参考ode45函数的说明.
h = (t(2)-t(1))/nSteps;
x = xy0(1);
y = xy0(2);
XY = fxy(x,y);
X = XY(1);
Y = XY(2);
xvec = [x zeros(1,nSteps)];
yvec = [y zeros(1,nSteps)];
for n = 1:nSteps
xvec(n+1) = xvec(n)+h*X;
yvec(n+1) = yvec(n)+h*Y;
XY = fxy(xvec(n+1),yvec(n+1));
X = XY(1);
Y = XY(2);
end
xvec=xvec';
yvec=yvec';
t = (t(1):h:t(2))';
m=[xvec, yvec];
disp(m);
disp(t);需要说明的是,这只是对二元函数的写法,如果对于多元函数(或者说,高阶微分方程),其实应该写成向量的形式——也就是说,匿名函数的定义应该是@(t,x)的形式,其中x是向量,t是时间(可用于时变系统).要想更深入的了解,可参考ode45函数的说明.