找回密码
 注册
关于网站域名变更的通知
查看: 534|回复: 1
打印 上一主题 下一主题

快来学习一下matlab自定义函数是怎样编写的

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-12-19 10:01 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

$ c1 V% ^! x, N; ?问题
6 x$ V3 r7 `' D/ N) [0 z自定义一个函数,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数。
# z9 ^! U- \2 ]6 v: [自定义一个函数,计算一行向量中各元素的均值和标准差。
( D1 m9 Z: d% `* U. K求下列方程的根:/ |/ s2 d. a) m' C2 p! N' S

  l* q  k9 }" ^$ @( ]0 ~4 j6 _ ' U. m" v' T! G, w0 K' Z; W+ Y- Q
' |' M/ r4 c4 e. n4 F" [+ F. N
分析与解答:
3 z: d$ y9 `7 D. p1.实验过程:创建m文件,保存到桌面,重命名位fushu,此时我就创建了一个函数,然后再新建一个m文件作为我们命令文件,实现输入复数并调用函数的功能,然后运行之后,在matlab命令行窗口即可执行
( {# s. r+ F2 v4 i& j0 ]% I* q+ B, Y/ g# n' X$ Z1 f; r
实验结果:* S2 X0 N8 c8 o! N6 t. m3 M# F' _2 K6 [

9 n8 |1 L* o7 U
" T1 J/ _; }) V4 P7 Y! ], K
* V% y9 q* c" [% N6 W2 V; G% c2.实验过程:8 [7 c3 O- o0 e
函数文件:8 }, u: b' G, G* _* u

. t" K/ ~4 l' r! y6 U
  • function output=way(x)
  • n=length(x);
  • sum=0;
  • for i=1:n
  •     sum=sum+x(i);
  •     i=i+1;
  • end
  • avg=sum/n;
  • b=0;
  • for i=1:n
  •     b=b+(x(i)-avg)^2;
  •     std1=sqrt(b/n);
  • end
  • fprintf('avg=%f\n',avg);
  • fprintf('std=%f\n',std1);5 w% n; M2 r4 s
) h  R% x/ C9 ~
, Q$ d! ]' ~& w) J* h7 Z& f1 K+ U
命令文件:% m5 L7 M5 [  l0 ^
% Z- z  e/ U+ M
  • x=input('x=?');
  • way(x);* g- _; ?$ Y0 X: M( r

% c) T) O/ n" [# y; n; D" h) j. p3 f$ f4 \: x3 B0 ~7 W
命令文件保存后运行,然后在命令行窗口输入一个向量$ ]+ Q7 x0 C( Q

! Q2 X4 ]$ E6 b7 u& s. \- A实验结果:4 e6 N8 B' t3 v( i

, d8 E. T4 c; G  E# g/ F' ^% C* u
  • x=?0:5
  • avg=2.500000
  • std=1.707825  W. K. ^8 @. e, Z3 I  W

$ Z4 `: J# b7 @/ _# u
+ V5 E$ U" O* B! B! @- M3.直接在命令行窗口执行即可

2 W2 a# e. ]0 h# s/ O! ]/ P6 N) n! G& d: z7 ?5 z; ?; x
+ X! Y3 U; {' w# g$ @, S- ]: X
过程及结果
) m) X9 I1 p* n# [# g
/ I- H" n$ d5 a) L5 v( N
  • >> f=@(x)exp(x)+x^2+x^(sqrt(x))-100;
  • >> x0=fzero(f,3)
  • x0 =
  •     4.1635
  • >> f(x0)
  • ans =
  •    2.8422e-14

  • % [2 ?$ n. t! C( H3 d  P# l2 h; R
2 h" S2 u+ b! F0 Y

- [! z% p3 X% W0 q$ i其中fzero(f,a)的意思是在a旁边找一个最接近a的点x使f(x)最接近于零
" T7 ~: y8 F$ y. T8 j
: H( K4 s3 f" Y, S3 g" q6 L总结与心得
9 x+ k  o6 w& V. i
& \0 f5 q7 |7 M$ Y# z% D" }3 c: kMatlab自定义函数的方法:
# L- s+ F' ~8 x  m
1.函数文件+调用命令文件:需单独定义一个自定义函数的M文件;
4 z3 I' v, }# j- P$ O7 p$ `# x2.直接通过@符号定义.如:f=@(x,y)(x.^2-sin(y)),调用:f(2,3)
/ Q7 @/ l; v' i& M8 ~函数句柄变量f相当于函数的别名,利用它可以间接调用函数( Y* I, H8 H. `& m+ i6 O) B

- S9 g$ s9 k1 T# H; \: zMatlab的函数中变量的传递" F$ y* L& m; x/ g8 y; f! m
1. 函数所传递参数的数目具有可调性
$ e6 ?1 A+ O, W7 I$ L0 K% h5 T+ `2 H
  • 例子:
  • function [mag, angle] = polar_value(x, y)
  • msg = nargchk(1,2,nargin);
  • //nargin 这个函数返回调用这个函数时所需要的实际输入参数的个数
  • //实际输入参数的个数必须≥1而且≤2,如果一个函数在被调用时含有过
  • //多或过少的参数,函数nargchk 将会产生一个包含标准错误的字符串
  • //如果参数的个数在允许的范围之内,那么这个函数将返回一个空字符
  • error(msg);
  • //如果msg 是一个包含错误信息的字符串,error函数执行,它将会中止当
  • //前函数并返回到键盘输入状态,在命令窗中显示出错误信息
  • //如果这个信息字符中为空,error 函数将什么也不做,当前函数继续执行
  • if nargin < 2
  • y = 0;
  • end
  • if x == 0 & y == 0
  • msg = 'Both x and y are zero: angle is meaningless!';
  • warning(msg);
  • //显示警告信息并继续执行函数,如果参数错误不是致命的,执行还能继续,则这个将会被调用。
  • end
  • mag = sqrt(x .^2 + y .^2);//极坐标的矢径
  • if nargout == 2
  • angle = atan2(y,x) * 180/pi;//极角
  • end
    * S: C$ T8 y& V% E/ e

( A& G" q) l- J' o* T1 U, `% c! }! A" M; X' y* Y" ^+ O
2. maltab 程序与它们函数之间的交互用是按值传递机制。当一个函数调用发生时,matlab将会复制实参生成一个副本,然后把它们传递给函数。它意味着虽然函数修改了输入参数,但它并没有影响到调用者的原值。
, C& O! F& B3 o) r
8 u+ ~5 X3 L4 X  ?Matlab的匿名函数、子函数和嵌套函数。
6 f( K) g; y, b; ?6 ~: J; n匿名函数定义
# A: w6 M/ o* s' n4 ?4 Sfhandle = @(arglist) expr
5 Y  s/ ^7 Y: Q' e, j其中,expr是具体的函数表达式,arglist是指定的函数的自变量。! L& x. c* B/ m& ?5 n" R

. |8 R3 J2 U( j# G/ w子函数是在同一函数文件中,主函数之后的由“function”引导的函数,一个函数文件可以有多个子函数。这些子函数在函数文件中的排列顺序可以随意,前提是都要位于主函数后  T5 y2 [/ W9 @! K

) j9 E5 m! y2 l嵌套函数,即nested function,顾名思义,是嵌套在函数体内部的函数。嵌套函数以function 声明,结束的时候加上end
( `2 F; w) j. I3 Z$ }, [8 u: n
4 j9 B* A6 |  B! x4 C5 O3 v0 [) u% J  W) L
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-31 23:47 , Processed in 0.156250 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表