matlab - COPY_OF_ODEFUN返回的向量长度为1,但初始条件向量的长度为2
问题描述
我试图通过 ode45 解决 Copy_of_odefun。我得到了错误:COPY_OF_odefun返回的向量长度为1,但初始条件向量的长度为2。我的代码如下。
主功能:
clear all; clc;
%% Inpput parameters
lambda = 0.0625;
H = 2.3;
zw_H = 2;
ztop_H = 8;
Cdh = 1.2;
a = 9.6 * lambda;
Cd = Cdh * (1 - exp(-2 * a));
d_H = 0.066; %% Macdonald, 2000(lambda = 0.05)
%% Running
t = linspace(8,0.01,100);
y0 = [1.75; 0.05];
[t,y] = ode45(@Copy_of_odefun,t,y0);
Copy_of_odefun 功能:
function dy = Copy_of_odefun(t,y)
global H lambda Cd
%% mixing length closure parameter
% within canopy
z_H1 = [0.01 1];
lc_H = [0.2463 0.2463];
lc_dz = [0 0];
% shear layer
z_H2 = [1.01 2];
lm_H = [0.2516 0.7736];
lm_dz = [0.5273 0.5273];
% inertial layer
z_H3 = [2.01 8];
lz_H = [0.7776 3.1736];
lz_dz = [0.4 0.4];
% for whole computation domain
zm_H = [z_H1 z_H2 z_H3];
l3_H = [lc_H lm_H lz_H];
l3_dz = [lc_dz lm_dz lz_dz];
% interpolate to obtain value at each point of t
lx_H = interp1(zm_H,l3_H,t);
lx_dz = interp1(zm_H,l3_dz,t);
% second order translated into one order
dy = [y(2); (-lx_H * H * lx_dz * y(2)^2 / (H^2 * lx_H^2 * y(2)) + 0.25 * y(1)^2 * lambda / H * Cd / (H^2 * lx_H^2 * y(2)))];
解决方案
问题出在全局变量中。您需要在函数和主脚本中标记它们。只需添加
global H lambda Cd
到主脚本,它将运行。
第二个参数也有问题ode45
- 它应该只是[8, 100]
,而不是所有需要的值的向量t
。一些很好的例子可以在文档中找到。代码中可能还有其他一些问题 - 它提供NaN
了大多数y
值。
推荐阅读
- algorithm - 他们是如何找到以下代码的下界的?
- php - 通过 imap_search() 获取新邮件
- jquery - 在 Woocommerce 中悬停时翻转产品图像
- python - Python SDF 阅读器失败
- javascript - 将 cryto.generateKeyPair 与 jsonwebtoken 一起使用
- c# - 在没有视图的情况下执行 Web 控制器操作 [c#]
- python - 无法为 fasttext 加载输入数据
- ios - 为什么这是一个保留周期?
- wordpress - WordPress metabox - 可编辑的 div 作为输入
- wpf - 完整列标题的 DataGrid 上下文菜单