实验四 利用Mathematica解方程 实验目的:学会正确使用Solve和FindRoot及DSolve解各类方程 预备知识: (一)理解方程(方程组)的代数解法 (二)解方程的牛顿切线法及弦截法 (三)微分方程相关知识 (四)Mathematica中解各类方程及方程组的相关命令
边学边做: (一)求方程(方程组)的代数解或数值解:Solve[方程或方程组,变量或变量组], NSolve [方程或方程组,变量或变量组] (1)解下列方程:ax+b=0;x2+x+1=0; x4-x3-6x2+1=0 (2)解方程组:1+2x=0 3+2x+y=0 (3)对于方程x5-x3-6x2+1==0,试用Solve和NSolve分别对它求解,对比得到的结果,体会代数解(精确解)与数值解的差别
(二)从初始值开始搜索方程或方程组的解:FindRoot[方程(方程组),{未知元,初值}](4)解方程:sinxe2x-cosx=0 (三)在界定范围内搜索方程或方程组的解: FindRoot[方程(方程组),{未知元,初值1,初值2}] (5)解方程:sinxe2x-cosx=0 (6)先观察f(x)=sinx-cosx的图形,然后选择一个初始点去求解,并且根据图形确定在某个区间中搜索它的零点
(四)解微分方程:DSolve[{微分方程,初始条件},未知函数,自变量] (1)求微分方程 满足初始条件 的特解。 (2)求微分方程 的通解 (3)求微分方程 的满足初始条件 的特解。 (4)求微分方程 的通解 (5)求初值问题 在区间[0,1]上的近似解
学生实验: 一、基础部分 1.求方程 在 附近的一个根 2.求微分方程 满足初始条件 的特解 3.求微分方程 的通解 4.求微分方程 的通解 5.求微分方程 满足初始条件 的,在 处的数值解
二、应用部分 (1) 找出方程exsinx-xcos2x=0最靠近原点的五个根. (2)方程y″+9y=0的一条积分曲线通过点(π,-1),且在该点和直线y+1=x-π相切,求这条曲线的方程. (3)一垂直悬挂的弹簧,其下有一质量为m的重物,平衡位置时弹簧伸长a,如果将物体向下拉开一段距离b,然后放开,物体就在平衡位置上下振动,求其运动规律x=x(t). (4)一电动机运转后,每秒钟温度升高1°C,设室内温度为15°C,电动机温度的冷却速率和电动机与室内温差成正比,求电动机的温度与时间的关系.
一、用Solve解代数方程、方程组,求其精确解,数值解,复数解 实验四内容详解: 一、用Solve解代数方程、方程组,求其精确解,数值解,复数解 1.命令格式 Solve[单个方程,未知元] Solve[{方程组},{未知元表}] 2.边学边做 Solve[a*x+b==0,x]; Solve[x^2+x+1==0,x] Solve[x^4-x^3-6*x^2+1==0,x] a=(1+2*x)^3;b=(3+2*x+y)^4; Solve[a==0,b==0,{x,y}]
注: 1)在Mathematica中用“=”表示相等关系,用“==”表示方程 2)对于高次多项式方程,有时系统也求不出精确解这时可直接用DSolve求出它的数值解。例:NSolve[x^5-x^3-6*x^2+1==0,x,20],命令行中的20表示要求方程的解精确到小数点以后20位,可根据需要输入。
二、用FindRoot求解一般方程 1.命令格式 FindRoot[方程,{未知元,初值}]或FindRoot[方程,{未知元,初值1,初值2}] 2.边学边做 FindRoot[Sin[x]*Exp[2*x]-Cos[x]==0,{x,0.5}] 初值0.5是方程根的一个近似值,通常通过作图之后去确定。此方法的理论依据是解方程的牛顿切线法。 FindRoot[Sin[x]*Exp[2*x]-Cos[x]==0,{x,0,1}] 此方法的理论依据是解方程的弦截法。 方程求解情况比较复杂,有时上述方法不能解决,则需要其它方法。
DSolve[{微分方程,初始条件},未知函数,自变量] 1.命令格式 DSolve[{微分方程,初始条件},未知函数,自变量] NDSolve[方程,未知函数,{自变量,a,b}]可求得微分方程或方程组在自变量指定取值范围内的数值解 2.边学边做 (1)求微分方程 满足初始条件 的特解。 DSolve[{y’[x]==y[x]+x,y[0]==1},y[x],x] (2)求微分方程 的通解 DSolve[y”[x]+2*y’[x]+y[x]==0,y[x],x]
(3)求微分方程 满足初始条件 的特解。 解 DSolve[{y”[x]-2*y’[x]+y[x]==0,y[2]==1,y’[2]==2},y[x],x] (4)求微分方程 的通解 解 DSolve[{x’[t]+y’[t]==Cos[t], y’[t]+x[t]==Sin[t]},{x[t],y[t]},t]
(5)求初值问题 在区间[0,1]上的近似解 解 NDSolve[{y’[x]==(3/2)*y[x]-9*x/(2*y[x]),y[0]==1},y[x],{x,0,1}] \输出为{{y->InterpolatingFunction[{0.,1.},<>]}} 该结果表示一个纯函数代入规则,即为区间[0,1]上的插值函数,可通过各种函数操作求解. 如y[0.1]/.% 为x=0.1时的函数值.