MATLAB 中的 Ode45

Posted

技术标签:

【中文标题】MATLAB 中的 Ode45【英文标题】:Ode45 in MATLAB 【发布时间】:2017-12-22 16:48:47 【问题描述】:

我对 MATLAB 很陌生,我正在尝试使用 ode45() 函数集成两个函数。我的代码:

[w,x] = ode45( @(w,x) ( TSII - TFII ) * w , [0 2], 0 );

TSIITFII 是列向量 1x151,其中包含我的两个函数的值。 w 还没有任何价值,但我尝试将其设为长度为 1x151 的全零列向量,但这并没有解决我的问题。

我收到以下错误消息:

@(W,X)(TSII-TFII)*W returns a vector of length 151, but the length of initial conditions vector is 1.

@(W,X)(TSII-TFII)*W返回的向量和初始条件向量的元素个数必须相同。

是否可以将初始条件向量更改为与TSIITFII 相同的长度?

或者,我应该使用带有ode45() 的循环来生成 151 个值吗?

【问题讨论】:

【参考方案1】:

我猜了一下,但试试看:

ode45() 希望您的匿名函数 @(w,x) 在位置 x 处插入函数值。如果 TSII 和 TFII 是你写的表格函数值,它不会返回预期的结果。

您应该使用类似interp1(TSII,x) 而不是TSII。你的函数应该是这样的:

@(w,x) ( interp1(TSII,x) - interp1(TFII,x) ) .* w

另请注意 .* 用于元素智能乘法。

【讨论】:

以上是关于MATLAB 中的 Ode45的主要内容,如果未能解决你的问题,请参考以下文章

Matlab - ODE45 - 改变时间步数

如何在 MatLab 中使用 ode45 修复分配错误(ode45 函数的第 488 行)

Matlab ode45 基本设置

MatLab ode45 最小时间步长

matlab欧拉方程求解微分方程并和ode45对比结果

matlab ode45求解常微分方程模板