[数学]midpoint 法

原理思想

中点法是龙格-库塔方法的二阶的一种形式 了解龙格-库塔的思想和求解:龙格-库塔方法RK.

公式

\[k1 = f(x_i,y_i)\]
\[k2 = f(x_i+0.5h,y_i+0.5h)\]
\[y_{i+1} = y_i+hk2\]

MATLAB 代码

fun = @(x,y) (x+y);
myans = midpoint_method(fun,0,2,1,0.25);
hold on;

% 准确值
xx = 0:0.25:1;
yy = 3*exp(xx)-xx-1;
plot(xx,yy,'r');

legend('近似值','point','准确值');
% midpoint
function re = midpoint_method(f,x0,y0,xn,h)
    n = round((xn-x0)/h);
    k1 = f(x0,y0);
    x =x0;
    y = y0;
    xx = [];
    yy = [];

    xa(1)=x0;
    ya(1)=y0;
    for i=1:n
        k2 = f(x+h/2,y+(h/2)*k1);
        y = y+h*k2;
        x = x0+h*i;
        k1 = f(x,y);
        xa(i+1) = x;
        ya(i+1) = y;
    end
    re = y;
    fprintf('%f\n',re);
    plot(xa,ya);
    hold on;
    scatter(xa,ya,'b*');

end

Result:

原文地址:https://www.cnblogs.com/tailiang/p/12255210.html

时间: 2024-07-31 12:10:30

[数学]midpoint 法的相关文章

LA3882 约瑟夫数学递归法

首先,约瑟夫环的数学优化方法为: 为了讨论方便,先把问题稍微改变一下,并不影响原意:问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数.求胜利者的编号. 我们知道第一个人(编号一定是(m-1)%n) 出列之后,剩下的n-1个人组成了一个新的约瑟夫环(以编号为k=m%n的人开始):    k k+1 k+2 ... n-2, n-1, 0, 1, 2, ... k-2 并且从k开始报0.现在我们把他们的编号做一下转换: k --> 0 k+1 --

【书单】图解数学学习法 让抽象的数学直观起来

2017.4.9-4.10 图解数学学习法 让抽象的数学直观起来 [日]畑村洋太郎 这本书太棒了,不仅从本原介绍了一些数学概念,也提出了作者自己独到的深刻的思考方式,而且写得比较随意,就像是和一个口无遮拦.有趣.敢讲真话的老头对话.译者刘玮也翻译得很棒.总之,我很满足. 1.明白了矩阵.e的来源(e原来来源于借贷方程) 2.知道虚数为什么被称为imaginary number.由于实用主义而被承认的"骗人"的数. 3.非常优雅地解释了什么是微分方程,"盲人摸象",通

数学建模法-Dijkstra算法

一.引言 哈喽大家好,今天要讲的是图论中的一个经典的算法.是一种叫Dijkstra算法的东东.这个算法是干什么用的呢.首先大家先看下面这幅图: 这个东西是什么呢.我们可以这样理解,假如A到F表示6个地点.那些连接线就是道路.连接线上的数字就是两个地点间的距离.这样讲是不是很直观呢.好了,假如博主家在A点,博主的女神家在F点,有一天博主想去女神家,就有很多条路线可以走.可是博主很懒诶,肯定就想走最短的路线.那么,怎么才能很快的就求解出最短的路线呢.Dijkstra算法就是用来解决这样的问题的. 二

关于JS数学计算精度不准和自动转科学计数法的问题

在javaScript中,数学计算是一个很坑爹的问题, 由于系统二进制转十进制的误差,导致浮点数的运算精度很不理想,经常会出现一些意想不到的问题. 而js自动将小数转为科学计数法的问题,也让一些自己写数学插件的同学痛苦不已. 第一个,浮点数计算精度: 比如:1.2*3 = 3.599999999.... 解决办法: ⑴将浮点数乘以10的n次幂化为整数,再进行计算,之后再除以10的n次幂,就可以得到我们想要的数值.即:1.2*3 = 12*3/10 = 3.6;(n为小数点后数位之和); 至于多个

青少年趣味数学学习班

招生对象:小学3-6年级,初中 内容:同步辅导.奥数.趣味数学.数学学习法.青少年趣味编程等 方式:精品小班.VIP一对一 目标:巩固课内基础,提高应试能力: 培养数学学习兴趣及主动学习和思考习惯. 时间:周六日.寒暑假 咨询电话:010-69366907 QQ:496408370 QQ群1:45554140 QQ群2:65015315 地址:房山良乡三街村委会 办公楼四层(华冠赶市西行30米)

关于JS数学计算误差的问题

在javaScript中,数学计算是一个很坑爹的问题, 由于系统二进制转十进制的误差,导致浮点数的运算精度很不理想,经常会出现一些意想不到的问题. 而js自动将小数转为科学计数法的问题,也让一些自己写数学插件的同学痛苦不已. 第一个,浮点数计算精度: 比如:1.2*3 = 3.599999999.... 解决办法: ⑴将浮点数乘以10的n次幂化为整数,再进行计算,之后再除以10的n次幂,就可以得到我们想要的数值.即:1.2*3 = 12*3/10 = 3.6;(n为小数点后数位之和); 至于多个

Python 学习之路 (一):基础

数据类型和变量 整数 在Python3中,整数可以处理任意大小的整数,不分长整型和整型, 十六进制用0x开头或者H结尾表示:0x2af ,2afH 用函数 int() 来转换字符串中的数字,里面不能包含除数字以外的字符,例如 int('123') 浮点数 浮点数也就是小数,除了数学表示法表示外,较大的浮点数用科学计数法表示:1.23e9 ,1.2e-4 用函数 float() 来转换字符串中的浮点数,如果字符串里是整数,也会被转换成浮点数,字符串中可以是科学计数法,例如 float('2.24e

[译]JavaScript中,{}+{}等于多少?

[译]JavaScript中,{}+{}等于多少? 原文:http://www.2ality.com/2012/01/object-plus-object.html 最近,Gary Bernhardt在一个简短的演讲视频“Wat”中指出了一个有趣的JavaScript怪癖:在把对象和数组混合相加时,会得到一些你意想不到的结果.本篇文章会依次讲解这些计算结果是如何得出的. 在JavaScript中,加法的规则其实很简单,只有两种情况:你只能把数字和数字相加,或者字符串和字符串相加,所有其他类型的值

C#解析字符串公式

/// <summary> /// 中缀表达式到逆波兰表达式的转换及求值 /// </summary> public class RpnExpression { #region 定义属性 int Top = -1; #endregion /// <summary> /// 检查中缀表达式是否合法 /// </summary> /// <param name="exp"></param> /// <return