MATLAB调用plot命令时报向量长度不一致错误排查
报错原因定位与修正方向
这个Vectors must be the same length报错确实是代码逻辑不匹配导致的,具体问题点和修正方向如下:
直接触发报错的长度不匹配来源
- 先核对各向量的实际长度:
欧拉-丸山求解器输出的时间向量t、数值解向量Y的长度都是b+1=6(从t=0到t=1按0.2步长采样,共6个点),这部分实现逻辑没有问题。
问题出在精确解ExactY的计算:当前代码直接用randn_numbers返回的W代入公式(2^(1/5)+(1/2)*W).^3计算结果,但randn_numbers输出的W和输入求解器的deltaW长度一致——也就是对应5个时间步的布朗运动累计增量,没有包含t=0时刻的初始采样点,总长度仅为5,和t、Y的6个点长度对不齐,直接触发plot的长度校验报错。 - 对应修正方式:
对W做长度校准:t=0时刻布朗运动的取值固定为0,需要在W的开头拼接初始值0,让它的长度和时间向量t对齐为b+1个点,再代入精确解的公式计算。
后续需要注意的连带逻辑问题
- 你当前写的精确解和自定义的漂移、扩散项并不匹配:现有
F=@(t,y) y^(1/2); G=@(t,y) 2*y对应的随机微分方程,解析解并不是你写的三次方形式,就算解决了长度不匹配的问题,后续绘制的数值解和精确解曲线也不会对应,还存在初始常数取值和Y0不一致的问题,需要重新根据选定的SDE推导匹配的解析解表达式。 - 求解器内部对
deltaW的维度要求是a行b列(每列对应一个时间步的布朗增量),如果randn_numbers返回的deltaW维度不符合这个要求,后续还会出现维度运算报错,可以提前用size(deltaW) == [a, b]做校验。
内容的提问来源于stack exchange,提问作者JulianAngussmith
相关产品推荐
相关产品推荐

