matlab数学实验--第二章

2021-02-20 02:06发布

控制流:

分支语句:

if (条件式)语句;end

if (条件式1),语句1elseif (条件式2),语句2;……;else,语句;end

iwitch(分支变量) case(1),语句1case(2),语句2;……;

otherwise语句;end

 

循环语句:

for 循环变量 = 初值:增量:终值,语句 ;end

while (条件式),语句;end

 

其他:

pause,

break:当循环执行到该语句是,程序将跳出循环

return,error

 

x = input('输入x的值:');

if x<10

    y = cos(x+1);

else

    y = x*sqrt(x);

end

 

 

y = 0,m=100;

for n = 1:m

    y = y + 1/n/n  % y加n的平方之一

 end

y

 

clear;

t = 0,n = 1,m = 100;

while (n<=m)

    t = t+1/n/n

    n = n+1

end

 

 

 

M文件的分类:

分类:

脚本文件(script file)和函数文件(function file)

 

主要区别:

  1. 1.     M脚本文件没有参数传递功能;函数文件有参数传递功能
  2. 2.     M脚本文件中的变量是全局的,在命令窗口也可用;函数文件中的变量是局部

 

exch.m脚本文件

a = 1:10;

b = [11,12,13,14;15,16,17,18];

c=a;a=b;b=c;

a,b

 

函数文件

function [a,b] = fexch(a,b)

c=a;a=b;b=c;

 

[x,y] = fexch(x,y)

 

函数文件名与函数名也可以不相同。当两者不相同时,matlab将忽略函数名而确认函数文件名,因此调用时使用函数文件名。

 

若一个文件中定义了多个函数,则只有第一个函数作为主函数被外部调用;其它函数作为子函数只能被同一个文件中的主函数或其他子函数调用,而不能被外部调用;

 

 

函数句柄、匿名函数:

函数句柄:

编写M函数 eg2_1f.m

函数句柄fname=@ eg2_1f

fevalfname,1000)或者fname1000

 

egfname=@cos

fname(pi)

结果返回-1

 

inline函数:

当表达式比较短,使用inline函数比较方便

fun = inline(‘函数表达式自变量’)

 

fname = inline('sum(1./(1:m).^2)','m');

fname(1000)

 

匿名函数:

fun = @(自变量)函数表达式

匿名函数的参数传递更灵活

k=2;fname=@(m)sum(1./(1:m).^k);

fname(100)

 

 

数据的输入输出:

Input函数:提示用户输入数据

disp函数:屏幕输出

 

由于disp函数输出的是字符串。如果要输出数字,那么必须先把数字转换成字符串

 

eg: ax2+bx+c=0的根

a = input('a=? ');

b = input('b=? ');

c = input('c=? ');

d = b*b-4*a*c;

 

x = [(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];

 

disp(['x1=',num2str(x(1)),'x2=',num2str(x(2))])

 

函数重载:

nargin: 记录调用函数输入变量个数;

nargout: 记录调用函数时输出变量的个数;

 

eg:

function [f1,f2] = exam_arg(a,b,c)

if nargin == 1    f1=a;

elseif nargin == 2     f1=(a+b)/2;

elseif nargin == 3      f1=(a+b+c)/3; 

end

 

if nargout == 0

    error('没有输出参数。');

elseif nargout == 2

    f2 ='计算平均值';

end

 

1.         tic,toc命令查看运行时间

2.         profile on,profile viewer查看程序性能分析报告

eg: 编写m函数文件,对于任意输入的向量x,计算由下列分段函数值构成的向量。

f(x) =x2 ,x>1

f(x)=1,-1<x<1

f(x)=3+2x,x<=-1

 

profile on

 

x = -2:0.0001:2;

y1 = eg2_4a(x);

y2 = eg2_4b(x);

y3 = eg2_4c(x);

 

profile viewer

 

 

function y = eg2_4a(x)

n = length(x);

for k = 1:n

    if x(k)>1

        y(k) = x(k)^2;

    elseif x(k)>-1

        y(k) = 1;

    else

        y(k) = 3+2*x(k);

    end

end

 

 

 

 

function y = eg2_4b(x)

y = zeros(size(x));

 

k1 = find(x>1);

y(k1) = x(k1).^2;

 

k2 = find(x-1 & x<=1);

y(k2) =1;

 

k3 = find(x<=-1);

y(k3) = 3 + 2 * x(k3);

 

 

function y = eg2_4c(x)

 

y = (x>1).* x.^2 + (x>-1 & x<=-1).*1+(x<=-1).*(3+2*x);

 

 

曲线图:

polt(x,y):xy为长度相同的向量,分别用于存储x坐标和y坐标数据。

plot(x1,y1,选项1,x2,y2,选项2,……,xn,yn,选项):多组折线

plot3(x1,y1,z1,选项1,……,xn,yn,zn,选项n):空间曲线;

fplot(fun’,[a,b]):绘制fun在区间[a,b]上的图形,fun可以是函数或表达式

线型

点标记

颜色

-         实线

:虚线

-. 点划线

-- 划线

.

O

X 叉子

+ 加号

*星号

S 方块

d 菱形

^ 朝上三角

V 朝下三角

  • Ø 朝右三角

< 朝左三角

P 五角形

h 六角形

b 蓝色

m 棕色

c 青色

r 红色

g 绿色

y 黄色

w 白色

k 黑色

 

绘制二位曲线

第一种:

x=0:pi/100:2*pi;

y=2*exp(-0.5*x).*sin(2*pi*x);

plot(x,y,'r*')

 第二种:

fplot(@(x)2*exp(-0.5*x)*sin(2*pi*x),[0,2*pi],'gd')

 

绘制三位曲线:

t = 0:pi/50:2*pi;

x = 8*cos(t);y = 4*sqrt(2)*sin(t);

z = -4*sqrt(2)*sin(t);

plot3(x,y,z,'p')

 

 

曲面图形的绘制:

平面网格坐标的生成

x = z:dx:b;    y = c:dy:d;

[X,Y] = meshgrid(x,y);

x=[1 2 3 4];

y=[2 4 5];

[X,Y]=meshgrid(x,y)

 

 

绘制三维曲面的函数:

mesh(x,y,z): 网格图

surf(x,y,z): 曲面图(填充网格)

contour(x,y,z): 等高线图(平面图)

contour3(x,y,z): 三围等高线图(空间图)

xa = -2:0.2:2;

ya = xa;

[x,y] = meshgrid(xa,ya);

z = x.*exp(-x.^2-y.^2);

 

mesh(x,y,z);pause(2)   %网格图 %等待2秒

surf(x,y,z);pause(2)   %填充网格

contour(x,y,z);pause   %平面等高线  %等待,直到用户按下任意键

contour3(x,y,z);pause  %立体登高线

contour(x,y,z,[0.1 0.1]);

surf(x,y,z);

 

 

图形说明和图形定制

图形标注:

title(图形名称)  xlabel(x轴说明)   ylabel(y轴说明)

 

循环语句:

hold on/off:   保留/释放现有图形

figure/close:   新开/关闭图形窗口、

grid on/off:   /不画网格线,不带参数的grid命令在两种状态之间进行切换

box on/off:  /不加边框线,不带参数的box命令在两种状态之间进行切换

axis on/off:  显示 /取消坐标轴

axis([xmin  xmax  ymin  ymax  zmin  zmax])限定坐标轴的范围

 

 

x = linspace(0,2*pi,60);

y = sin(x); z = cos(x);

subplot(2,2,1);

plot(x,y);title('sin(x)');axis([0,2*pi,-1,1]);

subplot(2,1,2);

plot(x,z,'*');title('cos(x)');axis([0,2*pi,-1,1]);

 

x = linspace(-2,2,60);

y = x.^3;

subplot(2,2,2);

plot(x,y);title('x^3');axis([-2,2,-4,4]);

 

 

 

在线帮助和文件管理

在线帮助

  1. 1.     help命令:是最基本的查询方法,可查询所有目录、指定目录、命令、函数;
  2. 2.     lookfor关键字:搜索相关的命令和函数;
  3. 3.     type  M文件名:显示M文件代码;
  4. 4.     which M文件名:显示指定文件的路径;
  5. 5.     demo: 演示matlab功能;

 

PS:

查看某个函数的文档doc  函数名;

也可以点击界面帮助哪里—>文档

 

 

1.求满足>200 的最小m值。

 

total=0;

m=0;

while true

 total=total+log(1+m);

 if total>1200

   break;

 end

 m=m+1;

end

m

 

2编写M函数文件,使对任意函数输入x0n,实现下列迭代

Xk+1=exp(-xk),k==0,2,……,n. n为总迭代次数,要求输出最后的xn..x0=1,n=50计算。

 

3.1)假定某天的气温变化记录如下表,试作图描述这一天的气温变化规律

时刻th

0

1

2

3

4

5

6

7

8

9

10

11

 

温度C(t)

15

14

14

14

14

15

16

18

20

22

23

25

 

时刻th

12

13

14

15

16

17

18

19

20

21

22

23

24

温度C(t)

28

31

32

31

29

27

25

24

22

20

17

18

16

t = 0:1:24;

T = [15 14 14 14 14 15 16 18

    20 22 23 25 28 31 32 31

    29 27 25 24 22 20 18 17 16];

 

plot(t,T,'r-');

考虑下列函数,计算误差平方和,并作图比较效果

二次函数,三次函数,四次函数

t = 0:1:24;

T = [15 14 14 14 14 15 16 18 20 22 23 25 28 31 32 31 29 27 25 24 22 20 18 17 16];

 

p2 = polyfit(t,T,2);

T2 = polyval(p2,t);

p2

deltaT2 = sum((T2-T).*(T2-T));

 

p3 = polyfit(t,T,3);

T3 = polyval(p3,t);

p3

deltaT3 = sum((T3-T).*(T3-T));

 

 

p4 = polyfit(t,T,4);

T4 = polyval(p4,t);

p4

deltaT4 = sum((T4-T).*(T4-T));

 

plot(t,T,'--k',t,T2,'-y',t,T3,'-rd',t,T4,'go');

title('观测值和各次拟合的比较');

 

 

2)用matlab指令dlmwrite将上述数据输出到一个文本文件中,第一列是时刻,第二列是温度,要求用空格分隔数据。

 

(3)从工具HomeImport data 导入上述文件中的数据。

 

4.作出下列函数图像

(1)曲线y=x2cos(1+3x),-2<=x<=2(要求分别使用plotfplot完成)

x = -2:0.1:2;

y = x.^2.*cos(1+3*x);

plot(x,y);

 

fplot(@(x)x.^2.*cos(1+3*x),[-2,2],'r-');

 

(2)椭圆x2/9+y2/25=1;

 

t = linspace(0,2*pi,100);

x = 3*cos(t);

y = 5*sin(t);

plot(x,y)

 

(3)空间曲线x=sin t, y = cos t, z = cos(2t),0<t<2*pi;

t = 0:0.01:2*pi;

x = sin(t);

y = cos(t);

z = cos(2*t);

plot3(x,y,z)

 

(4)半球面x = 2sin s *cos t, y = 2sin s* sin t, z = 2cos s,0<t<360度,0<s<90度。

theta = linspace(0,2*pi,50); fai = linspace(0,pi/2,25);

[theta,fai] = meshgrid(theta,fai);

x = 2*sin(fai).*cos(theta);

y = 2*sin(fai).*sin(theta);

z = 2*cos(fai);

surf(x,y,z)

 

 6.     画出下列方程的曲面图及等高线图:

z=sin(x/2)*cos(y);

其中x21个值均匀分布在[-2pi,2pi]范围,y的值均匀分布在[-1.5pi,1.5pi]。请使用subplot将产生的曲面图和等高线图在同一窗口上。

x = linspace(-2*pi,2*pi,21);

y = linspace(-1.5*pi,1.5*pi,21);

[X,Y] = meshgrid(x,y);

Z = sin(X/2).*cos(Y);

subplot(2,1,1);mesh(X,Y,Z);

subplot(2,1,2);contour3(X,Y,Z,12,'k');

 

 

标签: