繁体   English   中英

在 Matlab 中使用 Adams-Bashforth 方法求解 Lorenz-System 方程

[英]Using Adams-Bashforth method in Matlab to solve Lorenz-System Equation

我正在尝试在这里使用我的二阶 Adams-Bashforth 函数:

function [t,x] = Adams(f,t_max,x0,N)
  h = t_max/N;
  t = linspace(0,t_max,N+1);  
  x = zeros(2,N+1);
  x(:,1) = x0;
  x(:,2) = x0 + h.*(f(t(1),x(:,1)));
  for i=2:N
    x(:,i+1) = x(:,i) + h.*((3/2.*f(t(i),x(:,i))-(1/2).*f(t(i-1),x(:,i-1)))); 
  end
end

为了解决洛伦兹系统方程。 但是,每当我尝试调用该函数时,都会出现错误。

sigma = 10;
beta = 8/3;
rho = 28;
f = @(t,a) [-sigma*a(1) + sigma*a(2); rho*a(1) - a(2) - a(1)*a(3); -beta*a(3) + a(1)*a(2)];
[t,a] = Adams(f,10,[1 1 1],100);
plot3(a(:,1),a(:,2),a(:,3))

输出:“无法执行分配,因为左侧的大小是 2×1,而右侧的大小是 1×3。

Project>Adams 中的错误(第 55 行)x(:,1) = x0;"

是我的函数的问题,还是我调用函数的方式? 任何帮助,将不胜感激。

在亚当斯函数的第 5 行: x(:,1) = x0;

输入x0是初始条件[1 1 1]大小为 [3x1] 的行向量,但x是大小为zeros(2,N+1)或 [2x101] 的数组。

这里有几个错误,首先你将一个行向量分配给一个冒号向量,不仅如此,还有数组x的第一列中容器的大小是 [2x1] ,它的大小与x0 这就是错误告诉你的。

该功能在那里有问题,除非您根据您尝试实现的方法的原始意图对其进行调试,否则它将无法工作。

请注意,在脚本中 f=@(t,... 也应该有一个输入t ,但表达式[-sigma*a(1) + sigma*a(2); rho*a(1) - a(2) - a(1)*a(3); -beta*a(3) + a(1)*a(2)];中没有t [-sigma*a(1) + sigma*a(2); rho*a(1) - a(2) - a(1)*a(3); -beta*a(3) + a(1)*a(2)];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM