精华内容
下载资源
问答
  • 问题:试用打靶法求二阶线性微分方程亮点边值的数值解:要求用Matlab编程计算,请给出一些例子,验证你的算法与程序的正确性。2.打靶法分析:非线性打靶法:非线性打靶法的基本原理是将两点边值问题(1)转化为下面...

    41528d3028836879cd698677c3999917.gif二阶非线性常微分方程的打靶法matlab实现.doc

    二阶非线性常微分方程的打靶法1.问题:试用打靶法求二阶非线性常微分方程亮点边值的数值解:要求用Matlab编程计算,请给出一些例子,验证你的算法与程序的正确性。2.打靶法分析:非线性打靶法:非线性打靶法的基本原理是将两点边值问题(1)转化为下面形式的初值问题令z=y′,将上述二阶方程降为一阶方程组3.Matlab源代码:创建M文件:functionys=dbf(f,a,b,alfa,beta,h,eps)ff=@(x,y)[y(2),f(y(1),y(2),x)];xvalue=a:h:b;%x取值范围n=length(xvalue)s0=a-0.01;%选取适当的s的初值x0=[alfa,s0];%迭代初值flag=0;%用于判断精度y0=rk4(ff,a,x0,h,a,b);ifabs(y0(1,n)-beta)epss2=s1-(y1(1,n)-beta)*(s1-s0)/(y1(1,n)-y0(1,n));x0=[alfa,s2];y2=rk4(ff,a,x0,h,a,b);s0=s1;s1=s2;y0=y1;y1=y2;endendxvalue=a:h:b;yvalue=y1(1,:);ys=[xvalue ,yvalue ];functionx=rk4(f,t0,x0,h,a,b)%rung-kuta法求每个点的近似值(参考大作业一)t=a:h:b;%迭代区间m=length(t);%区间长度t(1)=t0;x(:,1)=x0;%迭代初值fori=1:m-1L1=f(t(i),x(:,i));L2=f(t(i)+h/2,x(:,i) +(h/2)*L1);L3=f(t(i)+h/2,x(:,i) +(h/2)*L2);L4=f(t(i)+h,x(:,i) +h*L3);x(:,i+1)=x(:,i) +(h/6)*(L1+2*L2+2*L3+L4);end4.举例求二阶非线性方程的边值问题:在matlab控制台中输入:f=@(x,y,z)(x^2+z*x^2);x0l=0;x0u=2*exp(-1);alfa=0;beta=2;h=0.01dbf(f,x0l,x0u,y0l,y0u,h,1e-6);>>y=ans(:,2);x=ans(:,1);>>plot(x,y, -r )>>结果:再输入:>>m=0:0.01:2;>>n=m.*exp(-1/2*m);>>plot(n,m)>>plot(x,y, -r ,n,m, -b )5.结论:根据得到的图像,可以看到在x的初值一起末值也就是α和β两点做到了较好的逼近,但是中间部分的逼近不是很理想。我想可能是在编程的过程当中可能算法上有些问题。以后有机会再改进。

    展开全文
  • 同样的,我们先通过一个例子来看一下微分方程的求解流程,然后再引出相应的问题:du1dt=−u1+2u2,du2dt=u1−2u2.initial u(0)=[10]\frac{du_1}{dt}=-u_1+2u_2,\frac{du_2}{dt}=u_1-2u_2.\quad initial\ u(0)=\b...

    主要内容

    • 一阶微分方程的求解
    • 解耦
    • 二阶微分方程

    正文

    一阶微分方程的求解

    同样的,我们先通过一个例子来看一下微分方程的求解流程,然后再引出相应的问题:du1dt=u1+2u2,du2dt=u12u2.initial u(0)=[10]\frac{du_1}{dt}=-u_1+2u_2,\frac{du_2}{dt}=u_1-2u_2.\quad initial\ u(0)=\begin{bmatrix}1\\0\end{bmatrix}在这个例子中我们的目的是求解u(t)u(t)。需要注意的是,下标与括号中的意义是不相同的,括号中的tt表示自变量,是一个变动的量,可以理解为时间,而下标主要是用于区分某个变量的。比如u(0)=[10]u(0)=\begin{bmatrix}1\\0\end{bmatrix}表示在00时刻,u1=1,u2=0u_1=1,u_2=0。通过方程我们可以知道du2dt>0du1dt<0\frac{du_2}{dt}>0,\frac{du_1}{dt}<0,所以随着时间的增加,u1u_1会增加,u2u_2会减少;或者可以理解为u1u_1流向了u2u_2,这是一个动态的变化过程,不过最终会达到某种状态,我们可以通过计算发现这种状态。这里只是对微分方程做了简单的介绍,这是解题非常重要的一步,理解微分方程的意义。

    第一步我们使用矩阵将微分方程抽象成线性代数的形式:dudt=Auand A=[1212]\frac{du}{dt}=Au,\quad and \ A=\begin{bmatrix}-1&2\\1&-2\end{bmatrix}在之前的介绍中,我们已经知道,uku_k的增长与矩阵的特征值和特征向量有关,所以接下来我们研究矩阵的特征值和特征向量。通过:det(AλI)=0det(A-\lambda I)=0,我们可以求出两个特征值λ1=0,λ2=3\lambda_1=0,\lambda_2=-3,然后根据特征值可以解得对应的特征向量为x1=[21]x2=[11]x_1=\begin{bmatrix}2\\1\end{bmatrix},x_2=\begin{bmatrix}1\\-1\end{bmatrix}

    第二,我们给出通解的形式,这里不追究通解的形式为什么会是这个样子。i=1nCieλitxi\sum^n_{i=1}C_ie^{\lambda_it}x_i其中λi\lambda_i是特征值,xix_i是特征向量。实际上,这个通解还可以使用矩阵的形式表达:》》》》????第一步我们已经求得了矩阵的特征值和特征向量,带入公式可以得到通解为:u(t)=C11[21]+C2e3t[11]u_{(t)}=C_11\begin{bmatrix}2\\1\end{bmatrix}+C_2 e^{-3t}\begin{bmatrix}1\\-1\end{bmatrix}而要得到完整的解,我们还需要带入初值u0u_0。最终可以得到:u(t)=13[21]+13e3t[11]u_{(t)}=\frac{1}{3}\begin{bmatrix}2\\1\end{bmatrix}+\frac{1}{3}e^{-3t}\begin{bmatrix}1\\-1\end{bmatrix}这个结果表明了一些信息:随着tt的增加,后面的一部分会趋向于00,最终不起作用。而前面的一部分是保持稳定的,这就是我们所谓的达到的稳态。

    在实际的求解中,会有这样的规律:

    • 当特征值为负数的时候,u(t)u(t)趋向于00,这个特点很明显。但是,复杂的是当特征值为复数的时候,只有复数实数部分会决定u(t)u(t)的趋势。
    • 稳态存在时,在这个例子中,我们有一个特征值为00,其余的特征值为负数。在有更多的变量的情况下,至少需要有一个特征值为00,其余的特征值为负数。
    • 如果有任何特征值的实数部分大于零,则u(t)u(t)无法收敛。

    解耦

    在前面的例子中,对于矩阵AAu1,u2u_1,u_2是耦合的,不过我们可以通过特征值和特征向量对其解耦,也就是对角化。du1dt=u1+2u2,du2dt=u12u2.initial u(0)=[10]\frac{du_1}{dt}=-u_1+2u_2,\frac{du_2}{dt}=u_1-2u_2.\quad initial\ u(0)=\begin{bmatrix}1\\0\end{bmatrix}u=Svu=Sv,对于dudt=Au=ASv\frac{du}{dt}=Au=ASv,进一步化简,Sdvdt=ASvS\frac{dv}{dt}=ASv,然后我们得到:dvdt=S1ASv=Λv\frac{dv}{dt}=S^{-1}ASv=\Lambda v dv1dt=λ1v1,dv2dt=λ2v2\frac{dv_1}{dt}=\lambda_1v_1,\quad \frac{dv_2}{dt}=\lambda_2v_2这个得到的方程,各未知数之间是没有联系的,是不耦合的。根据前面的规律,又可以得到这样的方程:v(t)=eΛtv(0)v(t)=e^{\Lambda t}v(0)不过我们希望得到的是关于u(t)u(t)的解耦方程。类似的:u(t)=eAtu(0)=SeΛtS1u(0)u(t)=e^{At}u(0)=Se^{\Lambda t}S^{-1}u(0)这个方程的关键在于我们如何找到eAte^{At}SeΛtS1Se^{\Lambda t}S^{-1}的关系

    eAte^{At}SeΛtS1Se^{\Lambda t}S^{-1}
    首先回顾一下幂级数公式:ex=1+x+x22!+x33!+...+xnn!+...xRe^x=1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+...+\frac{x^n}{n!}+... \qquad x\in R将这个公式扩展到矩阵上有:eAt=I+At+(At)22!+(At)33!+...+(At)nn!+...\qquad e^{At}=I+At+\frac{(At)^2}{2!}+\frac{(At)^3}{3!}+...+\frac{(At)^n}{n!}+... eAt=SS1+SΛtS1+S(Λt)2S12!+S(Λt)3S13!+...+S(Λt)nS1n!+...\Rightarrow\quad e^{At}=SS^{-1}+S\Lambda tS^{-1}+\frac{S(\Lambda t)^2S^{-1}}{2!}+\frac{S(\Lambda t)^3S^{-1}}{3!}+...+\frac{S(\Lambda t)^nS^{-1}}{n!}+... eAt=S(I+Λt+(Λt)22!+(Λt)33!+...+(Λt)nn!+...)S1\Rightarrow\quad e^{At}=S(I+\Lambda t+\frac{(\Lambda t)^2}{2!}+\frac{(\Lambda t)^3}{3!}+...+\frac{(\Lambda t)^n}{n!}+... )S^{-1} eAt=SeΛtS1\Rightarrow\quad e^{At}=Se^{\Lambda t}S^{-1}

    二阶微分方程

    它的一般形式为:y+by+ky=0y^{''}+by^{'}+ky=0我们记u=[yy]u=\begin{bmatrix}y^{'}\\y\end{bmatrix},那么u=[yy]=[bk10][yy]u^{'}=\begin{bmatrix}y^{''}\\y^{'}\end{bmatrix}=\begin{bmatrix}-b&-k\\1&0\end{bmatrix}\begin{bmatrix}y^{'}\\y\end{bmatrix}这样就将它抽象成了矩阵的形式,也就是一个一阶微分方程乘以一个矩阵。其他的步骤同上面是一样的。如果遇到更高阶的微分方程,抽象的方法是一样的。解题的步骤也是类似的。

    这一节的内容较为复杂,主要目的就是在实际情况下使用矩阵对角化,特征值等方法求解微分方程,给出了使用矩阵求解微分方程的通用规律,即高阶降阶。一阶用特征值和特征向量将原系数矩阵AA解耦,最后得到结果。并介绍了在我们解耦AA时使用矩阵对角化将其与特征向量联系起来运算的方法。另外介绍了判断收敛性的方法,即看特征值实部绝对值与1的大小关系。这些内容都是特征值与特征向量的实际应用,非常重要。

    展开全文
  • 微分方程简明教程(ZJU)PDF文档, 浙江大学。主要内容: 一、一阶方程 二、二阶方程 ² 椭圆型方程(典型的例子:Laplace方程) ² 抛物型方程(典型的例子:热传导方程;Li-Yau's Harnack inequality) ² ...
  • 碰巧今天看安德鲁的计算流体力学偏微分方程所讲,利用克莱姆法则和特征值法来判断方程的属性 例子为一阶,在做习题碰到二阶。 此为闲话 同时,根据文章所写,稍加修改,将for循环和数组放在同一程序中进行对比,...

    许久没接触python,又有点忘了
    继续学习流沙公众号
    流沙图片
    对这个方程,非定常项,以及x和y方向的对流项
    碰巧今天看安德鲁的计算流体力学偏微分方程所讲,利用克莱姆法则和特征值法来判断方程的属性
    例子为一阶,在做习题碰到二阶。
    此为闲话

    同时,根据文章所写,稍加修改,将for循环和数组放在同一程序中进行对比,以温习python,发现遗忘甚多。

    from mpl_toolkits.mplot3d import Axes3D  # 新
    import numpy as np
    import matplotlib.pyplot as plt
    import time
    
    nx = 81
    ny = 81
    nt = 100 # 时间步
    c = 1 # 常数
    dx = 2 / (nx - 1)
    dy = 2 / (ny - 1)
    sigma = 0.2
    dt = sigma * dx
    
    x = np.linspace(0,2,nx)
    y = np.linspace(0,2,ny)
    u = np.ones((ny,nx))
    un = np.ones((ny,nx))
    u[int(0.5/dy):int(1/dy+1),int(0.5/dx):int(1/dx+1)] = 2
    
    print("forloop?   matrix?")
    choose = input()
    # 对比for循环运算和数组运算的速度
    if choose == 'forloop':
    	# for 循环
    	start = time.perf_counter()
    	for n in range(nt + 1): ## loop across number of time steps
    		un = u.copy()
    		row, col = u.shape
    		for j in range(1,row):
    			for i in range(1, col):
    				u[j, i] = (un[j,i] - (c * dt / dx * (un[j, i] - un[j, i - 1])) - (c * dt / dy * (un[j, i] - un[j - 1, i])))
    				u[0, :] = 1
    				u[-1, :] = 1
    				u[:, 0] = 1
    				u[:, -1] = 1
    	end = time.perf_counter()
    else:
    	# 数组运算
    	start = time.perf_counter()
    	for n in range(nt + 1): ## matrix
    		un = u.copy()
    		u[1:, 1:] = (un[1:, 1:] - (c * dt / dx * (un[1:, 1:] - un[1:, :-1])) - (c * dt / dy * (un[1:, 1:] - un[:-1, 1:])))
    		u[0, :] = 1
    		u[-1, :] = 1
    		u[:, 0] = 1
    		u[:, -1] = 1
    	end = time.perf_counter()
    
    time_elapsed = end - start   # 普通计算耗时
    print("time: %f" %(time_elapsed))
    
    fig = plt.figure(figsize=(11, 7), dpi=100)
    ax = Axes3D(fig)             # 说明此图为3D
    x,y = np.meshgrid(x,y)
    surf2 = ax.plot_surface(x, y, u[:],cmap = 'viridis') # cmap 表示的名字
    plt.show()
    
    

    对于此程序代码的说明:
    1、from mpl_toolkits.mplot3d import Axes3D ,是3维绘图的库ax = Axes3D(fig)
    2、放弃time.clock(),改为time.perf_counter()计时

    结果
    计算
    数组计算的时间为0.0206
    for循环的计算时间为3.604

    展开全文
  • 数字积分

    2017-04-15 15:23:00
    考虑如下的一阶微分方程: $\frac{dx}{dt}=f(x,t)$ 选取小的h,有如下结果: $\frac{dx}{dt}=f(x,t)=\frac{x(t+h)-x(t)}{h}=\frac{x_k-x_{...使用下面的二阶线性微分方程作为例子: $\frac{d^2x}{dt^2}=-\omega ...

    考虑如下的一阶微分方程:

    $\frac{dx}{dt}=f(x,t)$

    选取小的h,有如下结果:

    $\frac{dx}{dt}=f(x,t)=\frac{x(t+h)-x(t)}{h}=\frac{x_k-x_{k-1}}{h}$

    重写为如下形式:

    $x_k=x_{k-1}+hf(x,t)$

    使用下面的二阶线性微分方程作为例子:

    $\frac{d^2x}{dt^2}=-\omega ^2x$

    初始条件:

    $x(0)=0$

    $\frac{dx}{dt}=\omega$

    其解析解为$x=\sin{\omega t}$

    matlab程序如下(请忽视作为一个初学者的糟糕语法)

    % Euler numerical integration for d(dx/dt)/dt = -omega*omega*x
    w = 2;                      % w is omega
    x = zeros(1, 1000);   % x init condition:=0
    xd = w;                    % xd = dx/dt, init condition:=w
    h=0.01;                    % step size
    loop_times = 1;
    for t = 0:h:9.99
        xdd = -w * w * x(loop_times);
        xd = xd + h*xdd;
        x(loop_times + 1) = x(loop_times) + h*xd;
        loop_times = loop_times + 1;
    end
    plot(x);
    hold on;                     % put the following curve on the same plot
    t = 0:h:9.99;
    plot(sin(w*t));

    展开全文
  •  系统的时域数学模型,是一组线性或非线性微分方程式或差分方程式。对于图1所示的二阶低通滤波器电路,假设Ui为输入电压,输出为y(t)=uo(t)则滤波电路的时域数学模型为:  图1 二阶低通滤波器电路  ...
  • 线性泛函非局部边界条件的奇异半正问题正解存在性,赵增勤,王丽君,我们利用不动点指数方法,研究了一类线性泛函边界条件下的非线性二阶奇异半正微分方程,得到了C[0,1] 正解的存在性,然后给出具体例子.
  • 4.1 二阶线性微分方程按奇点分类 4.2 二阶线性微分方程的不变式 4.3 由解反求常微分方程 4.4 解析函数的幂级数展开 第五章 卷积型级数的Mobius反演 5.1 定义 5.2 应用 5.3 卷积型级数Mobius反演与柱函数 5.4 ...
  • 首先我们知道,从数学角度来讲,线性常系数二阶微分方程,是包含通解和特解的。那么从物理意义上来看,通解和特解实际上对应的就是这个电路的自由振荡项和受迫振荡项。同图,上图中国的Vcn是自由振荡项,Vcf是受迫...
  • 中文名: 数理金融引论(第三版)(全美经典学习指导系列) 原名: Schaum's Outline of Theory and Problems of ...第十八章二阶微分方程和差分方程 第十九章联立微分及差分方程 第二十章变分法 第二十一章最优控制原理
  • 谱方法的数值分析 !!

    2009-09-02 11:31:55
    5、5变系数二阶椭圆方程Dirichlet问题的Chebyshev拟谱方法 5、6定常Burgers方程的Chebyshev谱方法 参考文献 第六章 谱方法的某些新进展 6、1用Gegenbauer多项式恢复指数精度 6、1、1Gegenbauer多项式及其主要性质 6...
  • 其主要内容包括多项式的计算、复数运算、随机数的产生、矩阵运算、矩阵特征值与特征向量的计算、线性代数方程组的求解、非线性方程与方程组的求解、插值与逼近、数值积分、常微分方程组的求解、数据处理、极值问题的...

空空如也

空空如也

1 2 3 4 5
收藏数 85
精华内容 34
关键字:

二阶线性微分方程例子