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?内折半,x?1,则x?2129?2; 425?2; 16在?1,1?内折半,x?1,则x???1?2?142在?1,1?内折半,x?1,得x??1?41?2?382121?2 64在?1,1?内折半,...... x?1............
?3?81?2?75292.......x??2 16256M = 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。 慢但很可靠。
上面问题也可以写成
f?x??x2?2
因此,上面的计算过程就是求根过程:f?x??0。可以用牛顿法进行计算,即
xn?1?xn?即
f?xn?f'?xn?
2xn?2xn?1?xn?
2xn
一般地,计算M的算法,
2xn?Mxn?1?xn?2xn1?M???xn??2?xn?
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)初值距离解要很近。