问题
- 自定义一个函数,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数。
- 自定义一个函数,计算一行向量中各元素的均值和标准差。
- 求下列方程的根:
f(z)=ex+x2+xx=100.f(z) = \ e^{x}+x^{2}+x^{\sqrt {x}}=100\,. f(z)= ex+x2+xx=100.
分析与解答:
1.实验过程:创建m文件,保存到桌面,重命名位fushu,此时我就创建了一个函数,然后再新建一个m文件作为我们命令文件,实现输入复数并调用函数的功能,然后运行之后,在matlab命令行窗口即可执行
实验结果:
2.实验过程:
函数文件:
function output=way(x)
n=length(x);
sum=0;
for i=1:nsum=sum+x(i);i=i+1;
end
avg=sum/n;
b=0;
for i=1:nb=b+(x(i)-avg)^2;std1=sqrt(b/n);
end
fprintf('avg=%f\n',avg);
fprintf('std=%f\n',std1);
命令文件:
x=input('x=?');
way(x);
命令文件保存后运行,然后在命令行窗口输入一个向量
实验结果:
x=?0:5
avg=2.500000
std=1.707825
3.直接在命令行窗口执行即可
过程及结果
>> f=@(x)exp(x)+x^2+x^(sqrt(x))-100;
>> x0=fzero(f,3)x0 =4.1635>> f(x0)ans =2.8422e-14
其中fzero(f,a)的意思是在a旁边找一个最接近a的点x使f(x)最接近于零
总结与心得
Matlab自定义函数的方法:
1.函数文件+调用命令文件:需单独定义一个自定义函数的M文件;
2.直接通过@符号定义.如:f=@(x,y)(x.^2-sin(y)),调用:f(2,3)
函数句柄变量f相当于函数的别名,利用它可以间接调用函数
Matlab的函数中变量的传递
- 函数所传递参数的数目具有可调性
例子:
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
- maltab 程序与它们函数之间的交互用是按值传递机制。当一个函数调用发生时,matlab将会复制实参生成一个副本,然后把它们传递给函数。它意味着虽然函数修改了输入参数,但它并没有影响到调用者的原值。
Matlab的匿名函数、子函数和嵌套函数。
匿名函数定义
fhandle = @(arglist) expr
其中,expr是具体的函数表达式,arglist是指定的函数的自变量。
子函数是在同一函数文件中,主函数之后的由“function”引导的函数,一个函数文件可以有多个子函数。这些子函数在函数文件中的排列顺序可以随意,前提是都要位于主函数后
嵌套函数,即nested function,顾名思义,是嵌套在函数体内部的函数。嵌套函数以function 声明,结束的时候加上end