Matlab编程以及接口
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab编程的初步知识:
1.M脚本文件
Matlab命令集合;
无需输入和输出变量;
与其它脚本文件之间变量透明,即共同使用Matlab的工作空间。
比如
例1:
x = (1:10);
y =sin(x);
plot(x,y)
例2:
A = magic (4);
B = A';
[C,D = xtimesAB(A,B);
2.函数
同样也是完成具体任务的指令集合,但是用一个名字封装起来,变量对外不透明,需要借助输入变量提供数据,输出变量给出结果。执行完毕后,所用的内存全部释放给Matlab。这样的命令集合体称为函数,封装的名字称为函数名,输入变量和输出变量在函数名前后指定。比如例2的xtimesAB(A,B)定义如下:
function [C,D] =xtimesAB(A,B)
%
% This function can tell the products of e-e and V-C
%
C = A.*B;
D = A*B;
end
其中,函数名为xtimesAB,输入变量为A,B;输出变量为C,D。函数名下面%开头的部分为注释内容。在Matlab环境下,可以通过help xtimesAB来显示。
还有一种简单的函数,即inline函数,其特点是随用随定义。比如
1.>> myfun = ‘1+log(r) ‘;
2.>> myfuni=inline(myfun,’r’)
3.>>a=feval(myfuni,10)
4.结果a = 3.3026
我们用得最多的,就是像xtimesAB这样的M函数。与上面这个inline函数对应的M函数为
function y=myfun(r)
y=1+log(r);
该函数结尾不含有end,即Matlab不要求必须有end。
使用时,在Matlab命令环境下,直接书写函数名,并给出输入变量,即可以工作。但需要注意的是,Matlab调用的是文件名而不是函数名。但一般两者取一样的名字。因此,关键是文件名。
M函数的流程控制简介如下:
I. 循环
5.while
a)while condition
b)命令语句
c)end
6.for
a)for i=1:n
b)语句
c)end
ii.条件
1.if
a)if condition 1
b)语句
c)elseif condition2
d)语句
e)else
f)语句
g)end
2.switch
a)switch 表达式
b)case case1
c)语句
d)case case2
e)语句
f)otherwise
g)语句
h)End
iii.跳过:continue
iv.跳出:break
2009.9.29
绘图补充1. EZ系列绘图函数
ezplot('cos(x)')
ezplot('cos(x)', [0, pi])
ezplot('1/y-log(y)+log(-1+y)+x - 1')
ezplot('x^2 - y^2 - 1')
ezplot('x^2 + y^2 - 1',[-1.25,1.25]); axis equal
ezplot('x^3 + y^3 - 5*x*y + 1/5',[-3,3])
ezplot('x^3 + 2*x^2 - 3*x + 5 - y^2')
ezplot('sin(t)','cos(t)')
ezplot('sin(3*t)*cos(t)','sin(3*t)*sin(t)',[0,pi])
ezplot('t*cos(t)','t*sin(t)',[0,4*pi])
f = @(x)cos(x)+2*sin(x);
ezplot(f)
ezplot(@humps)
其它还有
ezcontour, ezcontourf, ezmesh, ezmeshc, ezplot3, ezpolar, ezsurf, ezsurfc Maple
例题1 用二分法计算2
介于 1- 2
先在()1,2内折半,112x =,则2
9
24x =
>; 在11,12⎛⎫ ⎪⎝⎭
内折半,114
x =,则2
25
216
x =
<; 在111,142⎛⎫ ⎪⎝⎭
内折半,318
x =,得2
121
264
x =
< 在311,182⎛⎫ ⎪⎝⎭
内折半,...... 7116x =. (2)
5292256
x => ............
M = 2 a = 1 b = 2 k = 0;
while b-a > eps x = (a + b)/2; if x^2 > M b = x else a = x end k = k + 1; end
共计52步,得到 1.4142。 慢但很可靠。
上面问题也可以写成
()22f x x =-
因此,上面的计算过程就是求根过程:()0f x =。可以用牛顿法进行计算,即
()()
1'n n n n f x x x f x +=-
即
212
2n n n n
x x x x +-=-
一般地,计算M 的算法,
21212n n n n
n n x M
x x x M x x +-=-
⎛⎫=+ ⎪⎝⎭
M=2; x=1; xprev=2;
while abs(x - xprev) > eps*abs(x) xprev = x; x = 0.5*(x + M/x); end
6步迭代即计算完毕,比上面快,但有条件限制
1)连续函数; 2)导数方便可求; 3)初值距离解要很近。