|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
- J2 R/ a& w, X8 Y问题
, Y5 {# s% }& { r6 E; k自定义一个函数,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数。
! s$ C. G) @5 b- p自定义一个函数,计算一行向量中各元素的均值和标准差。
* a- v$ u' \1 a( R求下列方程的根:
. t1 O$ Q: S6 x0 Y' n. s$ C2 |8 D* w" c; `" B
- m; g) y- @" A! D" D, c
2 m# S% [* Z2 R5 D分析与解答:
/ l5 z; E. r; w, g/ L$ S1.实验过程:创建m文件,保存到桌面,重命名位fushu,此时我就创建了一个函数,然后再新建一个m文件作为我们命令文件,实现输入复数并调用函数的功能,然后运行之后,在matlab命令行窗口即可执行
- U: O2 m) M: L( T9 X
5 ]. f- ^; S% z
实验结果:
* W0 ^$ {9 @" y3 O1 F$ \
2 V0 U4 U3 J8 U* E# P
+ x/ w" o" J1 x
* w' t/ ?5 M* z2 d# d5 v' x9 U
2.实验过程:% p/ Y5 F4 M0 i; N7 N
函数文件:
, |; u4 P1 j# g
1 t5 m7 s# p; ?6 r- 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);
8 R& w- f! N+ F( c
4 a/ @- Q, e9 Z( t
3 S* F* z2 x1 p- C命令文件:
, |4 V3 k/ W0 m7 s: Y+ |
: z3 L# ?/ v4 n0 E0 J# ^- x=input('x=?');
- way(x);
/ ]- ~2 c8 E4 p) |7 |( I ! x# a/ c, R& |7 `% [
0 M& B; w2 i" R" M% a命令文件保存后运行,然后在命令行窗口输入一个向量5 E$ c y2 {& D" U" S- x% }- @
9 M/ r/ \! ~5 k8 T. s5 M2 v
实验结果:% h# h+ i7 ^& |. j
9 j* D2 K0 v$ w9 h( p- x=?0:5
- avg=2.500000
- std=1.7078253 D4 X; m& K9 X) v7 I
0 e% S" @. i9 o
2 P( N6 e+ J V1 ^) u4 k3.直接在命令行窗口执行即可
; ~3 h5 Q9 g q; N; k, o
5 G7 B4 F% u, f9 ~" n- @
. h8 }! G4 V. m. x% ?8 [& q过程及结果$ y2 J9 L8 q( x" J
8 Z. H. \6 u/ o: l6 _) h- >> f=@(x)exp(x)+x^2+x^(sqrt(x))-100;
- >> x0=fzero(f,3)
- x0 =
- 4.1635
- >> f(x0)
- ans =
- 2.8422e-14
$ j/ Q1 o* b4 d
5 k( p. `9 m6 R3 l! H8 Q6 A; w5 Q2 z4 d6 b+ T5 s& X0 g+ ]
其中fzero(f,a)的意思是在a旁边找一个最接近a的点x使f(x)最接近于零
6 [- h( \7 T, R+ S" \% j- I
. [0 W9 Q4 Q1 L9 I# n% a总结与心得
+ R1 h4 m' q d m c; F( j" B' w& ?& X5 W: D) ?. i# S
Matlab自定义函数的方法:3 E1 C3 i4 q3 z s2 e
1.函数文件+调用命令文件:需单独定义一个自定义函数的M文件;1 G( }9 D4 H. U% I# j" l
2.直接通过@符号定义.如:f=@(x,y)(x.^2-sin(y)),调用:f(2,3)/ i8 y0 f0 A( {7 {
函数句柄变量f相当于函数的别名,利用它可以间接调用函数
- M0 l9 {2 x _) S$ P
1 w% y" [" A* M2 g+ N0 YMatlab的函数中变量的传递
0 \0 ]$ y/ S$ g& V1 M3 p8 f6 q1. 函数所传递参数的数目具有可调性$ U7 u# y# A2 K7 r
3 I) s6 S1 {" Q( e9 U j: Q7 l- 例子:
- 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;//极角
- end9 r& S( o, o5 I( v8 A
; a+ ]' U0 l' A7 b U: N' }3 K5 {( c
8 H$ W4 ^1 ^/ j, H5 s X0 y1 d2. maltab 程序与它们函数之间的交互用是按值传递机制。当一个函数调用发生时,matlab将会复制实参生成一个副本,然后把它们传递给函数。它意味着虽然函数修改了输入参数,但它并没有影响到调用者的原值。6 m. G Y& k/ Q, h9 }) H
. h0 e G9 L3 j- b9 {2 I2 o
Matlab的匿名函数、子函数和嵌套函数。/ C6 B' e$ y. F$ H4 L0 ]( `
匿名函数定义
5 M( \$ s% E$ tfhandle = @(arglist) expr
/ n9 Y- a+ U j其中,expr是具体的函数表达式,arglist是指定的函数的自变量。: X" C& B8 i7 |( H
: H% l& @/ {+ ~" k
子函数是在同一函数文件中,主函数之后的由“function”引导的函数,一个函数文件可以有多个子函数。这些子函数在函数文件中的排列顺序可以随意,前提是都要位于主函数后7 J5 J/ b4 C- J |8 e+ m; e. `
- d1 r; J% m, L6 ?$ d嵌套函数,即nested function,顾名思义,是嵌套在函数体内部的函数。嵌套函数以function 声明,结束的时候加上end) v, j# h. Y% X8 U+ O, S
4 [9 K5 N7 Z; M9 z/ F9 {
) ~1 y- Z, t U5 F3 P- P) I
|
|