首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MATLAB ode45没有创建正确的曲线图

MATLAB ode45没有创建正确的曲线图
EN

Stack Overflow用户
提问于 2015-04-11 14:37:31
回答 1查看 200关注 0票数 0

所以我得到了一个二阶边值问题,y(0)=5,y(20)=8。我们应该使用ode45的打靶法来近似解,并将其与实际解进行比较。我已经将方程转换为一阶方程,并找到了解析解(y1)。我们应该让用户输入猜测-1和-.5,但当我这样做时,图形与实际一点也不相似。我已经注释掉了while循环,我们应该使用它来使解决方案在容差范围内,因为我需要解决第一部分的问题。我不太确定问题是什么.

f.m文件

代码语言:javascript
复制
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文件

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2015-04-14 03:51:12

代码语言:javascript
复制
x''+x'+9.81*sin(x)=exp(-5*t)

odefunc f中使用的是具有指数递减作用力的阻尼摆。因此,人们可以期望在t=20达到一个平衡点或固定点。它们被准确地称为x=2*pi*k。因此,从初始速度到最终位置的映射将类似于阶跃函数,并且对分函数将找到最终值8所在的几乎垂直的分段。但可能不是最终值恰好是8的点。绘制一个从5 t0 10范围内的初始速度图,以查看此效果。

名为y1的精确解属于微分方程

代码语言:javascript
复制
7*x''-2*x'-x=-t

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29574932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档