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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
1 A. i- x7 S+ d
问题$ d( u6 R( e4 A  U, U
自定义一个函数,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数。
9 n9 h5 m1 p2 }5 @自定义一个函数,计算一行向量中各元素的均值和标准差。: I) F- u, F9 {. |. c: y
求下列方程的根:
0 [. H/ S7 h. G0 T" w2 e8 y# |8 C3 Y

% W  X$ O1 i) N' r& r' e
- f" B. }+ _. e分析与解答:& V$ {' _3 \+ L1 V" M
1.实验过程:创建m文件,保存到桌面,重命名位fushu,此时我就创建了一个函数,然后再新建一个m文件作为我们命令文件,实现输入复数并调用函数的功能,然后运行之后,在matlab命令行窗口即可执行
* ]4 D3 k" s5 R. _2 g& d, ]. T! h; o/ N1 ^" W, t7 Y
实验结果:
, k  J4 Q4 G9 Z
* @# P8 o1 _) _2 [
0 t1 w+ W3 b- x* G$ I9 O$ F
5 e7 E9 h5 L* P2.实验过程:7 q1 n% g* W2 y& [/ s$ c6 J. k% C6 z* S
函数文件:. E2 H( B: q! t% F8 j/ y
- ^# n% v1 N( }) k
  • 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);' b" `/ Y8 D# |3 z/ E
; v6 U2 `6 M5 {1 y7 v+ g' K

8 e0 J5 _1 @" Y" o/ w命令文件:3 j/ x9 y) _  B$ p
0 R3 Z7 d# ~( E5 C  E
  • x=input('x=?');
  • way(x);4 L: B: a6 K- ]; m  s
: m) J+ _1 J+ h) g0 k' o

$ X8 F: s" g% W- R  e3 s4 \命令文件保存后运行,然后在命令行窗口输入一个向量
2 r. T# M6 ^! b" Q+ h( |/ T+ `
: d3 Q% d3 p* `2 |1 v! R+ f实验结果:
# f- w# g/ x6 u# L2 h) f$ w/ A, a; F6 ?4 \8 \0 ^1 E! C
  • x=?0:5
  • avg=2.500000
  • std=1.7078253 M, H( Z/ U1 g' k

; ^* G/ E8 [4 ?2 A, t6 O* w! v6 r( _+ \: `) g6 R5 ?
3.直接在命令行窗口执行即可
$ o4 V" D, A2 |+ |4 A
; P' V3 G% L, |6 b

4 d( h  @5 v! ^$ z7 S过程及结果6 _& R( ]' R  {- T/ t. X- G

3 A0 i4 R9 [5 b5 [5 |3 X
  • >> f=@(x)exp(x)+x^2+x^(sqrt(x))-100;
  • >> x0=fzero(f,3)
  • x0 =
  •     4.1635
  • >> f(x0)
  • ans =
  •    2.8422e-14

  • # ]1 L4 A! i* c8 ?
4 i4 H2 A+ G0 J6 m" Z0 d8 k
6 p1 r! M4 C0 w+ h+ E# C
其中fzero(f,a)的意思是在a旁边找一个最接近a的点x使f(x)最接近于零( ^, {& p" d2 ?" |% C0 h

8 @; ?! l0 U" y9 b( h5 f总结与心得
. |. y1 X3 e$ @, ?+ d- |& y# m) l* ?/ U. X
Matlab自定义函数的方法:

5 Z' P: a7 `) h# s+ h+ r) @1.函数文件+调用命令文件:需单独定义一个自定义函数的M文件;- f1 L7 B0 q$ Q/ E% h
2.直接通过@符号定义.如:f=@(x,y)(x.^2-sin(y)),调用:f(2,3)
5 \- ]* ]% C6 e函数句柄变量f相当于函数的别名,利用它可以间接调用函数1 P, @" c4 y1 E2 ^  \+ ^
1 G6 C" Q4 ]( t4 t9 Z
Matlab的函数中变量的传递- A$ H5 N5 }  l+ {8 }) K$ _; |1 A
1. 函数所传递参数的数目具有可调性
3 c9 O! Y8 N3 O0 \5 ^% Z! e" U  _, M0 P! q4 a. I" e
  • 例子:
  • 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;//极角
  • end2 x, q. B6 L: H  C
/ u  f  \/ P4 G6 E/ c

! r9 D4 b: c! v' r6 z' q2. maltab 程序与它们函数之间的交互用是按值传递机制。当一个函数调用发生时,matlab将会复制实参生成一个副本,然后把它们传递给函数。它意味着虽然函数修改了输入参数,但它并没有影响到调用者的原值。
: e3 a  O% ^" v6 ^0 v' C
9 P" U4 Z+ e+ ?$ y* f& W: l. MMatlab的匿名函数、子函数和嵌套函数。- i. }4 {3 S0 I/ A
匿名函数定义
8 `1 w  S7 M8 f! C4 m* Vfhandle = @(arglist) expr& W8 Q. V2 o/ M4 O. X
其中,expr是具体的函数表达式,arglist是指定的函数的自变量。" V* m" m3 p* q' X, [
2 O4 e, M# A7 H2 X7 w% ]: S8 f: L5 P
子函数是在同一函数文件中,主函数之后的由“function”引导的函数,一个函数文件可以有多个子函数。这些子函数在函数文件中的排列顺序可以随意,前提是都要位于主函数后
, o+ s! O4 U- V" p( e1 ~
; u) z& t7 I2 q( \0 j7 l嵌套函数,即nested function,顾名思义,是嵌套在函数体内部的函数。嵌套函数以function 声明,结束的时候加上end$ `  q2 i4 T# p+ d! w7 |! W

% Z% n+ Z1 v, E: A3 Z; M
0 r5 Z) n2 \: N+ A. C4 T* M& o- w
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-5 13:41 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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