微分方程的数值积分
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
end, grid
subplot(1,2,2)
for a=-3: 3
%取不同的a循环
plot(x,a*x.^3+x),hold on,
end, grid,hold off
用直接在图形窗内编辑的方法可在图内标注字符。
◆ 程序运行结果 程序运行结果见图5-4,其中a和c均从-3取到3,步长为1。
图 5-4 c和a取不同值时y=ax3+cx (a) a=1,c取不同值; (b) c=1,a取不同值
5.1 函数极限和导数
5.1.1 单变量函数值的计算和绘图 【例5-1-1】
y 3 e4tsin 4 3t π 要求以0.01s为间隔,求出y的151个2点,并求出其 导数的值和3曲 线。
解: ◆ 建模 可以采取下列两种方法来做: (1) 只用主程序编程的方法; (2) 编成函数文件,由主程序调用的方法。 求导数可采用diff函数对数组y做运算的方法。
%输入函数表达式
A=input(′A=,例如A=1′), %输入极限值
xc=input(′xc=,例如xc=0′), %输入对应的自变量值
flag=1; delta=1; x=xc-delta; n=1;
%初始化
while flag==1 epsilon=input(′任给一个小的数ε=′)
%任意给出ε
图 5-1 例5-1-1的曲线
5.1.2 参变方程表示的函数的计算和绘图 【例5-1-2】 摆线的绘制。如图5-2所示,当圆轮在平面上滚动时,轮上任一点所
画出的轨迹称为摆线。如果这一点不在圆周上而在圆内,则生成内摆线; 如果该点在圆 外,即离圆心距离大于半径,则生成外摆线。对于后一种情况,可由火车轮来想象。 其接触轨道的部分,并不是直径最大处,其内侧的直径还要大一些,以防止车轮左右 出轨。在这部分边缘上的点就形成外摆线。
◆ MATLAB程序
(1) 第一种方法的程序exn511a如下:
t=[0: .01: 1.5];
%设定自变量数组t
w= 4*sqrt(3);
%固定频率
y=w/8*exp(-4*t).*sin(w*t + pi/3); %注意用数组运算式
subplot(2,1,1),plot(t,y), grid
%绘制曲线并加上坐标网格
%设定参数数组 %输入常数
%计算x,y百度文库
%绘图
◆ 程序运行结果 设r=1,令R=r, R=0.7及R=1.5时得到的摆线、 内摆线和外摆线都绘于图5-3中。 为了显示摆线的正确形状,x、 y坐标保持等比例是很重要的,因此程序中要加axis (′equal′)
图 5-3 摆线的绘制
5.1.3 曲线族的绘制 【例5-1-3】 三次曲线的方程为y=ax3+cx,试探讨参数a和c对其图形的影响。 解: ◆ 建模 因为函数比较简单, 因此可以直接写入绘图语句中,用循环语句来改变参数。注
意坐标的设定方法,以得到适于观察的图形。给出的程序不是唯一的,例如也可用 fplot函数等。读者可自行探索其他编法。
◆ MATLAB程序
x=-2: 0.1: 2;
%给定x数组,确定范围及取点密度
subplot(1,2,1) %分两个画面绘图
for c=-3: 3
%取不同的c循环
plot(x,x.^3+c*x),hold on,
xvalues=w*exp(-4*tvalues).*sin(w*tvalues + pi/3);
◆ 程序运行结果 运行这两种程序都得到图5-1所示的曲线。为了节省篇幅,我们没有显示y的数据。 以后的各例中还将省略绘图时的标注语句。从本例看,第二种方法似乎更麻烦一些, 但它具备模块化的特点。当程序中要反复多次调用此函数,而且输入不同的自变量时, 利用函数文件可大大简化编程。我们应该掌握这种方法。两次应用diff函数或用diff(y, 2)可以求y的二次导数,读者可自行实践。
while abs(A-eval(fxc))>epsilon delta=delta/2; x=xc-delta; %找δ
%加标注
(2) 第二种方法的主程序exn511b如下: dt=0.01; t=[0: dt: 1.5]; w= 4*sqrt(3); y=exn511bf(t,w); Dy=diff(y)/dt; %绘图和加标注的程序略去 另要建立一个函数文件exn511bf.m,其内容为: function xvalues= exn511bf (tvalues,w) %注意编写的函数文件中,其语法对数组w应该能用元素群运算。
0<|xc-x|<δ 时,
|A-f(x)|<ε 其中,A是f(x)在x→xc时的极限,如果找不到这样的δ,A就不是它的极限。只考虑左极 限时,因为xc-x必为正数,所以可去掉绝对值符号。
◆ MATLAB程序
检验极限是否正确的程序
disp(′A是否是f(xc)的极限?′)
fxc=input(′ f(x)的表达式为,例如sin(x)/x′,′s′),
title(′绘图示例′),xlabel(′时间 t′),ylabel(′y(t)′)
%加标注
Dy=diff(y); subplot(2,1,2),plot(t(length(t)-1),Dy), grid
%求导数并绘制曲线,注意用数值方法求导后,导数数组长度比原函数减少一
ylabel(′Dy(t)′)
图 5-2 摆线的生成
解: ◆ 建模 概括几种情况,其普遍方程可表示为:
xA = rt-Rsin t yA = r-Rcos t 可由这组以t为参数的方程分析其轨迹。
◆ MATLAB程序 t=0: 0.1: 10; r=input(′r=′),R=input(′R=′) x=r*t-R*sin(t); y=r-R*cos(t); plot(x,y),axis(′equal′)
5.1.4 极限判别 用MATLAB来表达推理过程是比较困难的,因为它必须与实际的数值联系起来。
比如无法用无穷小和高阶无穷小的概念,只能用e-10、 e-20等数值。不过极限的定义恰 恰用了δ和ε这些数的概念,因此不难用程序表达。
【例5-1-4】 极限的定义和判别。 解: ◆ 建模 对于函数y=f(x),当任意给定一个正数ε时,有一个对应的正数δ