WordPress网站文章导出导入,做网站优化步骤,wordpress 母婴类模板,网站设计行业背景目录
1.匿名函数
1.1.匿名函数的定义与分类
1.2.匿名函数在积分和优化中应用
2.嵌套函数
2.1.嵌套函数的定义与分类
2.2.嵌套函数彼此调用关系
2.3.嵌套函数在积分和微分中应用
3.微分和积分
4.蒙特卡洛法
4.1.圆周率的模拟
4.2.计算N重积分#xff08;均匀分布均匀分布
4.3.计算N重积分等序列分布 1.匿名函数
1.1.匿名函数的定义与分类
匿名函数Anonymous function
定义f (X)expr
x为指定的函数的自变量Expr为具体的函数表达式。
f (x) x.^2;
ff f(1:10)
ff
1 4 9 16 25 36 49 64 81 100
g (x,y) x.^2 y.^2;
gg g(1:4,2:5)
gg
5 13 25 41
单变量匿名函数
定义f (x) expr x为指定函数的自变量Expr为具体的函数表达式
f (x) x.^2 含有参数的匿名函数当参数已知的时候
a 10, b 20;
f (x) a*x.^2b;
f(1:5)
ans
30 60 110 180 270 多变量匿名函数
g (x,y) x.^2y.^2;
% 含有参数的匿名函数当参数已知的时候
a 1,b 2;
f (x,y) a*x.^2b*y;
f(1:5,2:6)
ans
5 10 17 26 37
多重匿名函数
只有一个符号的为单重匿名函数有多个符号的为二重、多重匿名函数在参数传递方面非常方便。例简单的二重匿名函数
f (a,b) (x) a*x.^2b*x2;
f(2,3)
ans (x) a*x.^2b*x2
ans(3)
ans 29
这个段代码有一点问题运行结果是17
改成下面的代码才是正确的输出29
多重匿名函数
f (a) a(b,c) (x) a*x.^2b*xc;
匿名函数在解方程中的应用
匿名函数可以非常方便地表达所求方程并提供fzero等函数调用。例1求下列方程的根 f (x) exp(x) x.^2 x.^(sqrt(x)) - 100;
x0 fzero(f,3)
x0 4.1635
f(x0)
ans 2.8422e-14
匿名函数在解方程中的应用
不同参数一一求解对应方程的根时调用arrayfun函数。例1续a [0, 0.01, 0.02, ...., 2]求下列方程相应的根画出a和相应的x的图像。
f (a) (x) exp(x) x^a x^(sqrt(x)) - 100;
aa 1:0.01:2;
y arrayfun((a) fzero(f(a), 4), aa);
%运用arrayfun函数批量处理
plot(aa, y)
xlabel($a$,interpreter,latex,fontsize,15)
ylabel($x$,interpreter,latex,fontsize,15)
title($e^xx^ax^{\sqrt{x}}100$,interpreter,latex,fontsize,15) 匿名函数在表示隐函数方面的应用
隐函数一般无数学上的显式表示运用matlab对自变量x运用数值解给出因变量y。
例1显式表示下列y关于x的隐函数 y (x) fzero((y)(exp(y)x^y)^(1/y)-x^2*y,1);
y(1)
ans 2.7779
希望接受向量形式的输入结合arrayfun函数
y (x) arrayfun((xx)fzero((y)(exp(y)xx^y)^(1/y)-xx^2*y,1),x);
y(1:5)
ans 2.7779 1.1055 0.7759 0.6284 0.5425
例2显式表示Z关于xy的函数 接受向量形式的输入结合arrayfun、fzero函数
z (x,y) fzero((z)z-sin((z*x-0.5*)^22*x*y^2-z/10)*exp(-((x-0.5-exp(-yz))^2y^2-z/53)),rand);
[X,Y] meshgrid(-1:0.1:7,-2:0.1:2);
Z arrayfun((x,y) z(x,y), X, Y)
surf(X, Y, Z)
%坐标轴和函数标题
xlabel($x$,interpreter,latex,fontsize,15)
ylabel($y$,interpreter,latex,fontsize,15)
zlabel($z$,interpreter,latex,fontszie,15)
title($z\sin((zs-0.5)^2zxy^2-z/10)\exp(-((x-0.5-\exp(-yz))^2y^2-z/53))$,interpreter,latex,fontsize,15) 1.2.匿名函数在积分和优化中应用
匿名函数在求积分区域中的应用
在对称区间积分求积分区间[-t,t]使得 zfzero((u) 0.99*pi/2-quadl((x)sin(x).^2./x.^2, 0, u), 1)
z 32.3138
匿名函数在数值积分中的应用
求下列函数的三阶导数在区间[0,1]上的图像 syms x;
f(xtan(x))^sin(x);
cdiff(f,3);
t0:0.01:1;
f3eval([(x) vectorize(c)]);
plot(t,f3(t))
xlabel(x)
ylabel(y)
title((xtan(x))^{sin(x)}三阶导数图像)
三节导函数的图像 x0:0.01:1;
y(xtan(x)).^sin(x);
plot(x,y)
title((xtan(x))^{sin(x)}函数图像)
函数图像 2.嵌套函数
2.1.嵌套函数的定义与分类
嵌套函数nested-function
嵌套函数的优点 可以方便解决变量共享问题 复杂的表达式中涉及的参数传递 编写GUI图形用户界面时参数传递问题。
嵌套在函数体内部的函数嵌套函数可以方便的实现变量共享可以出现在函数体内部任意位置除if/elsewhile,switch等结构语句中。嵌套函数在尾末必须加上end。
例1嵌套函数简单应用内外变量共享)
function r MyTestNestedFun(input)
a 5;
c sin(input)tan(input);
function y nestedfun(b)
y a*cb;
end
r nestedfun(5);
end
例2嵌套函数的变量作用域内部调用外部
function r NestedFunctionVarScopeDemo(a)
b a1;function Nested1c b1;function Nested11d ca;endNested11;end
Nested1
例3嵌套函数的变量作用域2未调用时不运行
function r NestedFunctionVarScopeDemo2(a)
b a1;function Nested1c b1function Nested11d ca;endend
Nested1
e c1
r d;
end
例4嵌套函数的变量作用域3无嵌套关系不能共享
function r NestedFunctionVarScopeDemo3(a)
b a1;function Nested1c b1;c1 10;Nested2;c2 d^2; %这一步有问题end
Nested1
r c2
end
2.2.嵌套函数彼此调用关系
例5父函数与子函数父调用子不能调用孙
function r NestedFunctionCallDemo1(a)
b a1;function c1 Nested1(x)c b1;c1 10c*x;function d Nested11d ca;endend
c1 Nested1(1);
r Nested11;
end
例6父函数与子函数子调用父孙调用爷
function NestedFunctionCallDemo2(flag)
switch flagcase 1disp(flag 1)return;case 2disp(flag 2)return;case 3disp(flag 3)returnotherwisedisp([flag , num2str(flag)]);returnend
function NestedFunctionCallDemo2(flag)% 续function NestedFun1NestedFunctionCallDemo2(1);%子调用父;NestedFun2function NestedFun2NestedFunctionCallDemo2(3);%孙调用爷;endend
end
例7父函数与子函数子调用叔父
function NestedFunctionCallDemo3
Nested1(5)function Nested1(x)disp([Nested1执行输入, num2str(x)])Nested2(6)function Nested11(xx)disp([Nested11执行输入,num2str(xx)]);endendfunction Nested2(y)disp([Nested2执行输入,num2str(y)])function Nested22(yy)disp([Nested22执行输入,num2str(yy)]);endend
end
例8父函数与子函数孙调用大爷不能用堂伯堂哥
function NestedFunctionCallDemo4
Nested1(5)function Nested1(x)disp([Nested1执行输入, num2str(x)])Nested11(6)function Nested11(xx)disp([Nested11执行输入,num2str(xx)]);Nested2(pi)Nested22(10);endendfunction Nested2(y)disp([Nested2执行输入, num2str(y)])Nested22(pi*pi)function Nested22(yy)disp([Nested22执行输入,num2str(yy)]);endend
end
父函数与子函数
嵌套父亲儿子孙子
不同嵌套亲属关系
父子互助不能求孙
子可求父、伯、大爷、爷不能求侄儿
2.3.嵌套函数在积分和微分中应用
例1求积分已知ae和l求\beta_0? function sol example541(a,e,l)function fun(beta)f a.*(1-e.^2)./(1-e.^2.*sin(beta).^2).^(3/2);endfunction g fun(beta0)g quadl(fun1,0,beta0)-1;endsol fzero(fun2,3);
end
sol example541(20,0.6,6)
例2 function m Findm
w [pi/2, pi, pi*1.5]
N [pi/2-1, -2, -1.5*pi-1];
function y ObjecFun(m)y (quadl((t) t.^m.*cos(t), 0, w(1))^2 (quadl((t).^m.*cos(t), 0, w(2))^2 (quadl((t).^m.*cos(t), 0, w(3))^2;
end
m fminbnd(ObjecFun, 0, 2);
end
% 第二段代码
function m Findm
w [pi/2, pi, pi*1.5];
N [pi/2-1, -2, -1.5*pi-1];
function y ObjecFun(m)
s (w)arrayfun((ww) quadl((t) t.^m.*cos(t), t, ww), w);
y sum((s(w)-N).^2);
end
m fminbnd( ObjecFun, 0, 2);
end
例3求微分方程在[0, 5]范围的解a为参数 function example545(a)
tspan [0,5]; % 变量求解区间
y0 [1,0]; % 初值
[t,y] ode45(tfys, tspan, y0); % 调用ode45求解方程
figure;
plot(t, y(:,1),k); %画函数y(t)的曲线
hold on;
plot(t,(:,2), k:); %画函数y(t)导数的曲线
set(gca,fontsize,12); % 设置当前坐标轴字体大小
xlabel(\itt,fontsize,16); %标注x轴
ylabel(\ity,fontsize,16); %标注y轴
function example545(a)
%嵌套函数定义微分方程组function dy tfys(t,y)dy(1,1) y(2); %对应于例子中方程组第一个方程dy(2,1) 3*sin(a*t)-4*y(1);%对应于例子中方程组第二个方程end
end3.微分和积分
敬请期待
4.蒙特卡洛法
4.1.圆周率的模拟
例1蒲丰投针问题
18世纪蒲丰提出以下问题设我们有一个以平行且等距木纹铺成的地板如图现在随意抛一支长度比木纹之间距离 小的针求针和其中一条木纹相交的概率。并以此概率布丰提出的一种计算圆周率的方法——随机投针法。这就是蒲丰投针问题又译“布丰投针问题” 证明由于向桌面投针是随机的所以用二维随机变量X,Y来确定它在桌上的具体位置。设X表示针的中点到平行线的的距离Y表示针与平行线的夹角如果xl/2sin(y)时针与直线相交。 并且X在服从均匀分布Y在服从均匀分布XY相互独立由此可以写出XY的概率密度函数 因此所求概率 Monte Carlo方法是计算机模拟的基础它的名字来源于世界著名的赌城——摩纳哥的蒙特卡洛 其历史起源于 1777 年法国科学家蒲丰提出的一种计算圆周π 的方法——随机投针法即著名的蒲丰投针问题。
Monte Carlo方法的基本思想是首先建立一个概率模型使所求问题的解正好是该模型的参数或其他有关的特征量 然后通过模拟一统计试验 即多次随机抽样试验 确定 m和 n 统计出某事件发生的百分比。只要试验次数很大该百分比便近似于事件发生的概率这实际上就是概率的统计定义。利用建立的概率模型求出要估计的参数。蒙特卡洛方法属于试验数学的一个分支。
MATLAB语言编程实现1
l 1; a 2;n 10000;m 0;
for k l : n
x unifrnd(0, a/2); y unifrnd(0, pi/2);if x l/2*sin(y)mm1;end
end
pm/n;pi_m1/p
pi_m3.2584
2)
l1;a2;n10000;m0;
xunifrnd(0,a/2,1,n);
yunifrnd(0,pi/2,1,n);
[gs,wz]find(xl/2*sin(y));
msum(gs);
pm/n;pi_m1/p
pi_m3.1636
4.2.计算N重积分均匀分布
原理用蒙特卡洛法计算N重积分积分设D为n维空间Rn的一个区域,f(x)∈D Rn→R,区域D上的n 重积分用下式表示 可以认为 I(区域D的测度) X (函数f的期望)。基本的蒙特卡洛法就是找一个超立方体测度已知为Mc包含区域D在D内随机生成nn一般足够大个均匀分布的点统计落入区域D的点假设有m个。
则区域D的测度 函数f的期望 积分为 例1用蒙特卡洛法计算积分 %构造被积函数x为长为4的列向量或者矩阵行数为4。x的每一列表示4维空间中的一个点
f (x) exp(prod(x));
n 10000;
X rand(4,n); % 随机生成n个4维单位超立方体内的点
I sum(f(x))/n % 用基本的蒙特卡洛法估计积分值
I 1.069245225746442
例2:用蒙特卡洛法计算积分 f (x) prod(x);n 100000;% 随机均匀积分区域的点
x1 unifrnd(1,2,1,n);x2 unifrnd(1,4,1,n);
x3 unifrnd(1,16,1,n);
ind (x2x1)(x22*x1)(x32*x1.*x2)(x3x1.*x2); % 积分区间
X [x1;x2;x3];
I (4-1)*(16-1)*sum(f(X(:,ind)))/n
I 1.791951576008592e02
4.3.计算N重积分等序列分布
在区间[a,b]中的一个(确定性)点列x1,x2,... ,若对所有的有界黎曼(Riemann)可积函数f(x),均有 则称该点列在[a,b]中是等分布的。令(ξ)表示ξ的小数部分,即(ξ)ξ一[ξ],这里[ξ]表示不超过ξ的最大整数。
定理6.1 若θ为一个无理数 ,则数列为xn (nθ), n 1,2 ,... ,在[0,1]中是等分布的。
对于一般的区间[a,b],可以令unxn (b-a)a来得到[a,b]中等分布的点列。对于s重积分,一般是挑选s 个对有理数线性对立的无理数,来得到包含积分区域D的超长方体内的均匀分布的点列。[uai, ubi ],…得到用等分布序列蒙特卡洛法计算的积分的近似值: 例3用等序列蒙特卡洛法计算例1的积分 f (x) exp(prod(x)); n 10000;
% 选取对有理数独立的无理数sqrt(2)sqrt(3)sqrt(6)/3sqrt(10)来分成等分布序列
x bsxfun(times, repmat(1:n,4,1),[sqrt(2);sqrt(3);sqrt(6)/3;sqrt(10)]);
x mod(x,1);%对1取余运算即得小数部分
I sum(f(x))/n %
I 1.069297245824625
例4用等序列蒙特卡罗法计算积分 包含积分区域的超长方体 选取对有理数独立的无理数 来生成等分布序列,matlab程序为
f (x) sin(x(1,:).*exp(x(2,:).*sqrt(x(3,:))))x(4,:).*x(5,:);
n 10000000;
x bsxfun(times,repmat(1:n.5,1),[sqrt(2);sqrt(3);sqrt(6)/3;sqrt(10);sqrt(19)]);
x mod(x,1);
% 一下变换使得区间(0,1)上的等分布序列变到各层积分区间上去
BminusA diff([0.5 sin(exp(1))/2 sin(exp(1))/4])
x(2:end,:) bsxfun(times,x(2:end,:),BminusA);