首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ode45不传递参数(MATLAB)

ode45不传递参数(MATLAB)
EN

Stack Overflow用户
提问于 2014-06-13 15:52:42
回答 1查看 350关注 0票数 0

我在matlab中实现了一种滤波算法,在参数传递方面遇到了一些困难。

我的动力是由功能控制的:

代码语言:javascript
复制
function zdot = VortexDynamics(t, z, vorticity)
for ii=1:length(vorticity),
    zdot(ii,1) = 1i/(2*pi) * sum(  vorticity([1:ii-1,ii+1:end])  .* ( z(ii) - z([1:ii-1,ii+1:end])  ) ./ (abs(z(ii) - z([1:ii-1,ii+1:end])  ).^2 ) ) ;  
end
end

我最初用ode45计算轨迹,没有问题

代码语言:javascript
复制
 [t_true,z_true]=ode45(@VortexDynamics, tspan ,z0_true, OPTIONS, vorticity) ;

为了实现过滤器,我为每个时间步骤调用一个函数:

代码语言:javascript
复制
 [z_a , Gam, z_ens] = EnKF_nonlinear(num_tracers, Func_Observation, Observations(:,ii),vorticity,  [prev_t t], z_ens, Gam, W,R, VortexDynamics, H, N) ;

EnKF_nonlinear的定义如下:

代码语言:javascript
复制
 function [z_a, Gam_a, z_ens] = EnKF_nonlinear(num_tracers, Func_Observation, Observations,vorticity,  tspan, z0_est, Gam0_est, W,R, dynFunc, H,N )

在EnKF_nonlinear中,我需要再次将动态与ode45集成:

代码语言:javascript
复制
 for ii = 1:N

  [t_out, z_out] = ode45(dynFunc, tspan, z0_est(:,ii), vorticity);
  z_ens(:,ii) = z_out(end,:) ; 
 end

但我知道错误是:

代码语言:javascript
复制
 Error using VortexEnKF>VortexDynamics (line 85)
 Not enough input arguments.

 Error in VortexEnKF (line 63)
     [z_a , Gam, z_ens] = EnKF_nonlinear(num_tracers, Func_Observation,
     Observations(:,ii),vorticity,  [prev_t t], z_ens, Gam, W,R, VortexDynamics, H,
     N) ;

但VortexDynamics只要求t,z,涡度作为参数。在这两个函数中,我都以相同的方式调用ode45,但只有通过EnKFnonlinear调用它时才会得到错误。我不明白它怎么会没有正确的参数数调用。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-14 22:49:32

愚蠢的我,我忘了在ode45调用中包括一个[]作为精确选项的占位符。

代码语言:javascript
复制
ode45(dynFunc, tspan, z0_est(:,ii), [], vorticity);

将涡度参数传递给dynFunc,运行良好。

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

https://stackoverflow.com/questions/24209402

复制
相关文章

相似问题

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