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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

0 s# D4 u3 J9 `& F- n问题( @% Y; K% V. H1 ^; A
自定义一个函数,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数。
4 F$ |9 s$ z  x4 G; ]; k自定义一个函数,计算一行向量中各元素的均值和标准差。
2 c2 |8 D# @  s" G2 r求下列方程的根:
. d8 P! `' ]3 ?9 ?& c: w2 n* a6 G; }/ C6 u) {/ M
+ O. @# c: ]& D' @' N8 k7 F

6 Y6 l) g" b6 `- m! k3 q# @分析与解答:
6 r, n$ n9 O3 R5 m0 n1 t7 B/ I1.实验过程:创建m文件,保存到桌面,重命名位fushu,此时我就创建了一个函数,然后再新建一个m文件作为我们命令文件,实现输入复数并调用函数的功能,然后运行之后,在matlab命令行窗口即可执行 / N* j' E  i# y) h! m) j8 A
8 G& E* u6 x0 S0 `7 x, `
实验结果:
* E! W! c# v$ ?+ c; U' X
( @5 M* v* K2 \
/ ?( A; |7 L9 A: h; h
0 g4 h" ]/ z, |7 u3 }0 |& K: l2.实验过程:2 q# o6 E3 w! w) d' n  G2 w
函数文件:9 n0 W4 R+ ~: k# t9 P  a

. ~4 U  V: Q1 h' `" W# r; H! |
  • 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);; _+ }* K' ~$ |( u1 G

2 ~8 M' T) A- \! Y0 S
, h7 S6 J6 P2 ?% c命令文件:
3 F6 x2 c8 m2 C1 Z% n; D! S; F+ ^1 g' G4 H  u  ~( V
  • x=input('x=?');
  • way(x);
    & _/ [0 T$ B1 T9 C& J+ c
0 P0 ]& Y2 s9 d
& G7 [, `$ I& w" Q4 [
命令文件保存后运行,然后在命令行窗口输入一个向量
- ~+ s' M0 M" x0 P
, I- u# g6 Q' Z6 f* H实验结果:3 z" Q, i" {( Z% F+ e

9 v) c& [4 w5 I; v% Y/ P
  • x=?0:5
  • avg=2.500000
  • std=1.707825
    ( K$ ?) i1 Q( j# a2 e
9 e8 `9 C; ]: `4 w9 ?

9 j6 K$ Y& d# i# B7 S& `/ q3.直接在命令行窗口执行即可

9 h3 q0 z. s! L) `+ i: C: ]2 Y9 o' v5 X

1 d6 Z8 B7 U% Z0 D3 k+ P$ [过程及结果3 \- q, e8 L* n4 e: o! j! A
$ P: |3 ]% X1 u) M+ H" n8 d2 h
  • >> f=@(x)exp(x)+x^2+x^(sqrt(x))-100;
  • >> x0=fzero(f,3)
  • x0 =
  •     4.1635
  • >> f(x0)
  • ans =
  •    2.8422e-14
  • ) \. p7 G% `' p$ y% A$ _/ L

. _7 q4 A5 _! o1 ]2 G' h3 I, K2 x
其中fzero(f,a)的意思是在a旁边找一个最接近a的点x使f(x)最接近于零
2 i+ Q- |$ R+ c) K) B
3 u$ l! L: \1 B& I. e5 w总结与心得; k( Q5 g- P$ P! x( M
, R$ O* z( u& @4 k) Y9 q) }" z
Matlab自定义函数的方法:

' z3 U* `4 P) s5 Y$ ~1.函数文件+调用命令文件:需单独定义一个自定义函数的M文件;
: V- X- L7 A: B, @9 A( h2.直接通过@符号定义.如:f=@(x,y)(x.^2-sin(y)),调用:f(2,3), `) T1 M) u% P4 ?( V& E; R
函数句柄变量f相当于函数的别名,利用它可以间接调用函数& A" U5 U2 B( `& E2 T8 g; W
* o4 f* T$ e8 y% C  d8 L6 b9 A
Matlab的函数中变量的传递
8 O+ x* m2 e7 V! p/ P2 I7 ~% M: w( b1. 函数所传递参数的数目具有可调性
7 e: B9 E* Q% ]9 z0 D- b8 {: s) s. B- p
8 |- g( N# @+ w3 E/ N5 n
  • 例子:
  • 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;//极角
  • end1 g* u$ Z2 n% v& A0 A& c5 ?& [
( t( b9 F6 e0 T

% Q! C8 [, f# S- M2. maltab 程序与它们函数之间的交互用是按值传递机制。当一个函数调用发生时,matlab将会复制实参生成一个副本,然后把它们传递给函数。它意味着虽然函数修改了输入参数,但它并没有影响到调用者的原值。' A4 P$ t$ a5 z; ^, _" [) v8 T% L
5 j$ Q7 v0 i. q  p! @1 q6 y
Matlab的匿名函数、子函数和嵌套函数。# y- B) l0 d5 g! f
匿名函数定义4 O/ ?; Q3 P7 c6 h: K5 J1 B
fhandle = @(arglist) expr
, C0 v4 h2 `3 `# f其中,expr是具体的函数表达式,arglist是指定的函数的自变量。
5 }4 W: T8 \( Q$ m
0 p+ ?7 F. f6 _3 Z) X子函数是在同一函数文件中,主函数之后的由“function”引导的函数,一个函数文件可以有多个子函数。这些子函数在函数文件中的排列顺序可以随意,前提是都要位于主函数后
" b3 F& j5 |. ], \3 g3 v1 d  _& K, k5 ?4 s
嵌套函数,即nested function,顾名思义,是嵌套在函数体内部的函数。嵌套函数以function 声明,结束的时候加上end8 u4 q% E0 j3 b4 D' h+ r9 G
; y# G3 [) M8 @2 D4 J) t1 a

$ L" Y$ Y5 x: X! [2 A4 S5 }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-20 15:02 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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