📜  在 MATLAB 中求解二阶齐次差分方程

📅  最后修改于: 2022-05-13 01:55:26.981000             🧑  作者: Mango

在 MATLAB 中求解二阶齐次差分方程

差分方程是涉及离散变量的函数('y')的通常连续值之间的差异的数学方程。在这里,离散变量意味着它仅定义为相差某个有限量的值,通常是一个常数(通常为“1”)。差分方程也可以定义为未知函数在一个或多个一般值下的差异之间的关系,论据如何。例如方程 Δy n+1 +y n = 2,也可以改写为:y n+2 -y n+1 +y n = 2 (因为,Δy n = y n+1 -y n

差分方程的阶:

差分方程的阶可以通过以下关系找到:

Order = ( (Higher Order - Lower Order)/(Unit of Increment) )

示例:考虑方程 3y n+2 -y n+1 +5y n = -12,其阶数为:

Order = ( (Higher Order - Lower Order)/(Unit of Increment) )       = ((n+2 - n)/(1))            = 2

因此,上述等式的阶数为“2”。因此,它可以称为特定的二阶差分方程。

齐次:如果上述方程的 RHS 为零,则具体可以称为二阶齐差分方程。

求解二阶齐次差分方程的步骤:

第 1 步:让给定的二阶差分方程为:

ayn+2+byn+1+cyn = 0

第2步:然后,我们将上述二阶差分方程简化为其辅助方程(AE)形式:

ar2+br+c = 0

第三步:然后,我们通过以下关系找到上述辅助方程(AE)的行列式:

Det = (b2 − 4ac)

第 4 步:如果上面找到的行列式是正数(2 个不同的实根 r 1和 r 2 ),那么 y n将是:

yn = C1r1n + C2r2n

第 5 步:否则,如果上面找到的行列式为零(2 等于实根,r 1 =r 2 =r),则 y n将是:

yn = (C1n + C2)r1n

第 6 步:否则,如果上面找到的行列式是负数(复根,r = α ± iβ),则 y n将是:

yn = Pn(C1cos(nθ) + C2sin(nθ)),
where P = √(α2+β2) and θ = tan-1(β/α)

如果给定任何初始条件,例如 y 0 = m 和 y 1 = n,那么我们将这两个方程代入上述方程,然后通过求解我们之前通过代入形成的方程来找到 C1 和 C2。然后我们重新代入方程'y n '中的C 1和C 2

以下代码中使用的 MATLAB 函数是:

  • disp('txt'):此方法向用户显示消息'txt'。
  • input('txt'):这个方法显示'txt'并等待用户输入一个值并按下回车键。
  • solve(eq):此方法解决其中存在的变量的“eq”。
  • abs(z):此方法返回 z 的复数模。
  • angle(z):此方法返回 z 的区间 [-π,π] 内的相位角。
  • subs(y, old, new):此方法返回 y 的副本,将所有出现的 old 替换为 new。
  • 简化(eq):此方法执行“eq”的代数简化。

示例 1:

Matlab
% MATLAB CODE (WITHOUT INITIAL CONDITIONS):
% To clear all variables from the current workspace
clear all  
  
% To clear all the text from the Command Window, resulting in a clear screen
clc        
disp("Solving 2nd Order Homogeneous Difference Equations in MATLAB | GeeksforGeeks")
  
% To Declare them as Variables
syms r c1 c2 n  
F=input('Input the coefficients [a,b,c]: ');
  
% Coefficients of the 2nd Order Difference Equation
a=F(1);b=F(2);c=F(3);  
  
% Auxiliary Equation Formed
eq=a*(r^2)+b*(r)+c;    
S=solve(eq);
  
% Roots of the Auxiliary Equation Formed
r1=S(1);r2=S(2);       
  
% Determinant of the Auxiliary Equation Formed
D=b^2-4*a*c;           
if D>0
    y1=(r1)^n;
    y2=(r2)^n;
    yn=c1*y1+c2*y2;
elseif D==0
    y1=(r1)^n;
    y2=n*((r2)^n);
    yn=c1*y1+c2*y2;
else
    P=abs(r1);
    t=angle(r1);
    y1=((P)^n)*cos(n*t);
    y2=((P)^n)*sin(n*t);
    yn=c1*y1+c2*y2;
end
disp ('The solution of the difference equation yn=')
disp(yn)


Matlab
% MATLAB CODE (WITH INITIAL CONDITIONS):
% To clear all variables from the current workspace
clear all  
clc        
disp("Solving 2nd Order Homogeneous Difference Equations in MATLAB | GeeksforGeeks")
  
% To Declare them as Variables
syms r c1 c2 n  
F=input('Input the coefficients [a,b,c]: ');
  
% Coefficients of the 2nd Order Difference Equation
a=F(1);b=F(2);c=F(3);  
  
% Auxiliary Equation Formed
eq=a*(r^2)+b*(r)+c;    
S=solve(eq);
  
% Roots of the Auxiliary Equation Formed
r1=S(1);r2=S(2);       
  
% Determinant of the Auxiliary Equation Formed
D=b^2-4*a*c;          
if D>0
    y1=(r1)^n;
    y2=(r2)^n;
    yn=c1*y1+c2*y2;
elseif D==0
    y1=(r1)^n;
    y2=n*((r2)^n);
    yn=c1*y1+c2*y2;
else
    P=abs(r1);
    t=angle(r1);
    y1=((P)^n)*cos(n*t);
    y2=((P)^n)*sin(n*t);
    yn=c1*y1+c2*y2;
end
IC=input('Enter the initial conditions in the form [y0,y1]:');
  
% Initial conditions
y0=IC(1);y1=IC(2);      
eq1=subs(yn,n,0)-y0;
eq2=subs(yn,n,1)-y1;
  
% Finding C1 & C2
[c1,c2]=solve(eq1,eq2); 
yn=simplify(subs(yn));
disp ('The solution of the difference equation yn=')
disp(yn)


输出:

y_{n+2} - 9y_{n} = 0

y_{n+2} + 4y_{n+1} + y_{n}= 0

示例 2:

MATLAB

% MATLAB CODE (WITH INITIAL CONDITIONS):
% To clear all variables from the current workspace
clear all  
clc        
disp("Solving 2nd Order Homogeneous Difference Equations in MATLAB | GeeksforGeeks")
  
% To Declare them as Variables
syms r c1 c2 n  
F=input('Input the coefficients [a,b,c]: ');
  
% Coefficients of the 2nd Order Difference Equation
a=F(1);b=F(2);c=F(3);  
  
% Auxiliary Equation Formed
eq=a*(r^2)+b*(r)+c;    
S=solve(eq);
  
% Roots of the Auxiliary Equation Formed
r1=S(1);r2=S(2);       
  
% Determinant of the Auxiliary Equation Formed
D=b^2-4*a*c;          
if D>0
    y1=(r1)^n;
    y2=(r2)^n;
    yn=c1*y1+c2*y2;
elseif D==0
    y1=(r1)^n;
    y2=n*((r2)^n);
    yn=c1*y1+c2*y2;
else
    P=abs(r1);
    t=angle(r1);
    y1=((P)^n)*cos(n*t);
    y2=((P)^n)*sin(n*t);
    yn=c1*y1+c2*y2;
end
IC=input('Enter the initial conditions in the form [y0,y1]:');
  
% Initial conditions
y0=IC(1);y1=IC(2);      
eq1=subs(yn,n,0)-y0;
eq2=subs(yn,n,1)-y1;
  
% Finding C1 & C2
[c1,c2]=solve(eq1,eq2); 
yn=simplify(subs(yn));
disp ('The solution of the difference equation yn=')
disp(yn)

输出:

y_{n+2} - 6y_{n+1} + 8y_{n}= 0, y_{0} = 1  and   y_{1} = 0

y_{n+2} + 8y_{n+1} + 16y_{n}= 0, y_{0} = 2 and  y_{1} = -20