【问题标题】:Solving an ode numerically in matlab在matlab中数值求解一个ode
【发布时间】:2014-09-15 23:51:57
【问题描述】:

我了解数值求解的逻辑,matlab 从未知值开始,然后循环直到方程收敛到一个值。但是,我不明白输入方程式的正确方法。我认为使用ode45 函数是最好的方法。我有以下等式U^(n+1) = U^n - (t'*3250/10)-(t'/2)(.004(v^n)^2/10。 我怀疑我的方程需要采用不同的形式,但是我不确定让 matlab 求解方程的正确方法。

我尝试按原样在 matlab 中输入方程,但是它抱怨 v 和 n 是未知变量,我不确定如何处理这些变量。求解这个方程的最终目标是找到 v 的值。

C=@(t,v) u^n-(3250*t'/10)-(t'/2)*((.004*(v^n)^2)/10)
[t,v]=ode45(C,[0,5],1)

产生以下错误:

Undefined function or variable 'u'.

Error in @(t,v)u^n-(3250*t'/10)-(t'/2)*((.004*(u^n)^2)/10)


Error in odearguments (line 88)
f0 = feval(ode,t0,y0,args{:});   % ODE15I sets args{1} to yp0.

Error in ode45 (line 114)
{neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...

Error in ae301_3 (line 2)
[t,v]=ode45(C,[0,5],1)

【问题讨论】:

  • 呃,你用什么功能/工具箱来解决问题?检查它的文档?
  • ode45mathworks.com/help/matlab/ref/ode45.html 文档中的示例对我的情况没有帮助
  • 所以,向我们展示您的代码。我怀疑你没有正确声明你的函数。
  • u^nv^nt' 应该是什么?这是您尝试翻译方程式还是recurrence relations?文档不清楚怎么办?你也可以通读这个MathWorks blog post
  • 你对ODE求解逻辑的理解有误。 Matlab 的ode45 使用一步龙格-库塔法。有关此类方法的背景信息,请参阅en.wikipedia.org/wiki/…。您需要提供有关问题中变量的更多信息,尤其是unt'

标签: matlab ode


【解决方案1】:

ode 求解器用于常微分方程。您的方程不是微分方程,而是非线性代数方程。
在 Matlab 中,您可以使用 fzero 解决它。但是,您的函数可以很容易地重新排列为显式,并且可以在没有任何迭代过程的情况下解析求解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    相关资源
    最近更新 更多