You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

四阶龙格-库塔(Runge-Kutta 4)Octave代码报错排查请求

四阶龙格-库塔(RK4)代码崩溃排查(Octave环境)

问题背景

使用四阶龙格-库塔方法求解一阶微分方程组,Octave环境下代码无法运行,命令窗口无错误提示。调试确认k1、k2、k3、k4计算正常,但执行v(i+1,:)赋值时程序崩溃。

原始代码

主脚本

clear all
clc


function dtdy=kernel(t,y,sigma,beta,rho)
  dtdy=zeros(2,1)
  dtdy(1)=sigma*y(2)
  dtdy(2)=rho*y(2)+beta*y(1)
end

sigma=1;
rho=-0.9;
beta=-25;
h=0.08;
t=0:h:10;
y0=[0 0.01];

Rk4=ode4(@(t,y)kernel(t,y,sigma,beta,rho),t,y0);

ode4函数实现

function[tout,v]=ode4(odefun,tspan,v0)
v=zeros(length(tspan),length(v0));
v(1,:)=v0 %initial condition for y(0)
h=tspan(2)-tspan(1); % extract h value from tspan
tout=tspan;

for i=1:(length(tspan)-1)
 
  k1=odefun(tspan(i),v(i,:));
  k2=odefun(tspan(i)+(h/2),v(i,:)+(h/2).*k1);
  k3=odefun(tspan(i)+(h/2),v(i,:)+(h/2).*k2);
  k4=odefun(tspan(i)+h,v(i,:)+h.*k3);
  v(i+1,:)=v(i,:)+(h/6)*(k1+(2*k2)+(2*k3)+k4);
end
end

错误原因

核心问题是向量维度不匹配:

  • kernel函数返回的dtdy是2x1列向量,但主脚本中初始值y0是1x2行向量,ode4函数中v(i,:)也是行向量
  • 行向量与列向量进行逐元素运算时,Octave会触发维度不兼容错误,导致v(i+1,:)赋值失败

修复方案

统一所有状态向量的维度,推荐使用行向量匹配v的矩阵结构(每行对应一个时间点的状态),同时补充分号避免冗余输出:

修复后主脚本

clear all
clc

function dtdy=kernel(t,y,sigma,beta,rho)
  dtdy=zeros(1,2); % 修改为1x2行向量,匹配v的行维度
  dtdy(1)=sigma*y(2);
  dtdy(2)=rho*y(2)+beta*y(1);
end

sigma=1;
rho=-0.9;
beta=-25;
h=0.08;
t=0:h:10;
y0=[0 0.01]; % 保持行向量,与kernel返回值维度一致

Rk4=ode4(@(t,y)kernel(t,y,sigma,beta,rho),t,y0);

修复后ode4函数

function[tout,v]=ode4(odefun,tspan,v0)
v=zeros(length(tspan),length(v0));
v(1,:)=v0; % 补充分号,避免冗余输出
h=tspan(2)-tspan(1);
tout=tspan;

for i=1:(length(tspan)-1)
 
  k1=odefun(tspan(i),v(i,:));
  k2=odefun(tspan(i)+(h/2),v(i,:)+(h/2).*k1);
  k3=odefun(tspan(i)+(h/2),v(i,:)+(h/2).*k2);
  k4=odefun(tspan(i)+h,v(i,:)+h.*k3);
  v(i+1,:)=v(i,:)+(h/6)*(k1+(2*k2)+(2*k3)+k4);
end
end

验证说明

修复后所有向量维度统一为行向量,迭代过程中运算逻辑兼容,代码可正常运行并输出RK4求解结果。若偏好使用列向量,可将初始值改为y0=[0; 0.01],同时将kernel返回的dtdy保持列向量,在ode4中修改v(1,:)=v0';即可。

内容的提问来源于stack exchange,提问作者MatDef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:02:47