Недостаточно входных аргументов для функции ode45 - PullRequest
1 голос
/ 08 апреля 2019

Я настраиваю функцию, которая может решить следующее дифференциальное уравнение для лазерной системы с перечисленными параметрами. Тем не менее, всякий раз, когда я запускаю свой код, я получаю ошибки, что не хватает входных аргументов для уравнения (dydt). Я не уверен, где происходит ошибка в коде, но я верю, что это может быть связано с тем, как я определил y. Я ожидаю получить гауссово распределение на графике, но код останавливается на dydt. Он не обрабатывает переменные. Спасибо!

        function dydt = 4_Lasers(t,y)

        beta=1;
        p0=10;


        tau2=1e-7;

        t = 1;
        taupulse=tau2*100000;

        taup=tau2/100;

        p=p0*exp(-(t/taupulse)^2);

        dydt = [(1/tau2)*(p-y(1)-y(1)*y(2)); (y(2)/taup)* 
        (y(1)-1)+beta*y(1)/tau2];

        end

        clear; close all;
        [t,y] = ode45(@4_Lasers,[0 1e-6],[0; 0]);
         plot(t,y(:,1),'r',t,y(:,2),'b')
        title('p0=10,taupulse/tau2=1.5,tau2/taup=100');
        xlabel('Time t');
        ylabel('Amplitude');
        legend('Photodensity','population inversion')

1 Ответ

1 голос
/ 08 апреля 2019

Невозможно воспроизвести с этим кодом:

clear; close all;
[t,y] = ode45(@Lasers,[0 1e-6],[0 0]);
plot(t,y(:,1),'r',t,y(:,2),'b')
title('p0=10,taupulse/tau2=1.5,tau2/taup=100');
xlabel('Time t');
ylabel('Amplitude');
legend('Photodensity','population inversion')



function dydt = Lasers(t,y)

    beta=1;
    p0=10;

    tau2=1e-7;

    t = 1;
    taupulse=tau2*100000;

    taup=tau2/100;

    p=p0*exp(-(t/taupulse)^2);

    dydt = [(1/tau2)*(p-y(1)-y(1)*y(2)); (y(2)/taup)*(y(1)-1)+beta*y(1)/tau2];

end
...