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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

1 k" }7 T6 d& u7 P, k4 A问题8 U/ E1 y, |2 p0 E- ]2 A$ c5 F
自定义一个函数,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数。
& J( z9 [* I6 G  E# y自定义一个函数,计算一行向量中各元素的均值和标准差。
/ M3 I, Y  m: Q& P6 a8 M求下列方程的根:$ L( V" O' Q9 R, X  h9 b/ A8 ?

% y& A# W0 Q/ ]$ \7 s1 ^7 n
/ o. @6 @1 m  t- E+ z
! |, a" `) N% q: t2 a  T分析与解答:) Z# b7 D- D9 w1 @4 ^/ c
1.实验过程:创建m文件,保存到桌面,重命名位fushu,此时我就创建了一个函数,然后再新建一个m文件作为我们命令文件,实现输入复数并调用函数的功能,然后运行之后,在matlab命令行窗口即可执行
5 E+ X3 ]; B! m: B8 V7 l# D: q: {) T7 w" D) ^' W% z
实验结果:
3 E& v) y9 f) f# e8 _
4 ^9 ]9 e5 }2 P( w$ a  u7 F  f( W! P6 W) c0 b- ~) d, d

7 T0 k& j0 |4 v. x5 N& t& X2.实验过程:
: H+ o5 ]0 N# d3 {9 w0 j$ l  i$ |函数文件:
4 R5 K) o* ?! T8 @, R" Z! O
+ ]; Z0 P& a( Z# H0 d3 F  g
  • 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);
    + j3 R, K& {7 s2 o% Z2 s* H" b7 h
4 t# b8 i7 w: @( ^& _' ~# O
" i* ~+ {' O2 O
命令文件:
: F4 n0 n1 K1 N, Q; K5 [% e
* A) u$ H9 n/ N, L0 o
  • x=input('x=?');
  • way(x);9 W: [( ?, j/ q4 L2 w

1 D( D  j7 r. ?( ~* L
" g8 k; x$ ]1 H( q7 Z) F& x命令文件保存后运行,然后在命令行窗口输入一个向量& S& v2 H. J1 C' Q/ F( a
1 K8 [- T2 r' w) f  \. o( W* Q
实验结果:
0 o/ A8 H) j/ b9 Q6 a& z6 R4 f4 o# s! \0 S, M, c+ G
  • x=?0:5
  • avg=2.500000
  • std=1.7078253 G3 S2 r8 R/ V) y) t" p7 Z% U
4 g' E3 }2 k( s/ A# R
" Y$ y, a% m5 j7 x: O$ a, p
3.直接在命令行窗口执行即可
8 i. O$ j% \6 H

5 f9 ^$ K' L7 o5 g% ?* w4 o( b
4 j" H7 `; Y. ~! ~% h过程及结果
+ \' f7 F( ^4 ?! [1 \( M
7 }; T% i7 o5 ]& [* B/ [# O: g
  • >> f=@(x)exp(x)+x^2+x^(sqrt(x))-100;
  • >> x0=fzero(f,3)
  • x0 =
  •     4.1635
  • >> f(x0)
  • ans =
  •    2.8422e-14
  • * @0 X3 X3 h& [

4 a% f) M8 k, D+ m2 I) y' x( ~8 T2 D1 T+ M/ l  |+ @6 P3 V, T2 V
其中fzero(f,a)的意思是在a旁边找一个最接近a的点x使f(x)最接近于零
( x" H* ~  `2 k& ^6 M7 o7 `) h2 X- t: y' q
总结与心得
# x* e& O/ p8 z  W7 K, r
; k% s/ N- I) ~" B1 VMatlab自定义函数的方法:

5 ^, t: ^/ o/ g6 \1.函数文件+调用命令文件:需单独定义一个自定义函数的M文件;0 h, M! y5 o; o+ @7 t: X
2.直接通过@符号定义.如:f=@(x,y)(x.^2-sin(y)),调用:f(2,3). o4 Q3 T- x4 ^  _% o' A& u2 i
函数句柄变量f相当于函数的别名,利用它可以间接调用函数
" L) R2 S" l# g9 Y: F# X7 S; \7 V0 f5 \8 N1 D6 f) E. ?
Matlab的函数中变量的传递, N3 T' c3 Q) Q
1. 函数所传递参数的数目具有可调性
" ~3 x( q. i- d6 M0 Y
# L. k; d7 u% {/ f% ~& M) b
  • 例子:
  • 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
    - S9 g' i. J. |! M2 ~
0 Y( |7 F2 h1 H; t: `  M
% Y7 B, W4 W6 E
2. maltab 程序与它们函数之间的交互用是按值传递机制。当一个函数调用发生时,matlab将会复制实参生成一个副本,然后把它们传递给函数。它意味着虽然函数修改了输入参数,但它并没有影响到调用者的原值。, L2 J1 q! `/ H. h2 K+ P

+ H. A0 p% {% U9 o& a9 G( z* Z5 b$ UMatlab的匿名函数、子函数和嵌套函数。
# _* J- V5 ?- g. t* y' ^9 |匿名函数定义. R  z: C/ _5 S4 q* p* A
fhandle = @(arglist) expr, N) {, ~( j5 H* O
其中,expr是具体的函数表达式,arglist是指定的函数的自变量。
8 |/ J5 p% {% R7 M
3 R" ?% V8 [! [5 H" |子函数是在同一函数文件中,主函数之后的由“function”引导的函数,一个函数文件可以有多个子函数。这些子函数在函数文件中的排列顺序可以随意,前提是都要位于主函数后
7 c, D! n7 S# w/ [: o
( _  X1 R3 J$ v3 a( j9 m嵌套函数,即nested function,顾名思义,是嵌套在函数体内部的函数。嵌套函数以function 声明,结束的时候加上end& Y5 E* }& _( P5 L4 Q2 P
. [4 P, M* v/ ?
& e" l9 q2 V7 v( ~) y* {
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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