一、显示Euler

函数文件:Euler.m

 function f=Euler(h,Y)
f(1,1)=Y(1)+h*(0.01-(1+(Y(1)+1000)*(Y(1)+1))*(0.01+Y(1)+Y(2)));
f(2,1)=Y(2)+h*(0.01-(1+Y(2)^2)*(0.01+Y(1)+Y(2)));

脚本文件:

 tic;
clear
clc
%%
%显示Euler方法求刚性微分方程,要求用Richardson外推法估计近似误差从而控制步长
y(1:2,1)=[0;0];%初值
e=1e-5;%误差过小
tol=1e-3;%指定的误差
N=10;%节点的步数
h=1/N;%初始步长
t(1)=0;
i=1;
while t(i)+h<=1
k=1;
%%自动变步长
while k==1
y(1:2,i+1)=Euler(h,y(1:2,i));%符合误差的数值解
y1_half=Euler(h/2,y(1:2,i));%半步长的中点数值解
y1_one=Euler(h/2,y1_half);%半步长的右端点的数值解
Estimate_error=2*norm(y(1:2,i+1)-y1_one);%中间估计误差
if Estimate_error<tol%指定误差
k=0;%步长相差不大,或者说正好在指定的误差范围内,则确定选择h作为步长。
elseif Estimate_error<e%误差过小
h=2*h;
else
h=h/2;
end
end
t(i+1)=t(i)+h;
i=i+1;
end
%%
%绘图
plot(t,y,'');
xlabel('t'),ylabel('y(t) and z(t)');
legend('y(t)','z(t)');
title('Implicit Euler method for numerical solution of image');
grid on;
toc;

效果图:

二、隐式Euler:Euler.m

 function X=Euler(t_h,u)
%隐式Euler(Newton迭代法)
%%
Tol=1e-5;
U=u;
x1=U-Jacobian(U,t_h)\F(U,u,t_h);
while (norm(x1-U,2)>=Tol)
%数值解的2范数是否在误差范围内
U=x1;
x1=U-Jacobian(U,t_h)\F(U,u,t_h);
end
X=x1;%不动点
%雅可比矩阵
function f=Jacobian(U,t_h)
f(1,1)=-t_h*((2*U(1)+1001)*(0.01+U(1)+U(2))+1+(U(1)+1000)*(U(1)+1))-1;
f(1,2)=-t_h*(1+(U(1)+1000)*(U(1)+1));
f(2,1)=-t_h*(1+U(2)^2);
f(2,2)=-t_h*(2*U(2)*(0.01+U(1)+U(2))+(1+U(2)^2))-1; %方程组
%%
function fun=F(U,u,t_h)
fun(1,1)=u(1)+t_h*(0.01-(1+(U(1)+1000)*(U(1)+1))*(0.01+U(1)+U(2)))-U(1);
fun(2,1)=u(2)+t_h*(0.01-(1+U(2)^2)*(0.01+U(1)+U(2)))-U(2);

脚本文件:

 tic;
clear
clc
%隐式Euler方法求刚性微分方程,要求用Richardson外推法估计近似误差从而控制步长
%%
y(1:2,1)=[0;0];%初值
e=1e-5;%误差过小
tol=1e-3;%指定的误差
N=100;%节点的步数
h=1/N;%初始步长
t(1)=0;%初始节点
i=1;
while t(i)+h<=1
k=1;
%自动变步长
while k==1
y(1:2,i+1)=Euler(h,y(1:2,i));%符合误差的数值解
% y1_half=Euler(h/2,y(1:2,i));%半步长的中点数值解
y1_half=Euler(h/2,y(1:2,i));%半步长的右端点的数值解
Estimate_error=2*norm(y(1:2,i+1)-y1_half);%中间估计误差
if Estimate_error<tol%指定误差
k=0;%步长相差不大,或者说正好在指定的误差范围内,则确定选择h作为步长。
elseif Estimate_error<e%误差过小
h=2*h;
else%近似估计误差大于指定误差
h=h/2;
end
end
t(i+1)=t(i)+h;
i=i+1;
end
%绘图
%%
plot(t,y);
xlabel('t'),ylabel('y(t) and z(t)');
legend('y(t)','z(t)');
title('Explicit Euler method for numerical solution of image');
grid on ;
toc;

效果图:

Matlab:显(隐)式Euler和Richardson外推法变步长求解刚性问题的更多相关文章

  1. C#中显/隐式实现接口及其访问方法

    原贴地址: http://www.cnblogs.com/dudu837/archive/2009/12/07/1618663.html 在实现接口的时候,VS提供了两个菜单,一个是"实现接 ...

  2. Matlab:高阶常微分三种边界条件的特殊解法(隐式Euler)

    函数文件1: function b=F(f,x0,u,h) b(1,1)=x0(1)-h*x0(2)-u(1); b(2,1)=x0(2)+h*x0(1)^2-u(2)-h*f; 函数文件2: fun ...

  3. 转】C#接口-显式接口和隐式接口的实现

    [转]C#接口-显式接口和隐式接口的实现 C#中对于接口的实现方式有隐式接口和显式接口两种: 类和接口都能调用到,事实上这就是“隐式接口实现”. 那么“显示接口实现”是神马模样呢? interface ...

  4. 无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)

    1.smartimageview使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...

  5. 显式Intent和隐式Intent

    http://blog.csdn.net/qs_csu/article/details/7995966 对于明确指出了目标组件名称的Intent,我们称之为“显式Intent”. 对于没有明确指出目标 ...

  6. SQL Server显式事务与隐式事务

    事务是单个的工作单元.如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分.如果事务遇到错误且必须取消或回滚,则所有数据库修改均被清除. SQL Server中有一下几 ...

  7. (转载)Android理解:显式和隐式Intent

    Intent分两种:显式(Explicit intent)和隐式(Implicit intent). 一.显式(设置Component) 显式,即直接指定需要打开的activity对应的类. 以下多种 ...

  8. dll显式加载与隐式加载

    使用动态DLL有两种方法,一种是隐式链接,一种是显式链接,如果用loadlibrary就是显示链接,用lib就属于隐式链接. 两种方法对于你的程序调用动态库时没有任何区别,只是你在编程时,步骤是不一样 ...

  9. c# implicit explicit关键字(隐式和显式数据类型转换)

    implicit关键字用于声明隐式的用户定义类型转换运算符.(explicit反之)explicit则用于显示转换用户自定义类型.static implicit operator target_typ ...

随机推荐

  1. 实现mybash

    任务内容 1.使用fork,exec,wait实现mybash 查找资料: fork函数 通过fork()系统调用我们可以创建一个和当前进程印象一样的新进程.我们通常将新进程称为子进程,而当前进程称为 ...

  2. qmp的简单使用

    QMP是一种基于JSON格式的传输协议,可使用QMP与一个QEMU虚拟机实例进行交互,例如查询虚拟机的相关状态等,以下就QMP的使用进行简单介绍. 可以通过libvirt向一个运行的虚拟机发送qmp命 ...

  3. python 缺少module

    ImportError: No module named lxml ImportError: No module named PyQt4.QtCore sudo apt-get install pyt ...

  4. docker容器的操作

    容器操作 1.查看本地容器 docker ps -a # 查看所有容器 docker ps # 查看所有正在运行的容器 2.容器的创建与启动 方法一:两步完成(强烈推荐方法)(1)创建 docker ...

  5. 使用JavaScript实现在页面上所有内容加载完之前一直显示loading...页面

    Html <body class="is-loading"> <div class="curtain"> <div class=& ...

  6. 安装WIN7/WIN10上的 CPU版本的TensorFlow

    随手记 ancaconda Anaconda2-5.0.1-Windows-x86_64(python3.5 ancaconda python-3.5.2-amd64 安装TensorFlow的时候自 ...

  7. Monte Carlo simulated annealing

    蒙特·卡罗分子模拟计算 使用蒙特·卡罗方法进行分子模拟计算是按照以下步骤进行的: 1. 使用随机数发生器产生一个随机的分子构型. 2. 对此分子构型的其中粒子坐标做无规则的改变,产生一个新的分子构型. ...

  8. windows下cmd无法使用telnet命令解决方法 (原)

    telnet不是内部或者外部命令,也不是可运行程序-----解决办法: (win7为例) 控制面板 --- > 程序(小图标下直接到[程序和功能]) --- >程序和功能 --- > ...

  9. Django框架获取各种form表单数据

    Django中获取text,password 名字:<input type="text" name="name"><br><br& ...

  10. js页面路径拼接字符串进行参数传递

    页面路径拼接字符串进行参数传递: 参数传递页面: <style> input,button{ border: 1px solid red; } body { font-size:24px; ...