matlab字符串实验报告,matlab实验报告28590

实 验 报 告

课程名称: 可视化计算机语言

实验项目名称: matlab程序设计

学院: 信息工程学院

专业: 电子信息工程

指导教师:

报告人: 学号: 班级:

实验时间:

实验报告提交时间:

教务部制

一、实验目的与要求:

1、 熟练掌握matlab的程序流程控制结构。

2、 熟悉掌握M文件的结构和函数调用。

3、 掌握内联函数和函数句柄的使用。

4、 了解程序性能剖析窗口。

二、内容和步骤:

MATLAB的语法规则简洁,编程效率高,作为一个完整的程序语言,MATLAB也有各种程序流程控制,文件格式和函数调用的规则,通过对函数的调用就能够组成庞大的程序,完成复杂的功能。

1. 使用程序流程控制

Fibonacci数列的各元素为:1、1、2、3、5、8、...满足一下关系

F1=1 F2=1 Fn=Fn-1+Fn-2

用M函数文件实现,数列的元素个数为输入变量。

(1) 按M函数文件格式创建文件开头。

function f=shiyan0501(n)

%SHIYAN0501

%Fibonacci数列

%n 元素个数

%f 构成Fibonacci数列向量

%

%copyright 2015-11-25

(2) 用while循环实现程序功能

f(1)=1;

f(2)=1;

i=2;

while i<=n

f(i+1)=f(i-1)+f(i);

i=i+1;

End

运行后,输入参数10,运行结果如下所示:

(3) 使用for循环实验

for i=2:n

f(i+1)=f(i-1)+f(i);

end

运行结果如下所示:

(4) 当某个元素大于50时,退出循环结构,程序修改如下:

for i=2:n

if f(i)>10

break

else

f(i+1)=f(i-1)+f(i);

end

end

当某个元素大于50,程序便退出循环结构

当n=10,最后一个元素刚好是大于50的,正好退出循环结构

当n=12时,第十个元素对应的f(i)大于50,于是退出循环结构,不再运行f(11),f(12)了。

(5) 将该.m文件生成P码文件

>> pcode shiyan0501

将shiyan0501.m删除,重新运行该文件夹,结果如下所示:

练习:

将该M文件函数改为M脚本文件,将数列元素个数通过键盘输入,程序应该如何修改?

①将M文件函数另存为M脚本文件;

②在函数前加

n=input(please input a num:)

便可通过键盘键入文件

运行结果如下所示:

please input a num:12

n =

12

ans =

1 1 2 3 5 8 13 21 34 55 89

2. 使用函数调用

计算arcsin(x),

(1) 子函数factorial计算n!子函数factorial计算n!输入参数为n,使用for循环实现的阶乘,输出参数为阶乘。

在matlab界面中选择“file->new->function”命令,创建一个新的函数文件,修改输入输出参数和函数名。

function f=factorial(n) %[ output_args ] = Untitled7( input_args )

%UNTITLED7 此处显示有关此函数的摘要

% 此处显示详细说明

f=1;

for m=1:n

f=m*f;

(2) 子函数cal.子函数cal是计算系数

function k=cal(n1)

%计算系数

for m=1:n1

k=factorial(2*n1)/(2^(2*n1)*(factorial(n1))^2*(2*n1+1));

end

输入参数n=5

运行结果如下图所示:

>> cal(5)

ans =

0.0224

本函数中调用了求阶乘的子函数factorial

(3) 主程序shiyan0502.求主函数计算arcsinx,输入参数为x,输出参数为arcsinx的计算结果。

程序如下所示:

function y=shiyan0502(x)

%shiyan0502 arcsinx

n=1;

if abs(x)<1

y=x;

while cal(n)>0.0001

y=y+cal(n)*x^(2*n+1);

n=n+1;

end

else

disp(输入错误);

y=0;

return

end

运行结果:

>> y=shiyan0502(0.7)

y =

0.7754

当输入参数不满足条件是退出程序:

>> y1=shiyan0502(2)

输入错误

y1 =

0

练习:

如果不使用子函数factorial ,而直接在cal函数中计算阶乘,应如何修改程序。

修改cal函数如下所示:

function k=cal(n1)

%计算系数

f=1;

f1=1;

for m=1:2*n1

f1=m*f1;

end

for m=1:n1

f=m*f;

end

k=f1/(2^(2*n1)*f^2*(2*n1+1));

end

调用程序shiyan0502,运行结果如下所示:

>> y=shiyan0502(0.7)

y =

0.7754

运行结果与使用子函数factorial的运行结果一致。

(4) 使用程序性能剖析。选择菜单‘view’->‘profile’命令;或使用在命令窗口输入‘profile viewer’命令都可以打开程序性能剖析窗口。

在程序性能剖析窗口的‘命令输入栏’中输入需要剖析的命令,‘y=shiyan0502(0.7)’,然后单击‘start profiling’按钮,查看剖析报告。

(5) 程序的调试。当有多个函数调用时,由于函数变量的工作空间是独立的,被调用的函数执行结束后变量消失,因此调试时要使用matlab调试器查看运行过程中的变量值。

①设置断点。在需要查看的程序的地方设置断点,

>> shiyan0502(0.7)

K>> y

y =

0.7000

K>> x=0.5

x =

0.5000

在K>>输入x=0.5即可将x的值从0.7修改为0.5.

去除断点,查看结果:

ans =

0.7236

结果与x值为0.7时不一致,当x=0.7时,y =0.7754,由此可知,x的值已被修改。

②单步运行

>> shiyan0502(0.7)

9 n=n+1;

K>>

按单步运行键:

可看到箭头不断的移动:

(6)使用函数句柄。在命令窗口使用函数句柄调用函数。

>> h_shiyan0502=@shiyan0502

h_shiyan0502 =

@shiyan0502

>> y=feval(h_shiyan0502,0.5)

y =

0.5236

(7) 使用全局变量。Matlabe的编程不提倡使用全局变量,本例中的程序主要是为了查看全局变量的概念。将n作为全局变量,子函数factorial不修改,子函数cal程序和主函数shiyan0502修改如下:

function y=shiyan0502(x)

%shiyan0502 arcsinx

global n;

n=1;

if abs(x)<1

y=x;

while cal(n)>0.0001

y=y+cal(n)*x^(2*n+1);

n=n+1;

end

else

disp(输入错误);

y=0;

return

end

function k=cal(n1)

global n

for m=1:n

k=factorial(2*n)/(2^(2*n)*(factorial(n))^2*(2*2*n+1));

End

global为设置的全局变量,子函数没有输入变量,而用全局变量n传递。

在全局变量前设置断点,然后运行程序,当程序运行到断点处停止,接着不断使用单步运行调试,结果如下所示:

|

|

|

练习:

使用单步运行调试,查看全局变量n的变化,并在工作空间查看n;

3、 利用泛函命令实现数值分析

①创建函数shiyan0503实现上述表达式关系。

function y=shiyan0503(t)

%shiyan0503 y=(sin(t)).^2.*exp(a*t)-b*abs(t)

a=0.1;

b=0.5;

y=(sin(t)).^2.*exp(a*t)-b*abs(t);

②查看该函数的输出波形,如下图所示:

③利用函数名求零点,在上图中可以看相互在0的附近有2个过零点

x1=fzero(shiyan0503,0.5)

x2=fzero(shiyan0503,-0.5)

运行结果如下所示:

>> shiyan0503_1

x1 =

0.5198

x2 =

-0.5993

④利用函数句柄求过零点

>> x1=fzero(@shiyan0503,0.5)

x1 =

0.5198

>> x2=fzero(@shiyan0503,-0.5)

x2 =

-0.5993

⑤利用函数句柄求极小值,由②图可知,极小值有多个,查看其中2个

>> x1=fminbnd(@shiyan0503,0.1,0.7)

x1 =

0.2511

>> x2=fminbnd(@shiyan0503,2,5)

x2 =

3.3233

练习:

利用函数句柄求[-1,1]的面积。

>> x=-1:0.1:1;

>> y=shiyan0503(x);

>> area=trapz(x,y) %用梯形计算积分

area =

0.0485

>> area1=quad(@shiyan0503,-1,1) %用quad计算积分

area1 =

0.0469

(2) 使用内联函数

①创建内联函数f

>> a=0.1;

>> b=0.5;

>> f=inline((sin(t)).^2.*exp(.1*t)-0.5*abs(t),t)

f =

内联函数:

f(t) = (sin(t)).^2.*exp(.1*t)-0.5*abs(t)

②绘制曲线图

>> t=-10:0.1:10;

>> y=feval(f,t);

>> plot(t,y)

③求过零点

>> x1=fzero(f,0.5)

x1 =

0.5198

④求极小值

>> x2=fminbnd(f,0.1,0.7)

x2 =

0.2511

练习:

利用内联函数求8附近的极小值

x=fminbnd(f,7.9,8.1)

x =

8.0999

x2=fminbnd(f,7.99,8.01)

x2 =

8.0099

(3) 使用字符串

①创建字符串

>> g=(sin(x)).^2.*exp(.1*x)-.5*abs(x)

g =

(sin(x)).^2.*exp(.1*x)-.5*abs(x)

②绘制曲线图

>> x=-10:0.1:10;

>> y=eval(g,x);

>> plot(x,y)

运行程序得到下图:

③求零点

>> x1=fzero(g,0.5)

x1 =

0.5198

自我练习:

(1) 编写函数计算输入参数r为圆半径的圆面积和周长。

程序如下所示:

g=pi*r^2

k=2*pi*r

r=input(请输入圆的半径r:)

disp(圆的面积:)

y=eval(g,r)

disp(圆的周长:)

y1=eval(k,r)

运行结果如所示:

假设输入圆的半径为3

g =

pi*r^2

k =

2*pi*r

请输入圆的半径r:3

r =

3

圆的面积:

y =

28.2743

圆的周长:

y1 =

18.8496

(2) 创建内联函数计算y=sin(r)/r,使用函数句柄调用,并绘制曲线。

>>y=inline(sin(r)./r)

y =

内联函数:

y(r) = sin(r)./r

>> x=-10:0.1:10;

>> f=feval(y,x);

>>plot(x,f)

运行结果如下图所示:

三、实验结论:

通过该实验较为熟练地掌握matlab的一些基本操作,掌握熟练掌握matlab的程序流程控制结构,

熟悉掌握M文件的结构和函数调用,掌握内联函数和函数句柄的使用,了解程序性能剖析窗口。

指导教师批阅意见:

成绩评定:

指导教师签字:

年 月 日

备注:

注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。【下载本文档,可以自由复制内容或自由编辑修改内容,更多精彩文章,期待你的好评和关注,我将一如既往为您服务】

16

精品文档交流

展开阅读全文

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值