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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

2 \+ Y2 [0 P; P+ v7 f/ d问题
. h# m- S0 w# P; l自定义一个函数,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数。# G' B. L/ ^# e" u- H8 ~6 w7 d! ^
自定义一个函数,计算一行向量中各元素的均值和标准差。
, O8 X: |6 g5 R, U8 {求下列方程的根:
. ^& u7 n" @# z  @0 Y, n3 ~% g6 S+ v- Y
+ s: s: d3 K1 A0 y! x+ b

0 _: _0 N- i* l分析与解答:( {( [# c# f8 x2 A; N/ v8 x
1.实验过程:创建m文件,保存到桌面,重命名位fushu,此时我就创建了一个函数,然后再新建一个m文件作为我们命令文件,实现输入复数并调用函数的功能,然后运行之后,在matlab命令行窗口即可执行 ! S2 a2 C$ F0 P

6 Z# V2 O  \6 {. F2 b实验结果:
  {1 o4 N' c$ U. p . ?! ?; Y5 B2 B9 ~& @1 C

3 v4 v# c8 b7 m( Y# n
* f' e* e: u$ `; Z, v6 _2.实验过程:
' [0 W/ ]6 ~8 @" [  d; S" B函数文件:
* P6 ^# O; }* W& _
) N# [/ Z2 i2 r; _8 ~
  • 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);
    & i9 ?& c8 F6 f8 X0 v: \* U
3 \' \2 C+ B$ w; x# N

& ^  T8 V. K. R; d8 @$ p9 R命令文件:4 c$ ]8 e  L8 r. N0 C
: e" {$ Y* z" i1 }8 M/ p
  • x=input('x=?');
  • way(x);: o. B" u" V4 b" [( J

# _7 n1 X" f5 J" f. `  s7 ], F& Q7 }, I$ T9 ]: ?$ K
命令文件保存后运行,然后在命令行窗口输入一个向量
4 f9 f( E4 a# N
6 k- F. M" S3 W实验结果:
* S. z: i( \$ T. z
# Q9 r7 k# |6 l6 Y- C/ k
  • x=?0:5
  • avg=2.500000
  • std=1.7078250 y& S/ O$ y0 M6 q( Y& g8 R! q; S
, T% ~  p- I5 W6 p3 K" A! N8 _

( n* _; ]. x$ Z" [$ v; S1 K3.直接在命令行窗口执行即可

  i/ @6 w4 b! X# ?7 `, ?# f+ x0 s. t6 v5 y5 k/ I

/ e! b6 O8 m" a0 [过程及结果
: X4 ^7 i! N( k3 V" ]0 D( O4 L; a0 B; R. q
  • >> f=@(x)exp(x)+x^2+x^(sqrt(x))-100;
  • >> x0=fzero(f,3)
  • x0 =
  •     4.1635
  • >> f(x0)
  • ans =
  •    2.8422e-14
  • 0 w# j: H8 e) k: y
# f0 Q# {9 b* D
* ?8 O  m% q8 l% g
其中fzero(f,a)的意思是在a旁边找一个最接近a的点x使f(x)最接近于零
0 G+ v& A' n2 x3 D
7 T' v7 U1 P  j' |' ~1 e+ |$ c总结与心得
0 V1 C4 B# S5 M
: e, t* x+ F0 q6 uMatlab自定义函数的方法:

$ U3 J9 ^& N: o& P/ ~, a! ?1.函数文件+调用命令文件:需单独定义一个自定义函数的M文件;; `; a/ `( L" a4 V$ G) m6 o0 g
2.直接通过@符号定义.如:f=@(x,y)(x.^2-sin(y)),调用:f(2,3)
! P) ?) S% `3 V2 a  N4 F0 a* f函数句柄变量f相当于函数的别名,利用它可以间接调用函数' K3 z1 i4 w0 z
2 i( e9 I, R2 j$ n1 D
Matlab的函数中变量的传递# i8 s* G, T! B4 U& K$ o& @
1. 函数所传递参数的数目具有可调性) Z' H/ L1 |$ f- U- k* C
1 c, w% q9 ~* ~. B; Z
  • 例子:
  • 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
    & @% M5 u, T, _* D( Z# c
' A$ p  b/ P- S5 N. j

( ~7 A8 ]/ E7 `# ~8 e3 W2. maltab 程序与它们函数之间的交互用是按值传递机制。当一个函数调用发生时,matlab将会复制实参生成一个副本,然后把它们传递给函数。它意味着虽然函数修改了输入参数,但它并没有影响到调用者的原值。7 N; b$ D# p& D6 a. m+ g7 o7 h' b
7 B6 K& r: p( c$ g* ]2 z$ J3 ^8 {
Matlab的匿名函数、子函数和嵌套函数。
9 W3 d: X/ R( D  z匿名函数定义
) _" n5 o' Q( ]. ~fhandle = @(arglist) expr( G3 l; @2 r; p$ _: \
其中,expr是具体的函数表达式,arglist是指定的函数的自变量。% z7 F% O0 u7 ]# l' J4 j: L

/ o1 x. c3 r: b4 F9 e# z子函数是在同一函数文件中,主函数之后的由“function”引导的函数,一个函数文件可以有多个子函数。这些子函数在函数文件中的排列顺序可以随意,前提是都要位于主函数后9 u& A& v$ d# m+ C2 i

/ H3 e( T4 R; S. T2 N嵌套函数,即nested function,顾名思义,是嵌套在函数体内部的函数。嵌套函数以function 声明,结束的时候加上end
' W/ P- I" z6 C7 C. r
2 T, B+ j6 l+ H+ s# M! N. Z) j& T3 H# j' f" ~& g& ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 22:04 , Processed in 0.156250 second(s), 27 queries , Gzip On.

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

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

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