MATLAB上的非线性微分方程组

时间:2016-06-18 20:40:24

标签: matlab ode runge-kutta

我是MATLAB的新手,我正在尝试使用Runge-Kutta算法解决Friedmann方程式。

如果你不知道,弗里德曼方程有以下形式:

用于扩展宇宙的弗里德曼方程 enter image description here

,其中曲率k由值-1, 0 or 1给出。

此外,压力p的状态方程式由下式给出:

压力的状态方程

enter image description here

所以,我有Runge-Kutta算法:

    function [t,x,y] =rk_2_1(f,g,t0,tf,x0,y0,n)
  h=(tf-t0)/n;
  t=t0:h:tf;
  x=zeros(n+1,1); %reserva memoria para n+1 element(i)os del vect(i)or x(i)
  y=zeros(n+1,1);
  x(1)=x0; y(1)=y0;

  for i=1:n
    k1=h*f(t(i),x(i),y(i));
    l1=h*g(t(i),x(i),y(i));
    k2=h*f(t(i)+h/2,x(i)+k1/2,y(i)+l1/2);
    l2=h*g(t(i)+h/2,x(i)+k1/2,y(i)+l1/2);
    k3=h*f(t(i)+h/2,x(i)+k2/2,y(i)+l2/2);
    l3=h*g(t(i)+h/2,x(i)+k2/2,y(i)+l2/2);
    k4=h*f(t(i)+h,x(i)+k3,y(i)+l3);
    l4=h*g(t(i)+h,x(i)+k3,y(i)+l3);

    x(i+1)=x(i)+(k1+2*k2+2*k3+k4)/6;
    y(i+1)=y(i)+(l1+2*l2+2*l3+l4)/6;        
  end
end

,但我有三个问题:

  1. 我不知道如何在我的功能上象征性地设置密度\rho
  2. 我不知道定义第二个函数g=@(t,x,y),因为我有一个关于时间的衍生物。
  3. 最后一个,k=sqrt(-1)会发生什么?因为我需要这个结果符号,但我想要数字的整个结果。
  4. 很抱歉,如果我的问题是基本的,但我不知道该怎么做,我需要一些建议或帮助。

    非常感谢你:)

0 个答案:

没有答案