|
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 ^
|
|