RK4 Windkessel误差的方法

3视图(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(我)+ 0.5 * k1 * h P (i) + 0.5 * k1,问(我));
清除所有
关闭所有
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 /小时)
如果(我> = 1 | |我< = 5)
问(i) = i + 1;%坡道
结束
Q (+ 5) = Q(我);%坡道
t (i + 1) = t(我)+ h;
k1 = f (t (i)、P (i)、问(我));
k2 = f (t(我)+ 0.5 * k1 * h P (i) + 0.5 * k1,问(我));
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(我)+ h等);
等地方,我不确定如何建议。你有两个不同的状态变量P和Q ?和衍生品都有时间,你知道的方程吗?如果是这样,那么你需要重写f和k的代码来解释这一点。也许分开f和k P和Q的变量,或者携带2-element状态向量。
你能把微分方程(s),你是工作吗?然后我们可以进一步建议。
3评论
oumi k
oumi k 2022年10月22日
是的,它是一个锯齿波函数。我指数用于定义锯齿最小和最大射程所以重复1 - 5垂直轴和水平轴将连续时间t。

登录置评。

更多的答案(0)

类别

找到更多的在矩阵和数组帮助中心文件交换

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!