【问题标题】:Not enough input arguments for ode45 functionode45 函数的输入参数不足
【发布时间】:2019-04-08 16:38:37
【问题描述】:

我正在设置一个函数,该函数可以求解具有所列参数的激光系统的以下微分方程。但是,每当我运行我的代码时,我都会不断收到错误,即方程(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')

【问题讨论】:

  • 在 Matlab 中函数名或变量名不能以数字或下划线开头。尝试将其重命名为例如fourLasers
  • 我尝试更改它,但我仍然收到相同的错误消息,即 dydt 行中没有足够的输入参数。
  • 我测试了你的代码,除了这个4_,一切都很好,并绘制了结果。但是他们是zeros

标签: matlab ode45


【解决方案1】:

无法使用此代码重现:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多