Matlab:显(隐)式Euler和Richardson外推法变步长求解刚性问题
一、显示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外推法变步长求解刚性问题的更多相关文章
- C#中显/隐式实现接口及其访问方法
原贴地址: http://www.cnblogs.com/dudu837/archive/2009/12/07/1618663.html 在实现接口的时候,VS提供了两个菜单,一个是"实现接 ...
- 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 ...
- 转】C#接口-显式接口和隐式接口的实现
[转]C#接口-显式接口和隐式接口的实现 C#中对于接口的实现方式有隐式接口和显式接口两种: 类和接口都能调用到,事实上这就是“隐式接口实现”. 那么“显示接口实现”是神马模样呢? interface ...
- 无废话Android之smartimageview使用、android多线程下载、显式意图激活另外一个activity,检查网络是否可用定位到网络的位置、隐式意图激活另外一个activity、隐式意图的配置,自定义隐式意图、在不同activity之间数据传递(5)
1.smartimageview使用 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...
- 显式Intent和隐式Intent
http://blog.csdn.net/qs_csu/article/details/7995966 对于明确指出了目标组件名称的Intent,我们称之为“显式Intent”. 对于没有明确指出目标 ...
- SQL Server显式事务与隐式事务
事务是单个的工作单元.如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分.如果事务遇到错误且必须取消或回滚,则所有数据库修改均被清除. SQL Server中有一下几 ...
- (转载)Android理解:显式和隐式Intent
Intent分两种:显式(Explicit intent)和隐式(Implicit intent). 一.显式(设置Component) 显式,即直接指定需要打开的activity对应的类. 以下多种 ...
- dll显式加载与隐式加载
使用动态DLL有两种方法,一种是隐式链接,一种是显式链接,如果用loadlibrary就是显示链接,用lib就属于隐式链接. 两种方法对于你的程序调用动态库时没有任何区别,只是你在编程时,步骤是不一样 ...
- c# implicit explicit关键字(隐式和显式数据类型转换)
implicit关键字用于声明隐式的用户定义类型转换运算符.(explicit反之)explicit则用于显示转换用户自定义类型.static implicit operator target_typ ...
随机推荐
- 使用scrapy入门教程
创建项目 scrapy startprogect demo 创建爬虫 scrapy genspider myDomain madomian.com 直接创建文件也可以 运行爬虫 scrapy craw ...
- java之Spring集成CXF简单调用
简介 Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承了 Celtix 和 X ...
- python基础之 初识函数&函数进阶
函数基础部分 1.什么是函数? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率. 2.定义函数 定义:def 关键词开头,空格之后接函数名 ...
- linux安装lamp/lamp/lanmp
wdcp安装lamp/lanp/lanmp 和宝塔(centOS)1. yum install -y wget //yum安装wegt2. wget http://dl.wdlinux.cn/fil ...
- ignore_user_abort(true); set_time_limit(0);程序在本地测试可以一直运行,上传服务器只能运行10-15分钟
当PHP运行在安全模式下时此函数无效.除了关闭安全模式或者在php.ini程序中修改最大运行时间没有其他办法让此函数运行. php.ini 中缺省的最长执行时间是 30 秒,这是由 php.ini 中 ...
- Linux平台 Oracle 18c RAC安装Part2:GI配置
三.GI(Grid Infrastructure)安装 3.1 解压GI的安装包 3.2 安装配置Xmanager软件 3.3 共享存储LUN的赋权 3.4 使用Xmanager图形化界面配置GI 3 ...
- 运行pytorch代码遇到的error解决办法
1.no CUDA-capable device is detected 首先考虑的是cuda的驱动问题,查看gpu显示是否正常,然后更新最新的cuda驱动: 第二个考虑的是cuda设备的默认参数是否 ...
- 第三章 jQuery事件和动画
1.什么是事件:事件指的是用于对网页操作的时候,网页做出的一个回应. 2.JQuery中的事件:JQuery事件是对JavaScript事件的封装,常用事件的分类如下:(1)基础事件:window事件 ...
- 221. Maximal Square(动态规划)
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and re ...
- OpenStack-Neutron-VPNaaS-配置
配置openstack版本:Juno vpnaas配置的资料很少,官网目前参考的https://wiki.openstack.org/wiki/Neutron/VPNaaS/HowToInstall比 ...