计算向量X的N阶前向差分FX=gradientF求一元函数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
format long fx1=‘x.^2’ fx2=inline('x.^y') fx3=@(x,y)x.^y %采用字符串表示被积函数 %采用内联对象表示被积函数 %采用匿名函数表示被积函数 function z=fx4(x,y)
s1=dblquad(fx1,0,1,1,2)
s2=dblquad(fx2,0,1,1,2)
第四章 数值计算
主要内容: 4.1 数值微积分
4.2 矩阵和代数方程
4.4 多项式运算
4.1数值微积分
4.1.1 近似数值极限及导数
也没有专门的求导指令。但MATLAB提供了与“求 导”概念有关的“求差分”指令。
在MATLAB数值计算中,既没有专门的求极限指令,
dx=diff(X) dx=diff(X,N) FX=gradient(F)
注意:不要企图借助数值计算求取极限
4.1.2 数值求和与近似数值积分
sx=sum(X) st=trapz(x,y)
沿列方向求和 采样梯形法沿列方向求函数y 关于自变量x的积分
scs=cumsum(X) 沿列方向累计求和
sct=cumtrapz(x,y) 采样梯形法沿列方向求函数 y
关于自变量x的累计积分
计算向量X的前向差分 计算向量X的N阶前向差分 求一元(函数)梯度
例 4.1-3
已知
x sin(t ) ,采用 diff 和 gradient 计算该函数在区间
[0, 2 ]
中的近似导函数。 clf d=pi/100; t=0:d:2*pi; x=sin(t); dxdt_diff=diff(x)/d; dxdt_grad=gradient(x)/d; subplot(1,2,1) plot(t,x,'b') hold on plot(t,dxdt_grad,'m','LineWidth',8) plot(t(1:end-1),dxdt_diff,'.k','MarkerSize',8) axis([0,2*pi,-1.1,1.1]) title('[0, 2\pi]')
ຫໍສະໝຸດ Baidu
s_ta=trapz(t,y)替换,即计算由t,y所绘折线下的面积。 (2)s=sum(y); s_sa=d*s; 用作近似积分是错误的。阶梯 虚线所占的自变量区间比积分区间多一个采样子区间。即
不能把d *sum(y)看作“矩形近似积分”。
(3)实际使用中,应该把子区间划分得相当小以便获取较
高精度的近似积分。显然,采样点愈多,积分精度愈高,
s3=dblquad(fx3,0,1,1,2) s4=dblquad(@fx4,0,1,1,2)
z=x.^y
sn =
0.40546626724351
4.1.4 函数极值的数值求解
[x,fval,exitflag,output]=fminbnd(fun,x1,x2,options)
求一元函数在区间(x1,x2)中的极小值。
[x,fval,exitflag,output]=fminsearch(fun,x0,options)
单纯形法求多元函数的极值点
fun—字符串、内联对象、匿名函数、函数文件句柄; 输出量x,fval分别是极值点和相应的目标函数极值; 输出量exitflag若给出大于0的数,说明成功搜索; 输出量output给出具体的优化算法和迭代次数。
S2=dblquad(fun,xmin,xmax,ymin,ymax,tol)
S3=triplequad(fun,xmin,xmax,ymin,ymax,zmin
,zmax,tol)
说明: (1)fun是被积函数,可以是字符串、内联对象、匿 名函数和M函数文件的函数句柄。
(2)要保证对于向量形式的自变量(一般为字母x)
输入,输出为长度相同的函数值向量。
(3)a,b为一重积分的下限和上限;
xmin,xmax,ymin,ymax,zmin,zmax是多重积分由
内向外的积分限。
(4)tol是个标量,用来控制绝对误差。默认时,积 分的绝对精度为10-6.(1e-6) 注:在编写被积函数时要遵循“数组运算”规则。
syms x Isym=vpa(int(exp(-x^2),x,0,1)) Isym = .74682413281242702539946743613185 format long d=0.001;x=0:d:1; Itrapz=trapz(x,exp(-x.*x)) Itrapz = 0.74682407149919 fx='exp(-x.^2)'; Ic=quad(fx,0,1,1e-8) Ic = 0.74682413285445
>>clear >> d=pi/8; >> t=0:d:pi/2; >> y=0.2+sin(t); >> s=sum(y); >> s_sa=d*s; >> s_ta=trapz(t,y);
>> ……
%图形显示指令
图 4.1-4 sum 和trapz求积模式示意
说明: (1)本例中的指令s_ta=d*trapz(y); 可以用
plot(t(kk-1),dxdt_diff(kk-1),'.k','MarkerSize',8) title('[end-10, end]') legend('dxdt_{grad}','dxdt_{diff}','Location','SouthEast') xlabel('t'),box off hold off
legend('x(t)','dxdt_{grad}','dxdt_{diff}','Location','North') xlabel('t'),box off hold off
subplot(1,2,2)
kk=(length(t)-10):length(t); hold on
plot(t(kk),dxdt_grad(kk),'om','MarkerSize',8)
但精度无法定量确定。
4.1.3 计算精度可控的数值积分
数值积分有闭型(closed-type)算法、开型 (open-type)算法,其主要区别在于:是否需 要计算积分区间端点处的函数值。
S1=quad(fun,a,b,tol)
Simpson法
S1=quadl(fun,a,b,tol)
Lobatto法