>
RK2와 RK4의 방법을 사용하여 matlab에서 Lorenz System을 해결하려고했습니다. 두 가지 방법 모두에 대한 스크립트가 있었는데 이제 문제는 다음을 수렴하는 방법입니다.

y(1) = @(t,y) 10*(y(2)-y(1));
y(2) = @(t,y) y(1)*(28-y(3))-y(2);
y(3) = @(t,y) y(1)*y(2)-8*y(3)/3;

간단히 y의 열 벡터로

여기서 내가 바라던 것이 있는데 결코 효과가 없었습니다 :

y = zeros(3,1);
y(1) = @(t,y) 10*(y(2)-y(1));
y(2) = @(t,y) y(1)*(28-y(3))-y(2);
y(3) = @(t,y) y(1)*y(2)-8*y(3)/3;

다음은 RK2 기능입니다. 내 RK4는이 RK2와 비슷하지만, 이것이 실제로 함수 벡터가 필요한 이유를 이해하는 데 도움이 될 수 있습니다.

function y = RK2(fcn,lrange,urange,step,init)
%fcn = vector of functions
%lrange = lower bound
%urange = upper bound
%step = number of steps
%init = initial value
row = size(fcn,1);
stepsize = (urange-lrange)/step;
y = zeros(row,step);
%initializing vector of y
y(:,1) = init;
%initial condition
t = zeros(1,step+1);
%initializing vector of t
if row ~= size(init,1)
    disp('number of functions and number of initial values do not match');
end
for n = 1:step
    t(n) = (n-1)*stepsize;
    t(step+1) = urange;
    y1 = stepsize.*fcn(t(n),y(:,n));
    y2 = stepsize.*fcn(t(n) + stepsize/2, y(:,n) + y1./2);
    y(:,n+1) = y(:,n) + y2;
end


  • 답변 # 1

    이것은 작동합니다. 함수 출력을 벡터로 만드십시오.

    y = @(t,y) [10*(y(2)-y(1)), y(1)*(28-y(3))-y(2), y(1)*y(2)-8*y(3)/3];
    y(1,[1;2;3])
    size(y(1,[1;2;3]))
    
    

  • 답변 # 2

    또는

    f = cell(3,1); % create a cell array
    % initialize
        f{1} = @(t) t^2;
        f{2} = @(t) cos(2*t);
        f{3} = @(t) 4*(t^3);
    % access properties
        size(f)(1); % access the number of functions
        f{1} % access the first function
        f{2}(17) % evaluate the second function at x = 17
    
    
    와이즈 비즈

    문서 : https://www.mathworks.com/help/matlab/ref/cell.html

    또는 옥타브에서 :

    A cell array is a data type with indexed data containers called cells, where each cell can contain any type of data.

    f = cell(3,1); # create a cell array # initialize f(1) = @(t) t^2; f(2) = @(t) cos(2*t); f(3) = @(t) 4*(t^3); # access properties size(f)(1); # access the number of functions f{1} # access the first function f{2}(17) # evaluate the second function at x = 17

관련 자료

  • 이전 ios - 데이터 소스를 변경할 때 UICollectionView의 부드러운 애니메이션
  • 다음 python - 텍스트에서 유사한 의미의 단어를 공통 동의어로 대체하는 방법