用mathematica画一个常微分方程 积分因子的积分曲线

因为最近在看微分方程,想观察一下方程的斜率场,所以就想看看万能的Mathematica能不能画出微分方程的斜率场。百度了一下和自己也查看了一下Mathematica的官方文档,但是发现好像并没有想要的结果,网上找到很多都是先解出微分方程的解,然后再把解导入来画斜率场的。(好像Matlab可以,不过我没用过)
所以就在想有没有方法不用解微分方程,直接用微分方程作输入来画它的斜率场的方法。然后今天下课的时候回宿舍搞了一下,发现可行。所以下面就来跟大家分享一下。
首先要来的就是先做个理论的分析,来看看从理论上是否可行(该方法只对一阶常微分方程有效)
对于一阶常微分方程有
dydx=f(x,y)
熟悉微分方程的人可能已经对上面方程的几何意义非常熟悉了,左边即斜率,右端为定义在二维平面R2上的函数。几何意义非常明显,即
dydx=f(x0,y0)
其中(x0,y0)∈R2,因为上方程左端就是斜率,上面的一阶微分方程即确定了在平面R2某点的斜率。所以明显我们可以按照这样在平面上画出该方程的斜率场,而且满足斜率场的其中一条曲线也就是该微分方程的一个特解。
转化为Mathematica语言
下面就要把理论上的东西转化为实际在Mathematica上操作的语言。
我们通过查看Mathematica的官方文档,可以知道可以用来画向量场的函数有 StreamPlot[] 和 VectorPlot[] 两个,其中两个的差别只是一个是画流线,一个是画向量箭头的。现在开始在文章下面一直都是使用 StreamPlot[] 来进行画向量场。
不过现在有一个问题是,这两个函数的输入都是分开的,就是只接受输入向量x分量的函数,和y分量的函数,并不是单纯的接受微分方程的输入。而我们从微分方程里面知道的信息只有在某点的斜率,我们要把这个斜率的信息转化成向量的x分量,和y分量的信息。
所以请看下图
从上图我们看出,假设存在一向量,必有x跟y方向的分量有关系式
|v?&x||v?&|=cosθ
对于y分量有
|v?&y||v?&|=Sinθ
那么就是有|v?&x|=|v?&|*cosθ,其中θ就是在该点的斜率角。它的值可以通过取反三角函数得到即θ=Arctan(dydx)=Arctan(f(x,y))
再把上式代入x分量的式子,就有
|v?&x|=|v?&|*cos(Arctan(f(x,y)))
同理对于y方向,就有
|v?&y|=|v?&|*sin(Arctan(f(x,y)))
上面这个|v?&|是向量的长度,一般情况如果只是想考察向量的斜率方向,不关心斜率的大小可以取|v?&|=1即单位向量,那么向量场所有的向量都是长度为1的单位向量。
到目前为止就完成了从斜率角到向量x跟y方向分量函数的转化,利用计算机上面这个看似复杂,看到头大的公式也能很轻易的计算出来。
下面就把上面推出来的x和y方向的函数再Mathematica里面定义
In[1]= fx[z_] := Cos[ArcTan[z]]
In[2]= fy[z_] := Sin[ArcTan[z]]
然后定义完了之后,直接就可以调用StreamPlot[]来画斜率场了
In[3]= StreamPlot[{fx[z]], fy[z]}, {x, 0, 10}, {y, -5, 10}]
上面的Mathematica代码,后面两个花括号代表画的范围,前面的花括号代表x的分量函数,和y的分量函数。分量函数里面的z可以替换成你想要求斜率场的微分方程的右端函数。
下面以微分方程dydx=y2 为例子做一个测试,在Mathematica里面输入如下代码
StreamPlot[{fx[y^2], fy[ y^2]}, {x, 0, 10}, {y, -5, 5}]
我们都知道该微分方程的通解为
由Mathematica得到斜率场如下图:
加上斜率向量的大小
上面所做的都是在斜率向量的大小为单位长度的情况下做的,下面就来为斜率向量加上随角度大小变化而变化的长度。即斜率向量的大小是斜率角θ的函数。
|v?&|=|Arctan(f(x,y))|
那么上面推导出的x和y方向的函数,可以写为
|v?&x|=|Arctan(f(x,y))|*cos(Arctan(f(x,y)))
对于y方向同样有
|v?&y|=|Arctan(f(x,y))|*sin(Arctan(f(x,y)))
跟之前的公式一样这看起来很复杂的公式在计算机面前,根本不算什么。非常快就能够算出答案。
那么现在的斜率场就具有了随角度大小变化的向量大小了。
这也能在Mathematica里面体现出来,我们可以设置一个参数来使Mathematica根据向量的大小(范数)来着色,使斜率场更加直观,好看。
着色的代码如下
StreamPlot[{fx[y^2], fy[ y^2]}, {x, 0, 10}, {y, -5, 5},
StreamColorFunction -& Hue]
可以看到在上面的代码里面,设置了一个参数StreamColorFunction-&Hue,这个参数代表根据向量的大小来着色。
其他方程的斜率场
好的,用Mathematica画斜率场就到这里了。下面给大家看一下一些我个人认为很漂亮的微分方程的斜率场线
上图是方程dydx=sin(y)
上图是方程dydx=sin(yx)
上图是方程dydx=e-y
喜欢我们的内容吗?喜欢的话可以关注我们的公众号,扫下面的二维码关注我们吧
本文已收录于以下专栏:
相关文章推荐
本文用matlab求解常微分方程组。
看了很多关于传染病模型的matlab程序,大都是绘制出两条曲线(I、S)的,本文最大的不同是绘出SIR三条曲线。
先给出SIR微分方程组
     
函数文件...
1.计算微分
     函数diff可以用来计算符号表达式的微分,其调用格式如下:
     df=diff(f,n);
     参数说明:df是微分运算的结果。f是输入的表达式,n是求导的次数,其...
人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..
——虽然Maple的界面用起来比较不称心,我从来不敢否认它的强大。这不,碰上一个简单定积分计算的例子:Maple可以计算出来,mathematica不支持。问题一个包含 向下取整 函数的定积分:
http://www.apmaths.uwo.ca/~arich/
Rule-based Mathematics
Symbolic Integration Rules
Crafted b...
Mathematica绘制常见曲线才疏学浅,资历欠佳,难免有误,望有心人批评指正。 本文主要用于展示自己使用mathematica绘制的数学上的常见和常用曲线(本来是动图的,只因技术不精,变成静图了)...
来源Two-dimensional L-systems此外,可以参考Stan Wagon的:
Mathematica in Action: Problem solving through visua...
他的最新文章
讲师:汪剑
讲师:陈守元
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
Mathematica软件在常微分方程的几个应用
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
用Mathematica绘制几何图形
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口扫二维码下载作业帮
2亿+学生的选择
下载作业帮安装包
扫二维码下载作业帮
2亿+学生的选择
怎样用Mathematica将一曲线系绘制在同一坐标中.比如一曲线系:y=ax^2+2aSin[x]-5.此曲线系依赖于参数a的变化,当a取一个区间内的一系列的的值时(有时甚至是多个参数),如何用Mathematica将这一系列的曲线绘制在同一坐标内.(而不是用Do循环一个坐标系中只画了一个曲线,最后却得到了许多坐标系,每个坐标系只有一个曲线)我看了刚才的那位朋友的答复,首先非常感谢.但是照您说的那样的话,还是得先将一系列的单个图象先画出来,最后用Show将它们统一起来.我想直接把它们画在同一坐标中.我试了这样的Plot[Table[ax^2+2aSin[x]-5,{a,1,5}],{x,-Pi,Pi}],但不行.我也用Do试过,只能得到一系列的坐标,每一个里只有一个曲线,
扫二维码下载作业帮
2亿+学生的选择
先将a的一系列取值对应的函数都画出来,可以用Do[],也可以用Table[],然后用Show[]命令把这些图画在一起就行了.具体如何使用可以按F1查询.挺容易的.b = Table[Plot[a*x^2 + 2a*Sin[x] - 5,{x,-π,π},DisplayFunction -> Identity],{a,1,5}];Show[b,DisplayFunction -> $DisplayFunction];这样写就行了.
为您推荐:
其他类似问题
扫描下载二维码扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
mathematica 画微分曲线用什么函数
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
绘制由NDSolve求出的微分方程数值解曲线的命令Plot[Evaluate[y[x] /.solution],{x,a,b}]具体如:Plot[Evaluate[y[x] /.NDSolve[{y'[x] == Sin[y[x]],y[0] == 1},y,{x,0,4}]],{x,0,4}]
为您推荐:
其他类似问题
f1[x_] = D[x^2 + y^2, x]Plot[f1[x], {x, -6, 6 Pi}]
扫描下载二维码

我要回帖

更多关于 mathematica 二重积分 的文章

 

随机推荐