1.原理

数值积分算法是求解知初值的微分方程的重要方法。

如已知微分方程

d(y)/d(t) = f(y, t)

y(t0) = y0

方程两边对t积分就会有

此式表示原函数t1时刻的解y(t1)为原函数初值y(t0)与微分方程表达式(即f(y, t))的初值时刻t0到t1时刻的积分值之和。而积分的含义表示积分段微分表达式曲线与坐标轴围成的面积。即原函数t1时刻的解y(t1)为原函数初值y(t0)与微分方程表达式的初值时刻t0到t1时刻与坐标轴围成的面积之和。原函数值与微分方程表达式可表示为如下形式

图 原函数值与微分方程表达式关系

2.欧拉法

如果现在采用计算机来求解微分方程的解,由于计算机只能计算离散值,所以只能采用计算机计算的离散值来无限的逼近连续值。如果让t0与t1之间的间隔趋近于无限小,那么途中红色部分面积(t0到t1积分)就可以近似的计算:s =f0 * (t1 - t0)(途中红色部分为梯形,可用梯形面积计算公式计算)然后得到,根据(1)式得到y(t1) = y(t0)+ s,这就是传说中的欧拉法。

那么在计算机中用程序求取已知初值的微分方程解就成了求积分段(积分段与坐标轴)的近似值了。欧拉采用的是用矩形计算法计算红色部分的面积,矩形的高为f0。

那么我们就可以编写程序来求解微分方程了。

3. 编写程序求解微分方程(C语言)

3.1源代码

#include //Function decalre

float function(float t);

int Eular(float init, float a, float b, float h, float *result);

//Main

int main()

{

float a, b, h;

float yt0, result;

//Initiazation

a = 0;

b = 3;

h = 0.01;

yt0 = 0;

Eular(yt0, a, b, h, &result);

return 0;

}

//Function expression

float function(float t)

{

return (2 * t);

}

//Eular method

//@para a: low limit, b: up limit, h: step

//@result compute resutl

int Eular(float init, float a, float b, float h, float *result)

{

int k;

float t;

if(a > b){

return -1;

}

*result = init;

k = 1;

//Eular method

for(t = a; t <= b; t += h){

*result += function(t - h) * h;

printf("%f----%d vaule is %f\n", t, k, *result);

k++;

}

return 0;

}

(1) 程序中function函数是微分方程方程式。

(2) Eular函数是用欧拉方法求解微分方程的数值解。当然题目中y(t) = t的平方曲线特殊,可以直接用梯形得到准确解,为了体现欧拉法,给函数function传值的时候需要将横坐标传为t - h,这样f 的值才会对应f0.然后采用y(t1) = y(t0) + s的方式连续的求取下一刻原函数的值。程序中用迭代语句*result  += function(t - h) * h;语句来实现。并打印出响应的数值解。

(3) 关于函数高的选择。题目中式选取的欧拉值即选取t0前一刻的值作为高,也可以选t1后一刻的值作为高,也可以选t0 和 t1的终点作为高。当然还可以用梯形的面积代替积分面积(梯形法)。

3.2 程序运行结果

h = 0.01时求得数值解

程序中的h值表示步长,当然h的值越小得到的值将越精确。可计算出原函数当t = 3时,真实值为9.而程序中得到的值为8.969793,这是步长h = 0.01时的结果。其实已经很逼近了,如果对程序的精确度还不满意还可以缩小步长。如当h = 0.001时程序的运行效果为:

h = 0.001时求的数值解

当,h = 0.0001时,程序求得的数值解更为精确,误差已经到了10的-3次了。当然步长越小,虽然数值解越精确,但是程序耗时越多的。

读《Matlab控制系统仿真》课本。

Note Over.

c语言编程欧拉方法求近似值,欧拉法求解已知初值微分方程解相关推荐

  1. 隐式欧拉解常微分方程c语言,利用欧拉方法求常微分方程近似数值解.doc

    利用欧拉方法求常微分方程近似数值解,欧拉微分方程,欧拉运动微分方程,欧拉平衡微分方程,欧拉型微分方程,微分方程的欧拉算法,微分方程的欧拉解法,欧拉型常微分方程,偏微分方程数值解,微分方程数值解法 利用 ...

  2. C语言 最小二乘 向量旋转 欧拉方法求洛伦兹方程

    最小二乘 This question will develop a set of functions to least square fit the linear model

  3. 欧拉方法求解微分方程C语言,用欧拉方法求解微分方程组

    将来,如果您在问题中包含完整的警告消息,这将很有帮助-它将包含发生问题的行:tmp/untitled.py:15: RuntimeWarning: overflow encountered in do ...

  4. 【微分方程数值解】常微分方程(一)欧拉方法和改进欧拉方法(附python算例,封装类)

    欧拉方法与改进欧拉方法 一.算法原理 对给定微分方程 {y′=f(x,y)y(x0)=y0(1)\begin{cases} y' = f(x,y)\\ y(x_0) = y_0 \end{cases} ...

  5. 计算机方法欧拉,欧拉方法详解

    高中牛顿力学回顾 有一个具有一定速度在运动的物体: 当我们需要对其进行模拟时,自然会想起高中的 位移 = 速度 * 时间,即: $$s = v * t$$ 而当该物体具有恒定加速度(恒力)时: 我们可 ...

  6. 计算机图形学【GAMES-101】14、动画(物理模拟、质点弹簧系统、粒子系统、运动学、动作捕捉、欧拉方法)

    快速跳转: 1.矩阵变换原理Transform(旋转.位移.缩放.正交投影.透视投影) 2.光栅化(反走样.傅里叶变换.卷积) 3.着色计算(深度缓存.着色模型.着色频率) 4.纹理映射(重心坐标插值 ...

  7. 微分方程的数值解法之欧拉方法

    '''欧拉方法''' #所求常微分方程 f_x=input('y\'=') def fy(x,y):return eval(f_x)#原方程的精确解 f_e=input('y =') def fe(x ...

  8. matlab:欧拉方法求解微分方程

    参考书籍:常用数值算法及其matlab实现,作者:夏省祥 %第10章 常微分方程初值问题的数值解法 %欧拉方法,例10.1 %书籍:常用数值算法及其matlab实现 %第10章 常微分方程初值问题的数 ...

  9. [计算机图形学]动画与模拟:欧拉方法、刚体与流体(前瞻预习/复习回顾)

    一.前言 这是本专栏的倒数第二篇文章了,为什么不是最后一篇?因为我要单独写一篇总结哈哈,不管怎么说,从今年的3.13的MVP变换开始写,写到现在,也是一个很大的工程了,我很高兴能在大二下学期的期中这个 ...

最新文章

  1. 赤兔四足机器人的作用_腾讯 Robotics X 实验室四足移动机器人Jamoca首亮相,可挑战高难度梅花桩...
  2. HDFS权限设置 \ HDFS涉及ACLs的命令
  3. 新年图书整理和相关的产品
  4. Caused by: java.lang.ClassCastException: weblogic.xml.jaxp.RegistryXMLReader
  5. Teams AppId, InstallationId 和 ExternalId 的区别
  6. 华硕2020年显卡_送自己最好的新年游戏礼物,2020年新春显卡市场完全解析
  7. swift -- 字典
  8. 打印机测试图_国产彩色激光机一样很靠谱 奔图全新彩色激光机到底怎么样?...
  9. 体重增长:目前为止我们所知道的一切器
  10. cmd 卸载mysql_彻底卸载MySQL图文教程
  11. Directshow 采集-截屏和显示
  12. 东财《领导科学X》综合作业
  13. 顺势腹式呼吸还是逆势
  14. WIN10下 搭建golang+vscode开发环境(图文并茂,傻瓜式教程)
  15. 数据分析精选案例:3行代码上榜Kaggle学生评估赛
  16. 终于有人把大数定律讲明白了
  17. VS2019 / 2017 / 2013 产品密钥 – 所有版本
  18. 自由软件之父抛弃OLPC,支持中国的龙梦:教孩子们使用Windows无异于教他们抽烟
  19. 判断一个字符串是否是对称字符串 例如“abc“不是对称字符串,“aba“、“abba“、“aaa“、“mnanm“是对称字符串
  20. 使用挤压、哈哈镜、扭曲进行文字图像增强

热门文章

  1. 10个提高效率的在线实用工具
  2. python读文件open file 中文乱码问题
  3. java中自定义设置cookie(设置同父域解决跨域获取值得问题)
  4. jQuery保存cookie
  5. 黑客零基础教学:从开机到入狱
  6. Mc1.16forge官混教程/教补-#5 官混方块写法差异与为方块赋予常见属性
  7. 编译原理——数组结构的翻译
  8. 机械CAD中如何快速绘制相贯线?
  9. 如何把pdf转换成word软件在线
  10. 基于thinkphp的邮件群发系统的设计