Windkessel错误的RK4方法

4次浏览(最近30天)
oumi k
oumi k 2022年10月21日
评论道: oumi k2022年10月22日
我有这些错误
试图访问P(1.16667);索引必须为正整数或逻辑整数。
误差@(t,P,Q)(-P(t)/(R*C))+(Q(t)/C)
RK4_WINDKESSEL错误(第24行)
k2=f(t(i)+0.5*k1*h, P(i)+0.5*k1, Q(i));
清除所有
关闭所有
clc
%的参数
R = 1.5;%的阻力
C = 4;%的合规
h = 1;%步长
t = 1: h: 100;%的时间向量
P (1) = 1;%初始条件
问(1)= 1;%初始条件
f = @ (t, P, Q) (- P (t) / (R * C)) + (Q (t) / C);
% RK4循环
i = 1:装天花板(100 /小时)
If (i>=1 || i<=5)
问(i) = i + 1;%坡道
结束
Q (+ 5) = Q(我);%坡道
t (i + 1) = t(我)+ h;
k1 = f (t (i)、P (i)、问(我));
k2=f(t(i)+0.5*k1*h, P(i)+0.5*k1, Q(i));
k3 = f (t(我)+ 0.5 * k2 * h P (i) + 0.5 * k2);
k4 = f (t(我)+ k3 * h P (i) + 0.5 * k3);
P (i + 1) = P (i) + (1 / h) * 6 * (k1 + 2 * k2 + 2 * k3 + k4);
结束
情节(t, P)
包含(“时间”)
ylabel(压力)

接受的答案

詹姆斯Tursa
詹姆斯Tursa 2022年10月21日
编辑:詹姆斯Tursa 2022年10月21日
多个错误。当你调用函数句柄f时,假设P和Q是在t时刻传递的值。它们不是函数或函数句柄。所以只用P和Q,不用P(t)和Q(t)
f = @ (t, P, Q) (- P / (R * C)) + (Q / C);
然后在RK4代码中,k不在t计算中。所以t部分的调用应该是这样的:
K1 =f(t(i),等等);
k2 = f (t(我)+ 0.5 * h等);
k3 = f (t(我)+ 0.5 * h等);
K4 =f(t(i)+ h,等等);
关于etc部分,我还不确定如何建议。你有两个不同的状态变量P和Q吗?两者都有时间导数,你们知道方程吗?如果是这样,那么你需要重写f和k的代码来解释这个。也许P和Q变量的f和k是分开的,或者携带一个2元素的状态向量。
你能把你正在处理的微分方程贴出来吗?然后我们再进一步建议。
3评论
oumi k
oumi k 2022年10月22日
是的,这是一个锯齿函数。i索引用于定义锯齿最小和最大范围,因此垂直轴和水平轴上的1-5重复将是连续时间t。

登录评论。

更多答案(0)

标签

世界杯预选赛小组名单社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!世界杯预选赛小组名单

开始狩猎!

Baidu
map