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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

- J2 R/ a& w, X8 Y问题
, Y5 {# s% }& {  r6 E; k自定义一个函数,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数。
! s$ C. G) @5 b- p自定义一个函数,计算一行向量中各元素的均值和标准差。
* a- v$ u' \1 a( R求下列方程的根:
. t1 O$ Q: S6 x0 Y' n. s$ C2 |8 D* w" c; `" B
- m; g) y- @" A! D" D, c

2 m# S% [* Z2 R5 D分析与解答:
/ l5 z; E. r; w, g/ L$ S1.实验过程:创建m文件,保存到桌面,重命名位fushu,此时我就创建了一个函数,然后再新建一个m文件作为我们命令文件,实现输入复数并调用函数的功能,然后运行之后,在matlab命令行窗口即可执行 - U: O2 m) M: L( T9 X
5 ]. f- ^; S% z
实验结果:
* W0 ^$ {9 @" y3 O1 F$ \ 2 V0 U4 U3 J8 U* E# P
+ x/ w" o" J1 x
* w' t/ ?5 M* z2 d# d5 v' x9 U
2.实验过程:% p/ Y5 F4 M0 i; N7 N
函数文件:
, |; u4 P1 j# g
1 t5 m7 s# p; ?6 r
  • 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);
    8 R& w- f! N+ F( c

4 a/ @- Q, e9 Z( t
3 S* F* z2 x1 p- C命令文件:
, |4 V3 k/ W0 m7 s: Y+ |
: z3 L# ?/ v4 n0 E0 J# ^
  • x=input('x=?');
  • way(x);
    / ]- ~2 c8 E4 p) |7 |( I
! x# a/ c, R& |7 `% [

0 M& B; w2 i" R" M% a命令文件保存后运行,然后在命令行窗口输入一个向量5 E$ c  y2 {& D" U" S- x% }- @
9 M/ r/ \! ~5 k8 T. s5 M2 v
实验结果:% h# h+ i7 ^& |. j

9 j* D2 K0 v$ w9 h( p
  • x=?0:5
  • avg=2.500000
  • std=1.7078253 D4 X; m& K9 X) v7 I
0 e% S" @. i9 o

2 P( N6 e+ J  V1 ^) u4 k3.直接在命令行窗口执行即可

; ~3 h5 Q9 g  q; N; k, o
5 G7 B4 F% u, f9 ~" n- @
. h8 }! G4 V. m. x% ?8 [& q过程及结果$ y2 J9 L8 q( x" J

8 Z. H. \6 u/ o: l6 _) h
  • >> f=@(x)exp(x)+x^2+x^(sqrt(x))-100;
  • >> x0=fzero(f,3)
  • x0 =
  •     4.1635
  • >> f(x0)
  • ans =
  •    2.8422e-14

  • $ j/ Q1 o* b4 d

5 k( p. `9 m6 R3 l! H8 Q6 A; w5 Q2 z4 d6 b+ T5 s& X0 g+ ]
其中fzero(f,a)的意思是在a旁边找一个最接近a的点x使f(x)最接近于零
6 [- h( \7 T, R+ S" \% j- I
. [0 W9 Q4 Q1 L9 I# n% a总结与心得
+ R1 h4 m' q  d  m  c; F( j" B' w& ?& X5 W: D) ?. i# S
Matlab自定义函数的方法:
3 E1 C3 i4 q3 z  s2 e
1.函数文件+调用命令文件:需单独定义一个自定义函数的M文件;1 G( }9 D4 H. U% I# j" l
2.直接通过@符号定义.如:f=@(x,y)(x.^2-sin(y)),调用:f(2,3)/ i8 y0 f0 A( {7 {
函数句柄变量f相当于函数的别名,利用它可以间接调用函数
- M0 l9 {2 x  _) S$ P
1 w% y" [" A* M2 g+ N0 YMatlab的函数中变量的传递
0 \0 ]$ y/ S$ g& V1 M3 p8 f6 q1. 函数所传递参数的数目具有可调性$ U7 u# y# A2 K7 r

3 I) s6 S1 {" Q( e9 U  j: Q7 l
  • 例子:
  • 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;//极角
  • end9 r& S( o, o5 I( v8 A

; a+ ]' U0 l' A7 b  U: N' }3 K5 {( c
8 H$ W4 ^1 ^/ j, H5 s  X0 y1 d2. maltab 程序与它们函数之间的交互用是按值传递机制。当一个函数调用发生时,matlab将会复制实参生成一个副本,然后把它们传递给函数。它意味着虽然函数修改了输入参数,但它并没有影响到调用者的原值。6 m. G  Y& k/ Q, h9 }) H
. h0 e  G9 L3 j- b9 {2 I2 o
Matlab的匿名函数、子函数和嵌套函数。/ C6 B' e$ y. F$ H4 L0 ]( `
匿名函数定义
5 M( \$ s% E$ tfhandle = @(arglist) expr
/ n9 Y- a+ U  j其中,expr是具体的函数表达式,arglist是指定的函数的自变量。: X" C& B8 i7 |( H
: H% l& @/ {+ ~" k
子函数是在同一函数文件中,主函数之后的由“function”引导的函数,一个函数文件可以有多个子函数。这些子函数在函数文件中的排列顺序可以随意,前提是都要位于主函数后7 J5 J/ b4 C- J  |8 e+ m; e. `

- d1 r; J% m, L6 ?$ d嵌套函数,即nested function,顾名思义,是嵌套在函数体内部的函数。嵌套函数以function 声明,结束的时候加上end) v, j# h. Y% X8 U+ O, S
4 [9 K5 N7 Z; M9 z/ F9 {
) ~1 y- Z, t  U5 F3 P- P) I
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 20:49 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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