嵌套函数在求解积分上限中的应用

例1如下述积分表达式,已知a、e和l,如何求得β0?

本例关于β的积分结果不能解析表达,需要数值积分来做,同时还要求一个非线性方程。代码如下:
function sol=example1(a,e,l)function f=fun1(beta)f=a.*(1-e.^2)./(1-e.^2*sin(beta).^2).^(3/2);endfunction g=fun2(beta0)g=quadl(@fun1,0,beta0)-l;end
sol=fzero(@fun2,3);
end

本例采用了两个嵌套函数,fun1和fun2,fun1的功能是建立积分表达式,fun2的功能是建立关于β0的非线性方程。由于a、e和l是已知的,因此,a、e和l作为整个函数example1的输入,实际应用中给定一组a、e和l作为整个函数example1的输入。给定a=20、e=0.6和l=6,可以求解相应的解如下:

ol=example1(20,0.6,6)sol =0.4519

嵌套函数在GUI中的应用

用Matlab生成一个三角形界面
要求

  1. 图上的数字根据行数和列数动态生成,每一层都比上面大1
  2. 在滚动条滚动的时候,会根据滚动条的位置,使三角形中的数字变红,最大值使数字全部变成红色,最小值使得数字全变成黑色
    代码如下:
function triangle_table
fig=figure('defaultuicontrolunits','normalized','name','triangle_table',...'numbertitle','off','menubar','none');
ah=axes('Pos',[.1 .2 .75 .75],'Visible','off');
slider_h=uicontrol('style','slider','units','normalized','pos',...[0.1,0.05,0.75,0.05],'sliderstep',[1/6,0.05],'callback',@change_color);
hold on
for k=0:6plot(0:6-k,(6-k)*ones(1,(7-k)),'k');plot(k*ones(1,(7-k)),k:6,'k');
end
plot([0,6],[0,6],'k');
hold off;
for x=1:5for y=1:xtext(y-0.5,x+0.5,num2str(x),'color','k','tag','数字');end
end
for k=0:5text(k+0.1,k+0.5,[num2str(k),'.5'],'tag','数字');
end
%=====slider's callback function(nested function)============
function change_color(hObject,eventdata)v=round(6*get(slider_h,'value'));num_h=findobj('tag','数字');num_pos=get(num_h,'pos');red_num_logic=cellfun(@(x)(x(1)<=v&&x(2)<=v),num_pos);set(num_h(red_num_logic),'color','r');set(num_h(~red_num_logic),'color','k');
end
end

生成的示意图

本例生成界面的思路是用plot来画线,用text函数来填格子。每次移动滚动条后,得到当前滚动条的值。根据这个值来判断究竟把那些数字设成红色那些设成黑色。slider_h是滚动条的句柄,它的回调函数change_color用嵌套函数来实现,这样,slider_h对于嵌套函数来说是可见的,不采用额外的参数传递方式来传递到回调函数内部。

嵌套函数在3D作图中的一个应用

画出下列函数的图像

本例需要计算两个求和项,其中最外层要求一个无穷级数,分析表达式,可以得知,实际计算中,N不必取到无穷,只要取到30就可以达到较高的精度。代码如下

function [m,n,TT]=plot3dnmT(N,L)
%N:inf 的近似,L:[0,2]区间的剖分个数
C=zeros(N,1); %nested-function;Tmn=calcT(mm,nn)中用来储存计算结果
m=linspace(0,2,L);
[m,n]=meshgrid(m,m);
TT=zeros(size(n)); %和网格数据m,n对应的计算出来的T(m,n)网格数据
for ii=1:Lfor jj=1:LTT(ii,jj)=calcT(m(ii,jj),n(ii,jj));end
end
%================计算T(m,n)的nest-functionfunction Tmn=calcT(mm,nn)for N1=1:NC(N1)=(mm^N1/gamma(N1+1))*sum(nn.^(0:N1-1)./gamma(1:N1));Tmn=1.0-exp(-mm-nn)*sum(C);endend
mesh(n,m,TT)
end

得到如图

嵌套函数表示待优化的目标函数

求下面表达式的最小值
已知w=[π/2,π,3π/2];N=[π/2-1,-2,-3π/2-1]

其中,m在[0,2]范围内
代码如下:

function m=Findm
w=[pi/2,pi,pi*1.5];
N=[pi/2-1,-2,-1.5*pi-1];function y=ObjectFun(m)y=(quadl(@(t)t.^m.*cos(t),0,w(1))-N(1))^2+...(quadl(@(t)t.^m.*cos(t),0,w(2))-N(2))^2+...(quadl(@(t)t.^m.*cos(t),0,w(3))-N(3))^2;end
m=fminbnd(@ObjectFun,0,2);
end

上述代码中,目标函数即y用嵌套函数ObjectFun来表示。fminbnd第一个输入参数就是ObjectFun的句柄,第二第三个参数是求解最小值的范围。运行后得到结果如下:

>> format long
>> m=Findmm =1.000000256506471

嵌套函数在表示微分方程方面的应用

求下面的微分方程在[0,5]范围的解
y″+4y=3sin(at)
其中,a是参数,初始条件为:y(0)=1,y′(0)=0。
本例要想应用matlab的微分方程求解函数ode45求解,需要改变一下形式,即变成一阶微分方程式的形式:

其中y₁(t)对应于函数y(t),而y₂=y′(t).
代码如下:

function example5(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,y(:,2),'k:');        %画函数y(t)导数的曲线
set(gca,'fontsize',12);     %设置当前坐标轴字体大小
xlabel('\itt','fontsize',16); %标注x轴
ylabel('\ity','fontsize',16); %标注y轴
%用嵌套函数定义微分方程组function dy=tfys(t,y)dy(1,1)=y(2);        %对应于粒子中方程组的第一个方程dy(2,1)=3*sin(a*t)-4*y(1); %对应于例子中方程组第二个方程end
end

譬如,当a=6时,运行example5(6)得到如图

MATLAB嵌套函数的应用相关推荐

  1. matlab私有函数,MATLAB 嵌套函数,子函数,私有函数,重载函数

    MATLAB函数嵌套 MATLAB中M文件有两种类型,脚本M文件和函数M文件.脚本M文件是将可执行程序语句放入M文件中,就像在命令窗口那样,按其语句顺序及逻辑关系执行,可以理解为一般的顺序执行程序语句 ...

  2. matlab if嵌套函数,MATLAB嵌套函数的应用

    嵌套函数在求解积分上限中的应用 例1如下述积分表达式,已知a.e和l,如何求得β0? 本例关于β的积分结果不能解析表达,需要数值积分来做,同时还要求一个非线性方程.代码如下: function sol ...

  3. MATLAB嵌套函数使用

    嵌套函数是指在某函数中定义的函数. 嵌套函数的创建 MATLAB允许在M文件的函数体中定义-一个或多个嵌套函数,被嵌套的函数能包含进 任何构成M文件的成分. MATLAB函数文件一般不需要使用end语 ...

  4. MATLAB嵌套函数

    嵌套函数的定义 嵌套函数,即nested function,就是嵌套在函数体内部的函数.嵌套函数可以出现在一个函数体内部的任何位置,开始以function声明,结束的时候加上end.需要说明的是包含有 ...

  5. MATLAB嵌套函数练习

    嵌套函数:把一个或多个子函数放在同一个主函数的函数体内部而构成的函数称为嵌套函数,一般形式如下: 1.单层嵌套 %一嵌一 function x = A(p1,p2) ...function y = B ...

  6. Matlab中的嵌套函数

    目录 嵌套函数 什么是嵌套函数? 嵌套函数的要求 在父函数与嵌套函数之间共享变量 使用句柄存储函数参数 嵌套函数的可见性 嵌套函数 什么是嵌套函数? 嵌套函数是完全包含在父函数内的函数.程序文件中的任 ...

  7. Matlab 动态输入变量和嵌套函数、匿名函数

    一.简介 当输入的参数有不确定的时候就需要dynamic  input  variable . nargin==2 % nargin 是输入变量的数量, myfunc_areaCircum_d2(ra ...

  8. matlab 子函数句柄,matlab-函数句柄程序.ppt

    匿名函数可以使用工作空间的变量例如创建函数f(x,y)=x^2+y^3 >> p=2; >> q=3; >> f=@(x,y) x^p+y^q f = @(x,y ...

  9. matlab常用函数与常用指令大全

    matlab常用函数与常用指令大全 matlab常用函数- - 1.特殊变量与常数 ans 计算结果的变量名 computer 确定运行的计算机 eps 浮点相对精度 Inf 无穷大 I 虚数单位 i ...

最新文章

  1. ARP的超时重新请求
  2. php xml表格形式输出,PHP XML如何输出nice格式
  3. Pytest参数选项自由执行测试用例详解(二)
  4. oracle设置表的主键和外键,Oracle中给表添加主键、外键
  5. 使用ClassLoader加载资源详解
  6. [知了堂学习笔记]_Ajax之解析Json
  7. 【机器学习】机器学习笔记(吴恩达)
  8. F280049C 输出三相互补对称SPWM波
  9. XTU,C语言,平衡三进制2
  10. org.apache.taglibs.standard.tlv.JstlXmlTLV scanned from multiple locations
  11. 计算机硬盘硬盘共享如何设置,两台电脑如何共享文件夹?Win10设置共享文件夹或共享磁盘的方法...
  12. 如何快速、科学的配置GO语言编译Android环境
  13. linux容器内核配置,如何在Linux内核Centos下使用Sentinel LDK保护Docker容器实例
  14. 视频教程-2020年软考网络规划设计师案例分析历年真题详解软考视频教程-软考
  15. 微信小程序 编辑工具
  16. c语言游戏菜单栏界面设计,C语言课程设计-精美游戏目录选择界面.doc
  17. Android 使用uInput模拟手柄设备
  18. 怎样屏蔽微信朋友圈视频?局域网如何禁止员工看朋友圈视频?
  19. python3 tkinter详解_详解python3中tkinter知识点
  20. AUTOCAD——跨文件原位粘贴命令、如何用CAD绘制六角星

热门文章

  1. ABAP项目砖家之旅-语法和开发对象篇
  2. 〖大前端 - 基础入门三大核心之JS篇⑰〗- JavaScript的流程控制语句「while循环语句」
  3. 分享怎么让你的微信朋友圈提高200%的赚钱能力?
  4. Token 详解及介绍
  5. overridePendingTransition的使用
  6. Sequential 模型
  7. tf.keras.Sequential详解
  8. 华为游戏网络稳定服务器,华为云C6s荣获年度领先游戏云服务器奖
  9. 用友20周年会---各路英雄群聚上海共商本土雄心
  10. 录音转文字助手怎么操作?详细步骤教你使用,会议纪录轻松完成