Matlab程序设计题目
电子科技大学应用数学学院 张勇
2008-4-27
各题目求解文档组成:
(1)相应函数文件和测试程序文件(程序有适当的注释); (2)程序运行结果(用一个word文件编排所有运行结果)。
一. 有一个向量v??a1,a2,?,an?,编程求解下列式子:
s1??ai2i?1i?1n,
22s2?a12?a3???au其中u为不超过n的最大奇数。
自己给出测试例子,并给出运算结果。 二. 模拟一次扑克牌洗牌过程,输出牌的顺序。
%4*13+2
paihao=[11:23,31:43,51:63,71:83,98,99]; if length(paihao)~=54,
error('error in number') end
PAIXU=randperm(54); fapai = paihao(PAIXU) 三. 模拟1000次投币过程,输出出现正面的频率。
程序1:
num_zheng=0; for i=1:1000, cur=rand; if cur<0.5,
num_zheng=num_zheng + 1; end end
f = num_zheng/1000
程序2:
更精练的代码?精练还有什么好处? 四. 问题:现有一个文本文件,格式如下, 19:35 07:47
19:14 07:12 19:21 07:19 18:53 08:23 19:07 07:05 19:00 06:58 21:37 08:04 20:40 07:40 21:44 07:22 21:30 07:25 19:28 06:48 22:00 07:10
需要将其以0:00时刻记为初始时刻,转为分钟。 准备知识:
(1) 文件打开(fopen),关闭(fclose); (2) 读取各行数据(fgetl)
(3) 解析各行数据,并转换数据 注:处理方法不唯一。 五. (适中)有一个文件mytest.txt,内容如下: %请将此文件中的数值读取为1个向量 1 4 7 2 5 8 3 6 9 2 7 8 6 4 特点:第2行开始为数值数据。 请编程将这个文件中从第2行开始的所有数保存为1个列向量(按行先后顺序排列这些数) 六. (适中)编写一个函数实现将一个矩阵数据保存为文本文件格式。 参考接口如下:
function flag=writemx(filename,A) %input:
%A 待保存的矩阵或向量 %filename 输出的文本文件名 %
%output:
%flag 0 保存失败;1保存成功 %
考核目的:文件函数操作 七. (较难)编写一个函数读取如下格式的文本文件,并将文件内容按照一定格式返回。返回格式自己设计。函数的输入参数为文件名,输出参数为文件的数字矩阵。
测试时就采用有如下内容的文件。注意:实际上要读取的行数不确定。 1991 353 13:30 1992 467 14:50 1993 1010 09:30 注意:第3列是时刻数据,要求提取出小时和分钟。 提示:可能用到的一些函数有fopen,fgetl,fclose等。
2x1x2?x3?x4八. (较难)有一个函数y?1?,另有2x5?x3一个函数f(x)定义如下。
?y?y?y?y?yx1?x2?x3?x4?x5。 ?x1?x2?x3?x4?x5编写函数完成计算函数f(x)在任意点的函数值的功能。 1. 创建符号变量x,编写符号表达式y; syms x1 x2 x3 x4 x5
e1=sqrt(x1*x2+x3+x4^2)/(x5+x3^2); y=sqrt(1+e1);
2. 利用diff计算偏导并创建f(x)的表达式
funx = diff(y,x1)*x1+ diff(y,x2)*x2+ diff(y,x3)*x3+ diff(y,x4)*x4+ diff(y,x5)*x5;
3. 复制funx表达式文本,并粘贴到一个程序文件 4. 在命令行输入myfun(1:5)检查语法是否正确
%diff(exp,x) %exp为符号表达式 九. (难)求解下列优化模型:
minf(x)f(x)?2?1?x1?x2?10??0.5?x1,x2,x3?5, s.t.??1?x4?3?1?x?45?其中目标函数如上题所示。
要求:分别采用蒙特卡罗法和Matlab提供的fmincon函数求解,并比较结果。 提示:
(1) 函数char:可以将一般的变量转变为字符串。 (2) 函数subs:替换函数
(3) 优化模型的目标函数程序可以通过文件操作产
生(根据这类文件的一般格式)。
一段参考代码: syms x1 x2
y = x1^2+x2^2;
f=diff(y,x1)+diff(y,x2) strfun = char(f);
strfun = subs(strfun,'x1','x(1)') strfun = subs(strfun,'x2','x(2)')
参考代码结果输出: f =
2*x1+2*x2
strfun = 2*(x(1))+2*x2
strfun =
2*(x(1))+2*(x(2))