- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Matlab笔记——匿名函数014
14. 匿名函数
Matlab7.0以上版本开始引入匿名函数,它可以实现内联函数所有功能,而且代码更简捷高效。
匿名函数的主要功能:
(1)可以代替“将函数编写为单独的m-文件”;
(2)可以实现符号函数的赋值运算;
(3)很方便地对含参变量函数进行操作。
(一)基本语法
f=@(参数1, 参数2, …) 函数表达式
其中,f为函数句柄,即调用匿名函数时使用的名字。
例如,f=@(x,y)x^2+y^2;
f(1, 2)
输出结果:ans=5
输入参数也可以是向量,例如,
f=@(x,y)x.^2+y.^2;
a=1:1:10;
b=10:-1:1;
f(a,b)
输出结果:ans=101 85 73 65 61 61 65 73 85 101
二重匿名函数:例如,
f=@(a, b) @(x) a*x+b;
其中,“a, b”是外层变量,“x”是内层变量。
这样理解:每个“@”符号后面括号里的变量的作用域一直到表达式的结尾。例如对于“a=2, b=3”, f(2, 3)是以x为变量的匿名函数:
(f(2, 3))(x)=2*x+3
类似的可以定义多重匿名函数。
(二)应用实例
一、符号函数的赋值运算
例1求下面函数的三阶导数在x=0.5的值,并绘制其在[0, 1]上的图像:
分析:先用符号运算得到三阶导数的解析表达式,再转化为匿名函数,再求值和绘图。
代码:
syms x
f=(x+tan(x))^(sin(x));
c=diff(f,3);
f3=eval([@(x) vectorize(c)]);
% vectorize函数的功能是使内联函数适合数组运算的法则
f3(0.5)
x=linspace(0,1,100);
plot(x,f3(x),linewidth,2)
title(y=[x+tan(x)]\^(sin(x))三阶导数图像)
xlabel(x)
ylabel(y)
运行结果:
ans = 4.3158
二、求解方程与参数方程
Matlab中求解连续函数f(x)=0的根的命令是:
fzero(f, x0)
其中,x0为寻找根的初始值。
例2求下面方程的根:
代码:
f=@(x) exp(x) + x^2 + x^(sqrt(x))-100;
format long % 设置更高的精度
x0=fzero(f,3)
f(x0) % 验证根
运行结果:
x0 = 4.163549956946139
ans = 2.842170943040401e-014
例3若例2中的方程带有参数a,
要求针对a在[0,2]上的不同取值求解方程,并绘制方程的解x与a的关系的图像。
代码:
f=@(a) @(x) exp(x)+x^a+x^(sqrt(x))-100;
% 相当于(f(a))(x)=exp(x)+x^a+x^(sqrt(x))-100
format long
fzero(f(1),4) % a=1时,求解方程的根x,初始值为4
A=0:0.01:2;
x=@(a) fzero(f(a),4); % 带着参数a求解方程的根x,得到x=x(a)
X=@(A) arrayfun(@(a) x(a),A);
% x(a)只能接受标量a,处理成能接受向量A
Y=X(A);
plot(A,Y,*-)
xlabel($a$,interpreter,latex,fontsize,15)
ylabel($x$,interpreter,latex,fontsize,15)
title($\mathrm{e}^{x}+x^{\sqrt{x}}+x^a-100$,interpreter,latex,fontsize,15)
% 用latex格式输入要显示的公式
运行结果:
ans = 4.315274301739397
三、“显式”表示隐函数
隐函数一般无法给出显式表达式,但借助匿名函数可以实现“已知隐函数表达式,对于给定的自变量x,可以通过数值方法求出因变量y”。
例4 “显式”表示下列隐函数:
其“显式表示”为:
y=@(x) fzero(@(y) (exp(y)+x^y)^(1/y)-x^2*y,1);
相当于求解满足“exp(y)+x^y)^(1/y)-x^2*y=0”的y=y(x), 其中1是初始值。
代码:
y=@(x) fzero(@(y) (exp(y)+x^y)^(1/y)-x^2*y,1);
% 求解满足隐函数方程的y=y(x),由此可以计算x=某值时的y的值
format long
y1=y(1)
y2=y(2)
y3=y(3)
Y=@(X) arrayfun(@(x) y(x),X);
% 把y=y(x)处理成可以接受向量的形式
Y(1:10)
运行结果:
y1 = 2.777942350124938
y2
您可能关注的文档
- MATLAB-Simulink复习.ppt
- matlab03_FigII.ppt
- MATLAB_CH07.ppt
- MATLAB_SIMULINK模块介绍.ppt
- MATLAB_程序设计——函数文件和程序调试.ppt
- matlab《蒙特卡洛模拟基金决策应用》.docx
- Matlab_第2章_MATLAB基本运算.ppt
- MATLAB三级项目报告.docx
- MATLAB与控制系统.docx
- MATLAB仿真之_连续时间LTI系统仿真和时域分析.doc
- 2024年二级建造师之二建公路工程实务题库及完整答案(夺冠).docx
- 2024年二级建造师之二建公路工程实务题库含答案(考试直接用).docx
- 2024-2025年二级建造师之二建建设工程施工管理考试题库含答案【基础题】.docx
- 2024年农村农业(休闲农业经营与管理)技能及理论知识试题库带答案(培优).docx
- 2024-2025年二级建造师之二建水利水电实务考试题库及参考答案【综合题】.docx
- 2024年二级建造师之二建公路工程实务题库含完整答案【必刷】.docx
- 2024年二级建造师之二建公路工程实务题库含答案(综合卷).docx
- 2024年电工证《低压电工实操》考试题库附答案【模拟题】.docx
- 2024年农村农业(休闲农业经营与管理)技能及理论知识试题库(历年真题).docx
- 2022大一新生迎新晚会策划书.docx
文档评论(0)