Matlab编程以及接口

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)初值距离解要很近。

相关文档
最新文档