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 ...
随机推荐
- SpringBoot-性能优化之扫包优化
性能优化 组件自动扫描带来的问题 默认情况下,我们会使用 @SpringBootApplication 注解来自动获取应用的配置信息,但这样也会给应用带来一些副作用.使用这个注解后,会触发自动配置( ...
- python基础之 while 逻辑运算符 格式化输出等
1.while循环 while 条件: 循环体 while 条件: 循环体 else: 循环体 重点: 当条件为真的时候,就进入循环体,从上到下依次执行,执行完最后一条语句时,while并不是直接退出 ...
- Oracle 11g R2创建数据库之手工建库方式
在之前的博文当中梳理了关于DBCA静默方式创建数据库的过程,本文就手工通过SQL*PLUS客户端采用CREATE DATABASE语句创建数据库.这种建库方式就是完全使用手工SQL语句创建数据库,通常 ...
- utf8 vs utf8mb4
UTF-8 is a variable-length encoding. In the case of UTF-8, this means that storing one code point re ...
- 家庭记账本之微信小程序(六)
Wxss的学习 WXSS(WeiXin Style Sheets)是一套样式语言,用于描述WXML的组件样式. WXSS用来决定WXML的组件应该怎么显示. 为了适应广大的前端开发者,我们的WXSS具 ...
- SV randomize
randomize中的变量只支持2-state的values,不支持4-states. randc类型的变量不能被约束在solve------before的语句中. constraint可以被定义在c ...
- Java IO--BIO
一.java io 概述 1.1 相关概念 Java IO Java IO即Java 输入输出系统.不管我们编写何种应用,都难免和各种输入输出相关的媒介打交道,其实和媒介进行IO的过程是十分复杂的,这 ...
- react和vue,angular的比较
就这几天我所了解到react情况和大家探讨一下子react的知识: react由facebook团队维护的一套框架,已经应用在instagram网站上了,react以其独特的性能优化方案,正在被越来越 ...
- C#-MVC-Razor视图引擎及解决路径问题的三个方法
Razor 视图引擎 与Aspx开发区别在于代码: 1.Razor 更智能,摒弃了<%%>格式,直接用@符号开启cs代码,遇到html时自动识别 2.遇到如汉字等即非cs代码,又非html ...
- Linux进程相关命令使用场景
Linux进程相关命令使用场景 在Linux系统上工作时,我们常常会碰到很多和进程相关的查询场景,今天在这里进行详细的讲解,进程相关的对象包括以下几个: 端口:Port 进程号:PId 执行文件所在路 ...