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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

! y- W2 y. J! M2 i& A# x( E问题
5 m, z  F6 z- u' J. @2 f9 H自定义一个函数,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数。/ l1 c8 t) F4 ?  j" D
自定义一个函数,计算一行向量中各元素的均值和标准差。% {! D$ t' Z# }% U7 \
求下列方程的根:+ e8 B) v. F3 x. }: I
7 Y, u6 h0 A8 D
1 @% E* [2 _! L- ]% ^- }$ F; N7 r- X
7 A# e: B' K3 M$ U
分析与解答:
6 J3 O; ~% ~4 @1 ?+ u1.实验过程:创建m文件,保存到桌面,重命名位fushu,此时我就创建了一个函数,然后再新建一个m文件作为我们命令文件,实现输入复数并调用函数的功能,然后运行之后,在matlab命令行窗口即可执行 * @. T4 G8 u$ h, V- _

2 o; V: R" g! z, i- P2 e' o9 V实验结果:$ V3 f) J' M" S  c! D5 s
; ]8 N# P( l2 ~( e, B8 g4 c
+ i: F; d( n  ]: B

# Y( ^2 [' c' h' F6 f/ S2.实验过程:7 X$ {) W. Q5 p
函数文件:! J! \5 @3 a4 N/ y$ `- K/ M9 h
9 N) U! W# G" ?  F' ^/ W* ]
  • 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);2 Q1 Q8 I3 w9 `" w  T! y7 \
/ A# |7 m; m0 z5 V9 A

8 u0 A  t  e* _, S" i" g命令文件:9 z7 {9 j- X) s- h
9 [8 Y( A$ _+ ^% O3 X+ W
  • x=input('x=?');
  • way(x);
    " o  X/ Z) [1 Y
) }2 p& x( {2 F* V
; k0 Z6 _; F  \, @! X8 ~, h
命令文件保存后运行,然后在命令行窗口输入一个向量7 j& B  q& x- z, ~% z! b5 T4 K; \

; ?) q% C, E& j. ^- E实验结果:
3 d: c- _" O/ I; [# E2 W, a) S  A3 m
2 F& W1 O$ M0 G, v7 a0 U# ^
  • x=?0:5
  • avg=2.500000
  • std=1.707825
    1 F0 p. V! b; C

4 B9 m4 c6 G" J- b( A
6 M! C/ c' w: Z  N3.直接在命令行窗口执行即可
4 M  o; c$ h) ~5 U# |  B9 v

! D, f% }! A3 N5 W  @8 T; i8 a6 X  F/ k' t% y' L
过程及结果
1 _4 v. {; Y; Z9 b7 H7 T$ _/ p2 H4 L' A
  • >> f=@(x)exp(x)+x^2+x^(sqrt(x))-100;
  • >> x0=fzero(f,3)
  • x0 =
  •     4.1635
  • >> f(x0)
  • ans =
  •    2.8422e-14

  • / L# \9 ^' z: n% g9 z0 S1 Y
& B1 w, v5 x+ J8 k$ r2 P" N; b* D
* ?! M3 ~! i9 w
其中fzero(f,a)的意思是在a旁边找一个最接近a的点x使f(x)最接近于零2 T' L( e9 ^  j

  @7 i( e4 v: |; \8 m总结与心得
+ D) [- R1 x3 g0 R8 m  h- D; c/ T$ N: ^, c1 Y8 R/ X; @, ]# G5 Y
Matlab自定义函数的方法:
( u1 g+ p1 C1 X: I. ~
1.函数文件+调用命令文件:需单独定义一个自定义函数的M文件;& [2 B" }# F( o6 Y' N* S
2.直接通过@符号定义.如:f=@(x,y)(x.^2-sin(y)),调用:f(2,3)
% f% J( K$ Z9 f  q; y函数句柄变量f相当于函数的别名,利用它可以间接调用函数' r1 Q$ [1 I) M
2 Z! s! t' y9 K" E2 P4 |9 _: J. K. W
Matlab的函数中变量的传递
( G6 G/ `$ U8 J" `+ W/ V4 D6 n1. 函数所传递参数的数目具有可调性
% h2 z0 r& J  X6 V2 W2 S, r, R% X. D' _- F9 J% X! ~- u
  • 例子:
  • 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) R) y9 l  r/ I$ M
4 u; y6 t1 Q' n
, l% M1 u0 }, b
2. maltab 程序与它们函数之间的交互用是按值传递机制。当一个函数调用发生时,matlab将会复制实参生成一个副本,然后把它们传递给函数。它意味着虽然函数修改了输入参数,但它并没有影响到调用者的原值。
4 t$ @/ y6 w. P- s5 J+ P# C$ T/ T( S- d
Matlab的匿名函数、子函数和嵌套函数。1 _3 |4 B4 x; A1 T
匿名函数定义# S6 m5 T; K' F3 m- O! q4 ^
fhandle = @(arglist) expr
5 o: Z6 ~6 _: X( c6 |; l  h: F3 O  C其中,expr是具体的函数表达式,arglist是指定的函数的自变量。
* z% d. U$ T" x0 w; u5 l2 v3 B! D, g- ~4 x( U' S( k
子函数是在同一函数文件中,主函数之后的由“function”引导的函数,一个函数文件可以有多个子函数。这些子函数在函数文件中的排列顺序可以随意,前提是都要位于主函数后3 ]1 r9 R9 J' |6 F' A& J+ B. ]& g
; {4 {& }" F* v# l7 G5 b. T
嵌套函数,即nested function,顾名思义,是嵌套在函数体内部的函数。嵌套函数以function 声明,结束的时候加上end
- B2 K& T& `4 y7 Q* i% S' T) }& r7 G
4 K0 N2 e) d) j7 o1 }; o" ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-30 10:03 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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