函数格式:
function [输出参数] = myfun(输入参数)
函数体;
end
圆的面积函数
**function s = area(r) s = pi * r.^2; end**
函数的调用,在函数的上面调用
**ans = area(2); ans = area([1,2])**
圆的周长
**function c = len(r) c = 2*pi.^r; end**
函数的调用,在函数的上面调用
**c = len(1); c = len([1,2])**
同时计算周长和面积
**function [s, c] = areaAndLen(r, PI) s = pi * r.^2; c = 2*pi.^r; end**
函数的调用,在函数的上面调用
**[s, c] = areaAndLen(1, 3.14)**
匿名函数的定义
**f = @(输入参数) 函数体 f: 函数句柄**
定义一个取平方的函数
**f = @(x)x.^2;f(2);**
有两个参数的函数
**f1 = @(x, y)a.^2 + y.^2 +2*x.*y;f1(2, 3);f1([1, 2, 3], 6);**
匿名函数和普通函数转化
method1:
**f2 = @fun;f2(5)function y = fun(x) y = x.^2;end**
method2:
**f3 = @(x)fun(x);fr3(6)function y = fun(x) y = x.^2;end**
实际上就是后缀.m的文件;当文件里只有函数时,就成为函数脚本文件或函数文件;函数文件可被其他脚本调用(需要在同一文件目录下),也可在命令行调用。
练习题:圆中N只鸭子在同一个半圆的概率
参考思路:蒙特卡罗法(进行M次试验,每次试验生成N个随机点,统计N点在同一个半圆的个数);要求使用函数脚本文件。 理论值:\frac{n} {2^{n-1}}
num = input("input duxks num:");while num ~= -1 p = NPointInHalfCicle(num); disp([num2str(num)+"ducks in the half cirle p:"+num2str(p)]); num = input("input duxks num:");end
NPointInHalfCicle.m
function p = NPointInHalfCicle(num) N = num; total = 100000; count = 0; for e = 1:total % 生成N个点 p = NPoints(N); for i = 1:N k = p(i, 2) / p(i, 1); b = []; for j = 1 :N if j == i continue; else b = [b, p(j, 2) - k * p(j, 1)]; end % 判断N-1个截距的符号一致性 if SymbolIsSame(b); conut = count + 1; break; end end end p = count / total; end
NPoints.m
function p = NPoints(N) p = []; for i = 1:N p = [p, 2*[rand, rand]-1]; end end
SymbolIsSame.m
function isSame = SymbolIsSame(b) isSame = 1; if b(1) >= 0 for i = 2:length(b) if b(i) < 0 isSame = 0; break; end end else for i = 2:length(b) if b(i) >= 0 isSame = 0; break; end end end end