MATLAB运用(4)-常微分方程的性态和初值问题

简介: MATLAB运用(4)-常微分方程的性态和初值问题

一、实验一: 常微分方程形态和R-K法稳定性试验

考察下面微分方程右端项中函数y前面的参数a对方程性态的影响(它使得方程为好条件的或坏条件的)和研究计算步长h对4阶经典R-K法计算稳定性的影响。


image.png

其中,-50≤a≤50,其精确解为y ( x ) =image.png + x

1、步骤

(1)对参数a分别取4个不同的数值:一个大的正值,一个小的正值,一个绝对值小的负值,一个绝对值大的负值。取步长h=0.01,分别用经典R-K法计算,将四组计算结果画在同一张图上,进行比较并说明相应初值问题的形态。

(2)取参数a为一个绝对值不大的负值和两个计算步长,一个步长使参数ah在经典R-K法的稳定域内,另一个步长在经典R-K法的稳定域外,分别用经典R-K法计算并比较计算结果。取全域等距的10个点上的计算值,列表说明。

image.png


2、程序

function test_5_1
%输入参数a和步长h
%利用经典4阶R-K法计算,并做图
result=inputdlg({'请输入[-50,50]之间的整数'},'text_5_1',1,{'-50'});
a=str2num(char(result));
if (a<-50)|| (a>50)
    errordlg({'超出范围,请重新输入参数a'});
    return;
end
result=inputdlg({'请输入(0,1)之间的步长h'},'text_5_1',1,{'0.01'});
h=str2num(char(result));
if (h<=0)|| (h>=1)
    errordlg({'超出范围,请重新输入参数a'});
    return;
end
x=0:h:1;
y=1;
N=length(x);
fun=@(x,y)a*y-a*x+1;
for i=1:N-1
    k1=fun(x(i),y(i));
    k2=fun(x(i)+h/2,y(i)+h*k1/2);
    k3=fun(x(i)+h/2,y(i)+h*k2/2);
    k4=fun(x(i)+h,y(i)+h*k3);
    y(i+1)=y(i)+h/6*(k1+2*k2+2*k3+k4);
end
plot(x,y,'r-')%将plot改为semilogy,y就是对数坐标轴
hold on
y0=exp(a*x)+x;
plot(x,y0,'b*')
xlabel('x');
ylabel('y');
legend('R-K近似值','精确值')
r=abs((y(101)-y0(101))/y0(101));%误差分析
sprintf('当h是%e,a是%d时的绝对误差是%e',h,a,r)

3、结果

第一问:

由于步长选取为h=0.01,而4阶经典R-K法的绝对稳定域是-2.785≤λh≤0。因此,当h=0.01时,-278.5≤a≤0,该方法才稳定。又要求-50≤a≤50,因此a的稳定区域为-5

围内时,结果收敛,为好条件。反之则为换条件。

下面为分别选取a=-45,-1,1,45下的图形。

从上图上并不能直接看出产生多少误差(不明显)。因此程序中加入一段绝对误差的计算。我们假设一开始的初值没有误差,最后迭代到101次产生了的绝对误差如下:

a=-45,r=0

a=-1,r=2.2600e-11

a=1,r=6.0416e-11

a=45,r=1.0535e-02

可见在稳定区域内或靠近稳定区域内,误差很小。但是远离稳定区域会带来较大的误差。

第二问

取a=-10,则h的稳定区域为0<h≤0.2785。取步长h分别为0.1和0.3,作图如下

由表中等距的10个点的计算值和图像可以看出,h值超过稳定区域时结果发散,与精确值相差很大。而h在稳定区域内时,计算结果和精确值几乎一样。


二、实验二:比较同阶精度的单步法和预测-校正多步法的计算精度和所花费计算机CPU时间


对于常微分方程:


image.png


image.png

1、比较4阶经典R-K算法和4阶Adams预测-校正修正法的计算精度,以及所花费的时间。

要求选择一个步长h使得4阶经典R-K算法和4阶Adams预测-校正修正法均稳定,分别用这两种方法计算初值问题,列出10个等距节点上的计算值和精确值并比较。其中多步法所需要的初值由R-K法提供。

2、再取h=0.001,比较这两种方法的时间。


1、思路

4阶Adams预测-校正修正法

image.png

2、程序

function test_5_2
result=inputdlg({'请输入步长h'},'test_5_2',1,{'0.1'});
h=str2num(char(result));
fun=@(x,y)-y+cos(2*x)-2*sin(2*x)+2*x.*exp(-x);
%经典R-K法
tic;
[x,y1]=R_K(fun,h,0,2,1);
time_RK=toc;
%4阶Adams预测-校正法
tic;
N=length(x);
y=x;%x与y同维,将x赋值给y,随后运算中逐个替换为相应的元素。这样比重新构造一个向量再逐次插入元素快。
f=x;
y(1)=y1(1);y(2)=y1(2);y(3)=y1(3);y(4)=y1(4);%以R-K法获得的初值
ycn=0;ypn=0;
f(1)=fun(x(1),y(1));f(2)=fun(x(2),y(2));f(3)=fun(x(3),y(3));
for n=4:N-1
    f(n)=fun(x(n),y(n));
    ypn1=y(n)+h/24*(55*f(n)-59*f(n-1)+37*f(n-2)-9*f(n-3));
    ypmn1=ypn1+251/270*(ycn-ypn);
    ycn1=y(n)+h/24*(9*fun(x(n+1),ypmn1)+19*f(n)-5*f(n-1)+f(n-2));
    y(n+1)=ycn1-19/270*(ycn1-ypn1);
    ycn=ycn1;
    ypn=ypn1;
end
time_Ad=toc;
y0=x.^2.*exp(-x)+cos(2*x);
subplot(1,2,1);
plot(x,y1,'b--')
hold on
plot(x,y0,'g*')
xlabel('x');ylabel('y');legend('R-K法','精确值');
subplot(1,2,2);
plot(x,y,'b--')
hold on
plot(x,y0,'g*')
xlabel('x');ylabel('y');legend('Adams预测-校正法','精确值');
d=floor(N/10);
disp(['十个等距节点:                ',num2str(x(1:d:N))]);
disp(['对应的R-K法计算值:           ',num2str(y1(1:d:N))]);
disp(['对应的Adams预测-校正法计算值:',num2str(y(1:d:N))]);
disp(['精确值:                      ',num2str(y0(1:d:N))]);
disp(['对应的R-K法计算时间:           ',num2str(time_RK)]);
disp(['对应的Adams预测-校正法计算时间:',num2str(time_Ad)]);
function [x,y]=R_K(fun,h,a,b,y0)
x=a:h:b;
y=y0;
N=length(x);
for i=1:N-1%R-K法得到初值y(n)
    k1=fun(x(i),y(i));
    k2=fun(x(i)+h/2,y(i)+h*k1/2);
    k3=fun(x(i)+h/2,y(i)+h*k2/2);
    k4=fun(x(i)+h,y(i)+h*k3);
    y(i+1)=y(i)+h/6*(k1+2*k2+2*k3+k4);
end

3、结果

当h=0.1时:

从理论推到上:

image.png

从实验结果上看,理论可得到验证。而仔细观察数据,可得出经典R-K算法比4阶Adams预测-校正法精度稍微高一点。

从计算时间上看,则是4阶Adams预测-校正法会比经典R-K法快。


当h=0.001

对应的R-K法计算时间: 0.0068151

对应的Adams预测-校正法计算时间:0.0048398

目录
相关文章
|
算法 算法框架/工具
数值分析算法 MATLAB 实践 常微分方程求解
数值分析算法 MATLAB 实践 常微分方程求解
142 0
|
4月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
232 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
4月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
142 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
4月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
111 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
7月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
7月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
|
7月前
|
Serverless
基于Logistic函数的负荷需求响应(matlab代码)
基于Logistic函数的负荷需求响应(matlab代码)
|
7月前
|
供应链 算法
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
基于分布式优化的多产消者非合作博弈能量共享(Matlab代码)
|
7月前
|
算法 调度
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)

热门文章

最新文章