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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
% _, d. {/ W; a/ @- ]# I
问题
3 r" P+ C5 M2 ~自定义一个函数,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数。
+ ?& n7 D: v  N  Y3 k! {自定义一个函数,计算一行向量中各元素的均值和标准差。
+ J* Q$ V+ Q, g( I$ l# `9 e求下列方程的根:2 P/ F6 Q, @$ `2 k6 ~

: v& z- Q. R" A" F4 |! e+ p  `% H+ T6 }  ^: A * O8 X/ ]1 u. Q* X$ P2 s9 Q$ f% W- R

3 s4 h' H9 L. c* [; q2 o分析与解答:
! p: M; D2 o7 @7 k, r' b6 r0 ?3 w- l2 Y1.实验过程:创建m文件,保存到桌面,重命名位fushu,此时我就创建了一个函数,然后再新建一个m文件作为我们命令文件,实现输入复数并调用函数的功能,然后运行之后,在matlab命令行窗口即可执行
% O  d& `1 J% k7 a) R/ ^: r+ T; w; w6 N1 \( z
实验结果:) H( b% z/ m; @1 O% W4 B2 t: s! C# v
% D8 [. _: Z/ C+ F" k; u9 U% l
' k& a( V: v- n2 y# `
4 ?0 l8 w8 }$ z0 R4 }9 d
2.实验过程:
8 R8 `; C7 Z; X2 J* _& z  k  E函数文件:
2 C. S7 d; K3 K2 l! E4 f8 s' d1 L8 Q) B4 `) 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);
    ) s, [: i  O9 n* }7 I2 {
5 b2 P6 e/ W2 s
$ ~9 B& W$ p+ j
命令文件:1 _; y* Q$ E- r3 u9 r
0 [: F$ C- q3 a* g9 m
  • x=input('x=?');
  • way(x);
    - }$ c7 F0 R1 t2 e6 g
( t( B5 O# _# O: D4 I+ G) J

" g( O0 ^& U0 y命令文件保存后运行,然后在命令行窗口输入一个向量
. S  m: \+ ~# z" Z2 {9 P
! a2 g! k8 g: `7 b; Z0 \8 W实验结果:9 D4 |: c7 ~9 Q0 r7 O# `( D
2 Q: _) a7 Z" G& o7 F2 t
  • x=?0:5
  • avg=2.500000
  • std=1.707825' F. {* @# {2 I8 b5 l# [

# r6 P' ^- n4 ^# z4 y1 i
8 t* P1 }( Y& J2 E5 L/ G7 d3.直接在命令行窗口执行即可

: i9 r& w$ c. D) E! D8 [8 V: ?& {) _3 A
2 I+ C# [6 ?+ ~1 p) m# P
过程及结果; v2 ]3 `: a3 A

$ ~0 I3 t# M5 M
  • >> f=@(x)exp(x)+x^2+x^(sqrt(x))-100;
  • >> x0=fzero(f,3)
  • x0 =
  •     4.1635
  • >> f(x0)
  • ans =
  •    2.8422e-14

  • . g- r0 v- k0 l, L1 Y) V
$ x! C5 ?3 u% v( P5 O' a
  v* N* i( f6 Z
其中fzero(f,a)的意思是在a旁边找一个最接近a的点x使f(x)最接近于零
$ d# W3 x0 `: x4 q/ F
8 E; V% N% b2 D3 a总结与心得
1 e& G* h: _1 K- @5 @5 |2 E- b8 l, H, {
Matlab自定义函数的方法:
) k* p  D8 W* K$ g: L) ~5 [
1.函数文件+调用命令文件:需单独定义一个自定义函数的M文件;
6 \0 j: x% H& M- G2.直接通过@符号定义.如:f=@(x,y)(x.^2-sin(y)),调用:f(2,3)
  V. H/ R0 a& {& n6 @函数句柄变量f相当于函数的别名,利用它可以间接调用函数
8 U4 y& F5 b: v; {- w" H8 i" q0 I/ {) v  l3 G$ z
Matlab的函数中变量的传递+ T6 h$ j* X6 R- H
1. 函数所传递参数的数目具有可调性+ G: S. J5 j6 d" H
/ M; o  ~( _$ \+ W
  • 例子:
  • 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 X; G+ ]+ ~+ Y& Z* X1 {0 Y9 e" d

+ G. H  a8 P: }" k& Y: {, t% s# c& Z
2. maltab 程序与它们函数之间的交互用是按值传递机制。当一个函数调用发生时,matlab将会复制实参生成一个副本,然后把它们传递给函数。它意味着虽然函数修改了输入参数,但它并没有影响到调用者的原值。
! a+ s4 c1 f5 w0 U' F4 }3 I5 m8 E# w. {
Matlab的匿名函数、子函数和嵌套函数。6 t5 v( _$ I( u1 D9 f
匿名函数定义3 `( `* Q) _! u0 I" X( R
fhandle = @(arglist) expr
3 \% K  N' F7 e, w8 j其中,expr是具体的函数表达式,arglist是指定的函数的自变量。
) ?: S0 [- @" Y' }1 J* r3 T5 j- j
) J) v! K, t* h* t6 A子函数是在同一函数文件中,主函数之后的由“function”引导的函数,一个函数文件可以有多个子函数。这些子函数在函数文件中的排列顺序可以随意,前提是都要位于主函数后* m4 z5 ~3 n. e* C

( s, `: C/ N- o" N3 m6 G( x5 P8 C嵌套函数,即nested function,顾名思义,是嵌套在函数体内部的函数。嵌套函数以function 声明,结束的时候加上end
2 N  P$ p! @8 s3 A
+ T! C4 j# P/ ]7 _: n0 L6 Q9 s, B" O6 `) e  z5 ^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-19 08:03 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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