MATLAB ode45没有创建正确的图

时间:2015-04-11 06:37:31

标签: matlab plot ode

因此我得到了二阶边值问题,其中y(0)= 5且y(20)= 8。我们应该使用ode45的拍摄方法来近似解决方案并将其与实际解决方案进行比较。我已经将方程转换为一阶方程并找到了解析解(y1)。我们应该输入-1和-.5的用户输入猜测,但是当我这样做时,图形根本不像实际的那样。我已经注释掉了我们应该用来获得解决方案的while循环,因为我需要第一部分来解决。我不确定问题是什么......

f.m文件

function xp=f(t,x)
xp=zeros(2,1);
xp(1)=x(2);
xp(2)=exp(-5*t)-x(2)-9.81*sin(x(1));

main.m文件

clear
clc

syms t;
c = -1.783049298*10^(-4);
d = 7.000178305;

y1 = c*exp((1/7+2*sqrt(2)/7)*t)+d*exp((1/7-2*sqrt(2)/7)*t)+t-2;

errta = 1;

prompt = 'Enter a guess for the slope';
z = input(prompt);
guesses(1) = z;

[t,x]=ode45('f',[0,20],[5,z]);
result(1) = x(length(x),1);

z = input(prompt);
guesses(2) = z;

[t,x]=ode45('f',[0,20],[5,z]);
result(2) = x(length(x),1);

% while errta>0.000001
%      z = (guesses(2)+guesses(1))/2;
%      
%      [t,x]=ode45('f',[0,20],[5,z]);
%     if x(length(x),1)>8
%         guesses(2)=z;
%     end
%     
%     if x(length(x),1)<8
%         guesses(1)=z;
%     end
%     
%     errta = abs(-.82857121689-z);
% end

plot(t,x(:,1),'r')
title('ode45 vs actual')
hold on

ezplot(y1,[0,20])
hold off

1 个答案:

答案 0 :(得分:0)

x''+x'+9.81*sin(x)=exp(-5*t)
odefunc f中使用的

是一个阻尼摆,其中一些指数递减强迫。因此可以预期在t=20达到平衡点或静止点。这些被称为x=2*pi*k。因此,从初始速度到最终位置的映射将类似于阶梯函数,并且二分函数将找到最终值8所在的几乎垂直的分段。但可能不是最终值恰好是8的点。制作一个初始速度的图,范围从5到10,看看这个效果。


名为y1的确切解决方案属于微分方程

7*x''-2*x'-x=-t

初始速度和最终位置之间的关系几乎与解v0=-0.828571216889呈线性关系,它似乎与数值求解器的步长无关。该值也与建议的初始猜测一致。