实验一 matlab基本操作
一、实验目的
熟悉matlab的安装与启动;
熟悉matlab用户界面;
熟悉matlab功能、建模元素;
熟悉matlab优化建模过程。
二、 实验设备与仪器
1.微机
2.matlab仿真软件
三、 实验步骤
1. 了解matlab的硬件和软件必备环境;
2. 启动matlab;
3. 熟悉标题栏,菜单栏,工具栏,元素选择窗口,状态栏,控制栏以及系统布局区;
4. 学习优化建模过程。
四、 实验报告要求
1. 写出matlab系统界面的各个构成;以及系统布局区的组成;以及每一部分的功能;
2. 优化建模过程应用举例
五、实验内容
(一)、Matlab操作界面
1.命令窗口(command window)
2.命令历史窗口(command history)
3.工作空间管理窗口(workspace)
4.当前路径窗口(current directory)
(二)、优化建模过程应用举例
1、简单矩阵的输入步骤。
(1)在键盘上输入下列内容
A = [1,2,3; 4,5,6; 7,8,9]
(2)按【Enter】键,指令被执行。
(3)在指令执行后,MATLAB指令窗中将显示以下结果:
A = 1 2 3
4 5 6
7 8 9
2、矩阵的分行输入。
A=[1,2,3
4,5,6
7,8,9]
A =
1 2 3
4 5 6
7 8 9
3、指令的续行输入
S=1-1/2+1/3-1/4+ ...
1/5-1/6+1/7-1/8
S =
0.6345
4、画出衰减振荡曲线及其它的包络线。的取值范围是。
t=0:pi/50:4*pi;
y0=exp(-t/3);
y=exp(-t/3).*sin(3*t);
plot(t,y,'-r',t,y0,':b',t,-y0,':b')
grid
5、画出所表示的三维曲面。的取值范围是。
clear;x=-8:0.5:8;
y=x';
X=ones(size(y))*x;
Y=y*ones(size(x));
R=sqrt(X.^2+Y.^2)+eps; %<5>
Z=sin(R)./R; %<6>
surf(X,Y,Z); %
colormap(cool) %
xlabel('x'),ylabel('y'),zlabel('z')
6、复数矩阵的生成及运算
A=[1,3;2,4]-[5,8;6,9]*i
B=[1+5i,2+6i;3+8*i,4+9*i]
C=A*B
A = 1.0000 - 5.0000i 3.0000 - 8.0000i
2.0000 - 6.0000i 4.0000 - 9.0000i
B =1.0000 + 5.0000i 2.0000 + 6.0000i
3.0000 + 8.0000i 4.0000 + 9.0000i
C =1.0e+002 *
0.9900 1.1600 - 0.0900i
1.1600 + 0.0900i 1.3700
实验二 M文件的建立
一、 实验目的
熟悉matlab的安装与启动;熟悉matlab用户界面;熟悉matlab功能、建模元素;熟悉matlab优化建模过程。
二、 实验设备与仪器
1.微机;
2. matlab仿真软件
三、 实验步骤
1.了解matlab的硬件和软件必备环境;
2.启动matlab;
3.熟悉标题栏,菜单栏,工具栏,元素选择窗口,状态栏,控制栏以及系统布局区;
4.熟悉M文件的建立过程。
四、 实验报告要求
1. 熟练运用matlab建立M文件,这是优化的基础;了解优化计算过程,对于不同形式的优化模型注意计算过程的差异;
2. 优化建模过程应用举例。
五、实验相关知识
MATLAB 程序分为两类:M 脚本文件 (M-Script) 和 M 函数 (M-function),
●M 脚本文件中包含一族由 MATLAB 语言所支持的语句,它类似于 DOS 下的批处理文件,它的执行方式很简单,用户只需在 MATLAB 的提示符 >> 下键入该 M 文件的文件名,这样 MATLAB 就会自动执行该 M 文件中的各条语句,并将结果直接返回到 MATLAB 的工作空间。
●MATLAB 的 M 函数是由 function 语句引导的,其基本格式如下:
function [返回变量列表] = 函数名 (输入变量列表)
注释说明语句段, 由 % 引导
输入、返回变量格式的检测
函数体语句
六、实验内容
1.建立M文件的必要性:
对于常用的或很长的程序,如果每次都从头输入,则非常费时间,也容易出错.将这些程序做成M文件就方便多了--只要输入自定义的命令,就可以方便的调用,编程的效率大大提高!
2.建立M文件
(1)maltab命令窗口中编辑好M文件
例:编写一个输入半径,计算圆的面积和球的体积 的M文件.
前两行是文件头,一般说明文件的 类型(M-file),文件名(tutex2),和文件的功能(输入半径,计算圆的面积和球的体积),后面是文件体,主要是解决特定问题的程序代码.
% M-file, tutex2.m
% 输入半径,计算圆的面积和球的体积
r = input('Type radius:'); utex2),和文件的功能(输入半径,
%从键盘输入Type radius的值,并将它赋值给r.
area=pi*r^2;
volume=(4/3)*pi*r^3;
fprintf('The radius is %12.5f\n',r)
fprintf('The area of a circle is %12.5f\n',area)
fprintf('The volume of a sphere is %12.5f\n',volume)
(2)将上面的代码保存到工作空间里.保存方法是:File/New/M-file/保存
3.调用M文件
在matlab工作窗口直接键入M文件名,即可调用.
以上面的程序为例,
>> tutex2 %键入文件名,回车
Type radius: %提示输入半径 ,输入半径,比如 10, 回车 显示如下
Type radius:13.5
The radius is 10.00000
The area of a circle is 314.15927
The volume of a sphere is 4188.79020
实验三 线性规划
一、 实验目的
熟悉matlab的安装与启动;熟悉matlab用户界面;熟悉matlab功能、建模元素;熟悉matlab线性规划优化建模具体过程。
二、 实验设备与仪器
1. 微机;
2. matlab仿真软件
三、 实验步骤
1. 了解matlab的硬件和软件必备环境;
2.启动matlab;
3.熟悉标题栏,菜单栏,工具栏,元素选择窗口,状态栏,控制栏以及系统布局区;
4.学习线性规划优化建模过程。
四、 实验报告要求
1. 熟练运用matlab建立M文件的过程,了解线性规划优化建模和计算过程,对于不同形式的线性规划优化模型注意计算过程的差异;
2. 线性规划优化建模过程应用举例。
五、实验相关知识
线性规划问题求最优解函数:
调用格式: x=linprog(f,A,b)
x=linprog(f,A,b,Aeq,beq)
x=linprog(f,A,b,Aeq,beq,lb,ub)
x=linprog(f,A,b,Aeq,beq,lb,ub,x0)
x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
[x,fval]=linprog(…)
[x, fval, exitflag]=linprog(…)
[x, fval, exitflag, output]=linprog(…)
[x, fval, exitflag, output, lambda]=linprog(…)
说明:x=linprog(f,A,b)返回值x为最优解向量。
x=linprog(f,A,b,Aeq,beq) 作有等式约束的问题。若没有不等式约束,则令A=[ ]、b=[ ] 。
x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options) 中lb ,ub为变量x的下界和上界,x0为初值点,options为指定优化参数进行最小化。
Options的参数描述:
Display 显示水平。 选择’off’ 不显示输出;选择’iter’显示每一 步迭代过程的输出;选择’final’ 显示最终结果。
MaxFunEvals 函数评价的最大允许次数
Maxiter 最大允许迭代次数
TolX x处的终止容限
[x,fval]=linprog(…) 左端 fval 返回解x处的目标函数值。
[x,fval,exitflag,output,lambda]=linprog(f,A,b, Aeq,beq,lb,ub,x0) 的输出部分:
exitflag 描述函数计算的退出条件:若为正值,表示目标函数收敛于解x处;若为负值,表示目标函数不收敛;若为零值,表示已经达到函数评价或迭代的最大次数。
output 返回优化信息:output.iterations表示迭代次数;output.algorithm表示所采用的算法;outprt.funcCount表示函数评价次数。
lambda 返回x处的拉格朗日乘子。它有以下属性:
lambda.lower-lambda的下界;
lambda.upper-lambda的上界;
lambda.ineqlin-lambda的线性不等式;
lambda.eqlin-lambda的线性等式。
六、实验内容
1、matlab中help里的例题
2、习题1.2.2
min z=2x1-2x2+3x3
-x1+x2+x3=4
s.t. -2x1+x2-x3≤6
x1≤0,x2≥0,x3无约束
图二 习题1.2.2
。
第二篇:数学建模实验报告Matlab的基本操作编程
MATLAB基本操作、编程
一、 实验目的及意义
1.熟悉MATLAB软件的用户环境;
2.了解MATLAB软件的一般命令;
3.掌握MATLAB向量操作与矩阵运算函数;
4.掌握MATLAB软件的基本符号运算命令;
5.掌握MATLAB语言编程的循环、条件和选择结构。
二、实验内容
1.MATLAB软件的向量操作及矩阵运算练习;
2.使用MATLAB软件进行符号运算练习;
3.用MATLAB语言编写命令M-文件和函数M-文件;
三、实验步骤
1.在D盘建立一个自己的文件夹;
2.开启软件平台——MATLAB,将你建立的文件夹加入到MATLAB的搜索路径中。
3.利用帮助了解函数max, min, sum, mean, sort, length,rand, size和diag的功能和用法。
4.开启MATLAB编辑窗口,键入你编写的M文件(命令文件或函数文件);
5.保存文件(注意将文件存入你自己的文件夹)并运行;
6.若出现错误,修改、运行直到输出正确结果;
7.写出实验报告,并浅谈学习心得体会。
四、实验要求与任务
根据实验内容和步骤,完成以下具体实验,按要求写出实验报告。
1.设有分块矩阵,其中E,R,O,S分别为单位阵、随机阵、零阵和对角阵,试通过数值计算验证。
2.某零售店有9种商品的单件进价(元)、售价(元)及一周的销量如下表,问哪种商品的利润最大,哪种商品的利润最小;按收入由小到大,列出所有商品及其收入;求这一周该9种商品的总收入和总利润。
3.建立一个命令M-文件:求所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。例如,153是一个水仙花数,因为。
4.编写函数M-文件sq.m:用迭代法求 的值。平方根迭代公式为
迭代的终止条件为前后两次求出的的差的绝对值小于 。
5. 求函数的极限、导数或积分:
五. 程序代码及运行结果(经调试后正确的源程序)
1.设有分块矩阵,其中E,R,O,S分别为单位阵、随机阵、零阵和对角阵,试通过数值计算验证。
程序代码:
clear;
E=eye(3);
R=rand(3,2);
O=zeros(2,3);
X=[3,4];
S=diag(X);
A=[E,R;O,S];
% EQ1,EQ2分别表示待验证的等式左边和右边
EQ1=A^2;
EQ2=[E,R+R*S;O,S^2];
E
R
O
S
A
EQ1
EQ2
if EQ1==EQ2
fprintf('左边=右边,该等式成立\n')
else
fprintf('左边不等于右边,该等式不成立\n')
end
运行结果:
E =
1 0 0
0 1 0
0 0 1
R =
0.9218 0.4057
0.7382 0.9355
0.1763 0.9169
O =
0 0 0
0 0 0
S =
3 0
0 4
A =
1.0000 0 0 0.9218 0.4057
0 1.0000 0 0.7382 0.9355
0 0 1.0000 0.1763 0.9169
0 0 0 3.0000 0
0 0 0 0 4.0000
EQ1 =
1.0000 0 0 3.6873 2.0285
0 1.0000 0 2.9528 4.6773
0 0 1.0000 0.7051 4.5845
0 0 0 9.0000 0
0 0 0 0 16.0000
EQ2 =
1.0000 0 0 3.6873 2.0285
0 1.0000 0 2.9528 4.6773
0 0 1.0000 0.7051 4.5845
0 0 0 9.0000 0
0 0 0 0 16.0000
左边=右边,该等式成立
2.某零售店有9种商品的单件进价(元)、售价(元)及一周的销量如下表,问哪种商品的利润最大,哪种商品的利润最小;按收入由小到大,列出所有商品及其收入;求这一周该9种商品的总收入和总利润。
程序代码:
clear;
inPrice=[7.15,8.25,3.20,10.30,6.68,12.03,16.85,17.51,9.30];%进价
outPrice=[11.10,15.00,6.00,16.25,9.90,18.25,20.80,24.15,15.50];%售价
sold=[568,1205,753,580,395,2104,1538,810,694];%销量
inCome=outPrice.*sold;%收入
profit=(outPrice-inPrice).*sold;%利润
[max1,pos1]=max(profit);
[min1,pos2]=min(profit);
fprintf('\n1.求利润最大、最小的商品\n')
fprintf('货号为%d的商品利润最大,为%f元\n',pos1,max1)
fprintf('货号为%d的商品利润最小,为%f元\n',pos2,min1)
fprintf('\n2.按收入由小到大,列出所有商品及其收入\n')
[A,pos]=sort(inCome);
i=1;
while i<=9
fprintf('货号:%d 收入:%f元\n',pos(i),A(i))
i=i+1;
end
fprintf('\n3.求这一周该9种商品的总收入和总利润\n')
fprintf('总收入:%f元\n',sum(inCome))
fprintf('总利润:%f元',sum(profit))
运行结果:
1.求利润最大、最小的商品
货号为6的商品利润最大,为13086.880000元
货号为5的商品利润最小,为1271.900000元
2.按收入由小到大,列出所有商品及其收入
货号:5 收入:3910.500000元
货号:3 收入:4518.000000元
货号:1 收入:6304.800000元
货号:4 收入:9425.000000元
货号:9 收入:10757.000000元
货号:2 收入:18075.000000元
货号:8 收入:19561.500000元
货号:7 收入:31990.400000元
货号:6 收入:38398.000000元
3.求这一周该9种商品的总收入和总利润
总收入:142940.200000元
总利润:46051.830000元
3.建立一个命令M-文件:求所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。例如,153是一个水仙花数,因为。
程序代码:
clear;
i=100;B=[];
while i<=999
g=mod(i,10);%个位
s=mod((i-g)/10,10);%十位
b=mod((i-g-s*10)/100,10);%百位
if sum([g,s,b].^3)==i
B=[B,i];
end
i=i+1;
end
fprintf('\n三位数的水仙花数:\n')
fprintf('%g ',B)
运行结果:
三位数的水仙花数:
153 370 371 407
4.编写函数M-文件sq.m:用迭代法求 的值。平方根迭代公式为
迭代的终止条件为前后两次求出的的差的绝对值小于 。
程序代码:
function x = sq(a)
x1=a;
x2=(x1+a/x1)/2;
while (abs(x2-x1)>=10e-5)
x1=(x2+a/x2)/2;
temp=x1;
x1=x2;
x2=temp;
end
x=x2;
运行结果:
A=[sq(2),sq(3);sq(4),sq(5);sq(6),sq(7);sq(8),sq(9)]
A =
1.41421356237469 1.73205081001473
2 2.23606797749998
2.44948974278755 2.64575131111137
2.82842712504986 3.00000000139698
5. 求函数的极限、导数或积分:
程序代码:
syms x y z n;
fprintf('\n1)求lim(x+3^x)^(1/x),当x->∞时')
F1=(x+3^x)^(1/x);
f1=limit(F1,x,inf)
fprintf('\n2)求lim(exp(x)*sin(x)-x*(x+1))/(x^3),当x->0时')
F2=(exp(x)*sin(x)-x*(x+1))/(x^3);
f2=limit(F2,x,0)
fprintf('\n3)f(x)=(x^2+2*x-1)/(exp(-x)*sin(x)+1),求f(1)(x)')
F3=(x^2+2*x-1)/(exp(-x)*sin(x)+1);
f3=diff(F3,x)
fprintf('\n4)f(x)=x^2/(1-x^2),求f(n)(0)\n')
fprintf('\nn=20,为本组成员学号后两位(04 17 39)的平均值')
n=(4+17+39)/3;
F4=x^2/(1-x^2);
f4=subs(diff(F4,x,n),'x',0)
fprintf('\n5)atan(y/x)=log(sqrt(x^2+y^2)),求dx/dy')
F5=atan(y/x)-log(sqrt(x^2+y^2));
df_dx=diff(F5,x);
df_dy=diff(F5,y);
dx_dy=-(df_dy/df_dx)
fprintf('\n6)z=x*atan(y),求偏导dz/dx,偏导dz/dy')
F6=x*atan(y);
dzdx=diff(F6,x)
dzdy=diff(F6,y)
fprintf('\n7)∫exp(2*x)/(exp(x)+2)dx,求此积分')
F7=exp(2*x)/(exp(x)+2);
f7=int(F7,x)
运行结果:
1)求lim(x+3^x)^(1/x),当x->∞时
f1 =
3
2)求lim(exp(x)*sin(x)-x*(x+1))/(x^3),当x->0时
f2 =
1/3
3)f(x)=(x^2+2*x-1)/(exp(-x)*sin(x)+1),求f(1)(x)
f3 =
(2*x+2)/(exp(-x)*sin(x)+1)-(x^2+2*x-1)/(exp(-x)*sin(x)+1)^2*(-exp(-x)*sin(x)+exp(-x)*cos(x))
4)f(x)=x^2/(1-x^2),求f(n)(0)
n=20,为本组成员学号后两位(04 17 39)的平均值
f4 =
2.4329e+018
5)atan(y/x)=log(sqrt(x^2+y^2)),求dx/dy
dx_dy =
-(1/x/(1+y^2/x^2)-1/(x^2+y^2)*y)/(-y/x^2/(1+y^2/x^2)-1/(x^2+y^2)*x)
6)z=x*atan(y),求偏导dz/dx,偏导dz/dy
dzdx =
atan(y)
dzdy =
x/(1+y^2)
7)∫exp(2*x)/(exp(x)+2)dx,求此积分
f7 =
exp(x)-2*log(exp(x)+2)
六.实验总结
本次实验中主要涉及到矩阵运算、排序函数、循环语句、函数M文件、迭代法、求极限、积分、导数等操作,题量大,涉及面广,让我们这些初学者更加熟悉和掌握了MATLAB的基本使用方法,同时此软件在数值计算方面又有许多优点,如编程时使用内部命令使程序更加简洁,明朗,易懂。由于第一次使用此软件,在编程时不免会出现很多不习惯的地方,如点乘等等都是平时应该注意的。
学生签名:
年 月 日
七.教师评语及成绩
教师签名:
年 月 日