首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >matlab ode23求解器错误未知

matlab ode23求解器错误未知
EN

Stack Overflow用户
提问于 2012-04-09 10:53:09
回答 1查看 2.4K关注 0票数 1

我们正在尝试使用matlab的ode23求解器对DC/DC降压转换器进行建模。当我们尝试运行我们的代码时,出现了以下错误:

代码语言:javascript
运行
复制
??? Error using ==> odearguments at 91
The last entry in tspan must be different
from the first entry.

Error in ==> ode23 at 171
[neq, tspan, ntspan, next, t0, tfinal,
tdir, y0, f0, odeArgs, odeFcn, ...

Error in ==> buck2 at 13
      [t,x] = ode23(@event1,[t0 tf],x0);

当我们删除修改初始条件数组的代码时,代码运行时没有错误,但没有产生预期的结果。

这是我们的代码:

代码语言:javascript
运行
复制
function buck2
close all
clear all
clc

t0 = 0; 
tf = 1;
x0 = [0 0];  % Initial conditions

for i = 1:10
    if (1 <= i <= 4),
      [t,x] = ode23(@event1,[t0 tf],x0);
      nt = length(t);          
    else
      [t,x] = ode23(@event2,[t0 tf],x0);
      nt = length(t);   
    end   
    t0 = t(nt);
    x0 = x(nt);
end

plot(t,x)

function xdot = event1(t,x)
L = (12.12e-6);
C = (19.5e-6);
RC = (2.5*19.5e-6);
xdot = [(24/L) - (x(2)/L); (x(1)/C) - (x(2)/RC)];

function xdot = event2(t,x)
L = (12.12e-6);
C = (19.5e-6);
RC = (2.5*19.5e-6);
xdot = [-(x(2)/L); (x(1)/C) - (x(2)/RC)];
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-09 11:29:55

以下是问题所在:

在循环中,第一次迭代:

您可以调用以下代码

代码语言:javascript
运行
复制
[t,x] = ode23(@event1,[t0 tf],x0);

t0 =0,tf = 1;

然后再往下循环:

代码语言:javascript
运行
复制
t0 = t(nt); %so t0 = 1;

下一个for循环迭代:

代码语言:javascript
运行
复制
[t,x] = ode23(@event1,[t0 tf],x0); 

换句话说:

t,x= ode23(@event1,11,x0);

解决方案:

使用tf = t0 +1;修改t0 = t(nt);或更新tf

更新:

此外,还应更正以下x0 = x(nt,:);

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

https://stackoverflow.com/questions/10068410

复制
相关文章

相似问题

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