ode45 中的 MATLAB 错误:必须 return 列向量
MATLAB error in ode45: must return a column vector
我的代码中出现此错误:
- 使用 odearguments 时出错(第 91 行)
@(T,C)(C1.*((V1.P_OPEN)+V2).(CA_ER-C))-((V3.*(C .^2))/(C.^2+(K3^2)))
必须 return 列向量。
但是在 MATLAB 文档中有一个示例 Example 3,其中向量作为输入给出,但它工作得很好。为什么我的代码出现错误?
这是我的代码:
Ca_ER = 10e-6;
c0 = 2e-6;
c1 = .185;
v1 = 6;
v2 = .11;
v3 = .09e6;
v4 = 1.2;
k3 = .1e-6;
a1 = 400e6;
a2 = 0.2e6;
a3 = 400e6;
a4 = 0.2e6;
a5 = 20e6;
b2 = .21;
d1 = 0.13e-6;
d2 = b2/a2;
d3 = 943.4e-9;
d4 = d1*d2/d3;
d5 = 82.34e-9;
IP= .5e-6;
Ca=.001e-6:.01e-6:1e-6;
num=Ca.*IP.*d2;
deno= (Ca.*IP+ IP*d2+d1*d2+Ca.*d3).*(Ca+d5);
p_open=( num./deno).^3; %this is the vector input
dc=@(t,c) (c1.*((v1.*p_open)+v2).*(Ca_ER-c))-((v3.*(c.^2))/(c.^2+(k3^2)));
[t,c]=ode45(dc,linspace(0, 100, 1000),.19e-6);
plot(t,c);
错误就是这样。 ode45
需要 return 一个列向量,但您的变量 Ca
实际上是一个 行向量 。所以在匿名函数内部,所有的处理都是通过一个行向量来完成的,return输入的是一个行向量,所以就产生了错误。
罪魁祸首是这句话:
Ca=.001e-6:.01e-6:1e-6;
以上语法声明了一个行向量。因此,要将其转换为列向量,只需进行转置:
Ca=.001e-6:.01e-6:1e-6;
Ca = Ca.'; %// Transpose
我的代码中出现此错误:
- 使用 odearguments 时出错(第 91 行) @(T,C)(C1.*((V1.P_OPEN)+V2).(CA_ER-C))-((V3.*(C .^2))/(C.^2+(K3^2))) 必须 return 列向量。
但是在 MATLAB 文档中有一个示例 Example 3,其中向量作为输入给出,但它工作得很好。为什么我的代码出现错误?
这是我的代码:
Ca_ER = 10e-6;
c0 = 2e-6;
c1 = .185;
v1 = 6;
v2 = .11;
v3 = .09e6;
v4 = 1.2;
k3 = .1e-6;
a1 = 400e6;
a2 = 0.2e6;
a3 = 400e6;
a4 = 0.2e6;
a5 = 20e6;
b2 = .21;
d1 = 0.13e-6;
d2 = b2/a2;
d3 = 943.4e-9;
d4 = d1*d2/d3;
d5 = 82.34e-9;
IP= .5e-6;
Ca=.001e-6:.01e-6:1e-6;
num=Ca.*IP.*d2;
deno= (Ca.*IP+ IP*d2+d1*d2+Ca.*d3).*(Ca+d5);
p_open=( num./deno).^3; %this is the vector input
dc=@(t,c) (c1.*((v1.*p_open)+v2).*(Ca_ER-c))-((v3.*(c.^2))/(c.^2+(k3^2)));
[t,c]=ode45(dc,linspace(0, 100, 1000),.19e-6);
plot(t,c);
错误就是这样。 ode45
需要 return 一个列向量,但您的变量 Ca
实际上是一个 行向量 。所以在匿名函数内部,所有的处理都是通过一个行向量来完成的,return输入的是一个行向量,所以就产生了错误。
罪魁祸首是这句话:
Ca=.001e-6:.01e-6:1e-6;
以上语法声明了一个行向量。因此,要将其转换为列向量,只需进行转置:
Ca=.001e-6:.01e-6:1e-6;
Ca = Ca.'; %// Transpose