Matlab:高阶常微分三种边界条件的特殊解法(中心差分法,高精度导数边界处理)
函数文件1:
- function b=F(f,x0,h,N)
- % b(1,1)=x0(1)-h*x0(2)-u(1);
- % b(2,1)=x0(2)+h*x0(1)^2-u(2)-h*f;
- b=zeros(N,1);
- b(1,1)=4*x0(1)-x0(2);
- b(2,1)=h^2*x0(1)^2-2*x0(1)+x0(2)-h^2*f(1)
- for i=3:N
- b(i,1)=x0(i-2)+h^2*x0(i-1)^2-2*x0(i-1)+x0(i)-h^2*f(i-1);
- end
函数文件2:
- function g=Jacobian(x0,h,N)
- % g(1,1)=1;
- % g(1,2)=-h;
- % g(2,1)=2*h*x0(1);
- % g(2,2)=1;
- g=zeros(N);
- g(1,1)=4;
- g(1,2)=-1;
- g(2,1)=2*h^2*x0(1)-2;
- g(2,2)=1;
- for i=3:N
- g(i,i-2)=1;
- g(i,i-1)=2*h^2*x0(i-1)-2;
- g(i,i)=1;
- end
函数文件3:
- function x=newton_Iterative_method(f,u,h,N)
- % u:上一节点的数值解或者初值
- % x0 每次迭代的上一节点的数值
- % x1 每次的迭代数值
- % tol 允许误差
- % f 右端函数
- x0=u;
- tol=1e-11;
- x1=x0-Jacobian(x0,h,N)\F(f,x0,h,N);
- while (norm(x1-x0,inf)>tol)
- %数值解的2范数是否在误差范围内
- x0=x1;
- x1=x0-Jacobian(x0,h,N)\F(f,x0,h,N);
- end
- x=x1;%不动点
脚本文件:
- tic;
- clear
- clc
- N=100;
- h=1/N;
- x=0:h:1;
- y=inline('x.^2.*sin(x).^2+2*cos(x)-x.*sin(x)');
- fun1=inline('x.*sin(x)');
- Accurate=fun1(x);
- f=y(x(2:N));
- Numerical=zeros(N+1,1);
- Numerical(2:end,1)=newton_Iterative_method(f,Numerical(2:end,1),h,N);
- error=Numerical-Accurate';
- subplot(1,3,1)
- plot(x,Accurate);
- xlabel('x');
- ylabel('Accurate');
- grid on
- subplot(1,3,2)
- plot(x,Numerical);
- xlabel('x');
- ylabel('Numerical');
- grid on
- subplot(1,3,3)
- plot(x,error);
- xlabel('x');
- ylabel('error');
- grid on
- toc;
效果图:
Matlab:高阶常微分三种边界条件的特殊解法(中心差分法,高精度导数边界处理)的更多相关文章
- 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 ...
- Matlab:非线性高阶常微分方程的几种解法
一.隐式Euler: 函数文件1: function b=F(t,x0,u,h) b(,)=x0()-h*x0()-u(); b(,)=x0()+*h*x0()/t+*h*(*exp(x0())+ex ...
- Matlab中数组元素引用——三种方法
Matlab中数组元素引用——三种方法 1.Matlab中数组元素引用有三种方法 1 2 3 1.下标法(subscripts) 2.索引法(index) 3.布尔法(Boolean) 注意:在使 ...
- MATLAB 显示输出数据的三种方式
MATLAB 显示输出数据的三种方式 ,转载 https://blog.csdn.net/qq_35318838/article/details/78780412 1.改变数据格式 当数据重复再命令行 ...
- 如何使用MATLAB对图片的RGB三种颜色进行提取
参考: https://jingyan.baidu.com/article/456c463b41de5f0a5831448e.html matlab在图像处理方面,具有很强大的应用.下面将分享如何使用 ...
- matlab 高阶(三)—— 插值(fft、)
1. FFT 插值 y = interpft(x,n) y = [0, .5, 1., 1.5, 2., 1.5, 1., .5, 0, -.5, -1, -1.5, -2., -1.5, -1., ...
- java高并发锁的三种实现
提到锁大家会想到Synchronized同步关键字,使用它确实可以解决一切并发问题,但是对于体统吞吐量要求更高,在这里提供了几个小技巧.帮助大家减少锁粒度.提高系统的并发能力 一.乐观锁 试用场景:读 ...
- matlab 高阶(一) —— assignin与evalin
1. assignin assignin(ws, 'var', val) 将 val 值赋值给 ws 空间中的 var 变量,注意这里的变量,必须是 array 类型,而不可以是包含下标索引,如果在指 ...
- python六十四课——高阶函数练习题(三)
案例五:求两个列表元素的和,返回新列表lt1 = [1,2,3,4]lt2 = [5,6]效果:[6,8,10,12] lt1=[1,2,3,4] lt2=[5,6] print(list(map(l ...
随机推荐
- 新建Maven项目时dtd约束出错
新建或者导入Maven项目时出错:org.apache.maven.archiver.MavenArchiver.getManifesteclipse新建maven项目时,pom.xml文件第一行报错 ...
- angular--解决angular图片加载失败问题
基于angular4写的一个指令,在ionic3.x项目在用.因为加载图片超时等原因导致图片显示不出来,需要替换成默认或者指定图片 1.err-src.ts import { Directive,In ...
- linux 逆向映射机制浅析
2017-05-20 聚会回来一如既往的看了会羽毛球比赛,然后想到前几天和朋友讨论的逆向映射的问题,还是简要总结下,免得以后再忘记了!可是当我添加时间……这就有点尴尬了……520还在写技术博客…… 闲 ...
- 安装和使用ZFS
一.安装和使用ZFS Centos7上安装和使用ZFS:https://blog.csdn.net/linuxnews/article/details/51286358
- iOS代理模式(delegate)的使用
前言: 代理模式是iOS中非常重要的一个模式,iOS SDK中的系统控件几乎都用到了代理模式.代理模式用来处理事件监听.参数传递功能. 协议创建(Protocol): 可手打如下代码,或者在代码块里面 ...
- 对String中固定符号隔开的每项做无序不重复监测
Response<List<String[]>> response = new Response<>(); // 引擎方式校验 // 在此对知识内容标签进行打标 t ...
- COM中参数标识
- 0007-20180403-python-自动化基础学习000--while-if 循环实操
python-自动化基础学习000 Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:54:25) [MSC v.1900 64 bit (AMD64 ...
- tiny6410的启动参数
bootargs=root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200 bootcmd=nand led ...
- 转:C#中Undo/Redo的一个简易实现
一个比较常见的改进用户体验的方案是用Redo/Undo来取代确认对话框,由于这个功能比较常用,本文简单的给了一个在C#中通过Command模式实现Redo/Undo方案的例子,以供后续查询. clas ...