数学实验3-matlab编程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例7:求和:s=1+2+…+n<3000
s=0;k=1; while s+k<3000 s=s+k; fprintf(' k=%.0f, s=%.0f\n ',k,s); k=k+1; end aa4.m
例8:求e:e=1+1+1/2!+1/3!+… (1/n!<1.0e-8) p=1;e=1;r=1;i=1; while r>=1.0e-8 p=p*i; r=1/p; e=e+r; fprintf(' i=%.0f, r=%.9f, e=%.9f \n ',i,r,e); i=i+1; end aa5.m
例15:用二分法求函数x^2-2=0的正实根.
f ( x ) x 2 2, [a, b] [1,2], f (a ) f (b) 0
1)c (a b) / 2 :
if f (c ) 0(或 | f (c ) | r ), g c;
elseif f (c ) f (a ) 0 b c;
例15 编写一个function 函数,调用该函数 ,可以将考试分数 值化为“A” ”B” “C” ”D”等级值.
function f=grad(x) switch fix(x/10) case {10,9} grade='A' case 8 grade='B' case 7 grade='C' otherwise grade='D' end
例2:求阶乘:p=1×2 × 3 × … × n=n! n=input('请输入 n= '); p=1; for i=1:n p=p*i; fprintf(' i=%.0f, p=%.0f\n ',i,p); end aa2.m
例3:求e:e=1+1+1/2!+1/3!+…+1/n! n=input('请输入 n= '); p=1;e=1; for i=1:n p=p*i; p1=1/p; e=e+p1; fprintf(' i=%.0f, p=%.0f, e=%.8f \n ',i,p,e); end
fprintf('k=%.0f A(%.2f,%.2f) B(%.2f,100) d=%.2f\n',k ,A(1),A(2),B(1),d);
end
M-文件中条件循环命令(while命令)
格式: while (condition is true) commands; end 作用:当条件成立时,执行命令集 commands,直到条件不成立.
M-文件中选择控制命令(if命令)
单项选择控制 格式: if (condition is true) commands; end 作用:若条件成立,则执行命令集 commands. 否则,不执行。
例9:求n个实数中最大的数M.
a=input('请输入数组 a[n]= '); [m,n]=size(a); M=a(1); for i=2:n if M<a(i) M=a(i); end end
M-文件中循环控制Leabharlann Baidu令(for命令)
格式: for i=n1:(step):n2 commands; end 作用:i从n1开始,执行命令集commands,
遇到end,i=i+step,重复执行,直到i> n2. 省略格式: for i=n1:n2 这里step=1.
例1:求n个奇数和:s=1+3+5+…+(2n-1) n=input(„please input n='); s=0; for i=1:n s=s+(2*i-1); fprintf('i=%.0f, s=%.0f\n',i,s); end 程序aa1
程序结构
程序一般包含: 数据输入 a=input('请输入数组 a[n]= '); [m,n]=size(a); M=a(1); for i=2:n if M<a(i) M=a(i); end end fprintf(' M=%.5f\n ',M);
数据处理
结果输出
M-文件中输入、输出命令
直接赋值输入: x=2; a=[1,2;3,4]; s= 'any string!';
例11:求函数 y=x2 sgn(x)的值
x=input(„please input x=„) if x>0 z=1; elseif x==0 z=0; else z=-1; end y=x^2*z
aa7.m
Switch语句
Switch语句用于实现多 重选择,其格式为: switch 表达式 case 数值1 模块1 case 数值2 模块2 ……. otherwise …….. end
function [p,q]=fun1(a,b,n) p=(a+b).^n; q=(a-b).^n; fun1.m
例14编制程序,从键盘输入a,b,n,计算(a+b)^n,(ab)^n aa8.m a=input(„a=„);b=input(„b=„);n=input(„n=„); [p,q]=fun1(a,b,n); fprintf(„(a+b)^n=%.4f,(a-b)^n=%.4f\n‟,p,q)
例12:建立符号函数sgn(x)
function sn=sgn(x) if x>0 sn=1; elseif x==0 sn=0; else sn=-1; end 以sgn作为文件名存盘,即建立了函数。 调用: 在命令区执行 : sn=sgn(10)或sn=sgn(-2)
例13:建立计算(a+b)^n,(a-b)^n的函数
fprintf(' M=%.5f\n ',M);
aa6.m
M-文件中选择控制命令(if命令)
多项选择控制 格式: if (condition is true) commands; elseif (condition is true) commands; else commands; end 作用:若条件成立,则执行命令集 commands. 否则,不执行。
第7周周日(10月16日)16:00-17:50 第9周周六(10月29日)16:00-17:50 第11周周六(11月12日)12:00-13:50 第13周周日(11月27日)16:00-17:50 第14周周六(12月3日)16:00-17:50
医电11~13班和生基硕11班
第7周周日(10月16日)12:00-13:50 第9周周六(10月29日)12:00-13:50 第11周周六(11月12日)8:00-9:50 第13周周日(11月27日)12:00-13:50 第14周周六(12月3日)12:00-13:50 学博军11班上机时间安排 第7周周日(10月16日)14:00-15:50 第9周周六(10月29日)14:00-15:50 第11周周六(11月12日)10:00-11:50 第13周周日(11月27日)14:00-15:50 第14周周六(12月3日)14:00-15:50
Return语句
Return语句终止当前命令的执行,并且返回 到调用函数或者等待键盘输入指令。
用M-文件定义函数
格式 function [y1,y2]=funname(x,y,a,n) 其中: function 为关键字; [y1,y2,…]为输出列表; funname为自定义的函数名; (x,y,a,n,…)为函数参数,用来传递相 关数值. 存盘时,要求用funname作为函数名.
B=7;
例10
A=input(„please input A=');
if A > B 'greater' elseif A < B 'less' elseif A == B 'equal' else error('Unexpected situation') end
数学实验
理学院数学学科 李换琴 hqlee@mail.xjtu.edu.cn
信息11、12、13班上机时间安排
第7周周日(10月16日)14:00-15:50 第9周周六(10月29日)14:00-15:50 第11周周六(11月12日)10:00-11:50 第13周周日(11月27日)14:00-15:50 第14周周六(12月3日)14:00-15:50 信息14、15、16班上机时间安排
aa3.m
例4
设A是一个 3 5矩阵, 1 A(i, j) , 试编程 i j 写出矩阵A.
m=3; n=5; for i = 1:m for j = 1:n H(i,j) = 1/(i+j); end end H
例5 数列极限 MATLAB程序: hold on % 图形迭加 axis([0,100,2,3]); % 设置坐标轴 grid % 加坐标网格 for n=1:90 % 循环操作 an=(1+1/n)^n; % 计算数列值 plot(n,an,'r*'); % 画出坐标点 pause(0.05); % 暂停0.05秒 fprintf('n=%d an=%.4f\n',n,an); % 显示坐标位置 end
MATLAB语言编程介绍
MATLAB中各种命令可以完成许多单一的任务,对 于某些较为复杂的问题,仅靠现有的命令或函数 来解决,往往是难以达到目的 。为此,要运用 MATLAB编程语言编制程序,形成M-文件。 程序是使计算机完成各项运算的命令集,运行一 个编制好的程序,计算机会从第一条命令行开始 ,一行接一行地执行相应的命令,直到终止。 程序编写调试完成后,需要存盘,形成永久性文 件,可以随时对它进行调用或修改。 文件名以字母开头,但不能用专用变量名,如 pi,ans,eps等。
x=input(‘成绩=’) switch fix(x/10) case {10,9} grade='A' case 8 grade='B' case 7 grade='C' otherwise grade='D' end
Break 语句
Break语句的格式为: break; 用于立即跳出包含该 break语句的各种循 环语句while和for 在循环语句中使用的 break语句一般应和if 语句配合使用 例如: while 条件1 …….. if 条件2 break; end ……… end
else a c;
2) if b a er,stop, 输出根。 否则goto 1).
输入初值: f ( x ), a , b, 误差限er
c (a b) / 2
直接输出: x disp([a,b]);
提示对话输入(input命令) x=input('请输入参数 x='); a=input('请输入矩阵 a='); s=input('Please input s=');
格式控制输出(fprintf命令) fprintf('x=%.0f, y=%.5f\n',pi,pi); fprintf('x=%5.0f, y=%10.5f\n',pi,pi);
1 n lim (1 ) 动态显示 n n
例6 导弹打击过程仿真
设 A(0,0) 为一导弹发射点,发现位于 B(0,100) 处 一架敌机沿水平方向逃离,随即发射一枚导弹 予以打击,现已知导弹时刻对准敌机,且速率 为飞机速率的两倍(设飞机速度为1)。 试编程模拟导弹打击敌机 B 的动态过程,并实时给出 飞机和导弹的位置坐标。 若要在敌机飞行距离不超 过60时(我方空域)将其 A 击落,导弹的速率应提高 到多少?
MATLAB程序: k=0; A=[0,0]; %导弹初始位置 B B=[0,100]; %飞机初始位置 v=1; dt=1; %离散时间改变量 d=100; %相距距离 while d>0.5 A plot(A(1),A(2),‟r‟); %画导弹位置 hold on plot(B(1),B(2),„b*‟); %画飞机位置 pause(0.2); k=k+1; B=B+[v*dt,0]; %飞机移动位置 e=B-A; %导弹指向飞机向量 d=norm(e); e0=e/d; %取向量方向(单位化) A=A+2.0*v*dt*e0; %导弹追击位置