matlab求解数值微分方程[图片]

slsn1g29  于 2023-01-02  发布在  Matlab
关注(0)|答案(1)|浏览(196)

我正在解这个数值微分方程,有人能帮忙吗?

clc;
clear;
syms A1(z) A2(z)
lamda1 = 1560*(10^-9);
c=3*(10^8);
d_eff=27*(10^-12);
omga1=(2*pi*c)/(lamda1);
omga2=omga1*2;
n=2.2;
k1=(n*omga1)/c;
k2=(n*omga2)/c;
ode1 = diff(A1) == (2*i*(omga1^2)*d_eff*A2*conj(A1)*exp(-i*(2*k1-k2)*z))/(k1*(c^2));
ode2 = diff(A2) == (i*(omga2^2)*d_eff.*(A1.^2).*exp(i*(2*k1-k2)*z))/(k2*(c^2));
odes = [ode1; ode2];
cond1 = A1(0) == 1;
cond2 = A2(0) == 0;
conds = [cond1; cond2];
M = matlabFunction(odes)
sol = ode45(M(1),[0 20],[2 0]);
sdnqo3pr

sdnqo3pr1#

在这个问题中,两个ODE都是耦合,因此只有1个ODE需要解:

      1. -**使用第一个等式写出
A1=f(A2,dA2/dz)

并将该表达式代入第二方程。

      1. -**重组
n1=1j*k1^4/k2^2*1/deff*.25

n2=1j*3*(k1-k2)

现在要解的常微分方程

y'=n1/y^2*exp(n2*z)
      1. -它显然可以在MATLAB中完成,但对于这个特定的ODE**,在我看来Wolfram在线ODE符号解算器做得更好。

将获得的前一点的ODE输入到此链接中可用的ODE求解器中
https://www.wolframalpha.com/input?i=y%27%27+%2B+y+%3D+0
并解决了

      1. -**A2的一般(符号)解为

请注意,我仅在WolframODE解算器中使用k1代替n1,使用k2代替n2
改写:通解的k1k2表达式不是问题方程的波数k1k2,请相应替换。

      1. -**现在使用第2点中的表达式获得A1
      1. -**我在问题中发布的MATLAB代码中发现了2个可能的错误,问题发起人不应忽视这些错误:

在贴出的MATLAB代码的最右侧,指数表达式

    • 6.1. -**两者均显示
  • exp(-i (2 * k1-k2) z))/(k1 *(c^2))

这里有(k1*(c^2))除以指数,而在这个问题中,没有一个指数显示出分母,它们各自的指数。

    • 6.2. -**在这个问题的指数表达式中,dkdelta k显然是k2-k1k1-k2,这里可能存在符号模糊的空间,这可能会将波解投射到相反的方向上,但这里的点在哪里
*exp(-1i*(2*k1-k2)*z)

应该是

*exp(-1i*2*(k1-k2)*z)

或者只是

exp(-1i*(k1-k2)*z)
    • 6.3. -**是的,在MATLAB中,(-1)^.5可以用1j1i表示,但正如问题中提供的MATLAB代码所写的那样,由于只有一大块代码可用,因此可以公平地假设没有这样的i=1j

相关问题