%% 顺序结构程序
% 数据的输入
% 输入某一值:在命令行窗口中输入“ input('请输入某一值:\n')”,按回车键
% 输入某一矩阵:在命令行窗口中输入“ input('请输入某一矩阵:\n')”,按回车键
% 输入某一字符串:在命令行窗口中输入“ input('请输入某一字符串:\n','s')”,按回车键
A = ('请输入变量A的值:')
% 数据的输出
s = 'Hello world!'
disp(s)
% 程序的暂停
pause(30) % 延迟30秒
% 求线段AB的长度A(1,1);B(4.5,4.5), 并求出线段的黄金分割点
% 可以将A和B的坐标转化为复数,直接求复数的模
a = input('a='); % 这里输入1+i
b = input('b='); % 这里输入4.5+4.5i
s = abs(a-b); % 求复数的模
c = a+((sqrt(5)-1)/2)*(b-a);
disp(s)
disp(c)
%% 用if语句实现选择结构
% 当条件结果为标量时,非零表示条件成立,零表示条件不成立。
% 当条件结果为矩阵时,如果矩阵为非空,且不包含零元素,则条件成立,否则不成立。
% 例如,[1,2;0,4]表示条件时,条件不成立;[1,2;3,4]表示条件时,条件成立。
% 例1输入一个整数,若为奇数则输出其平方根,否则输出其立方根。
x=input('请输入x的值:');
if rem(x,2)==1
y=sqrt(x);
else
y=x^(1/3);
end
y
% 例2 输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字母,则输出其对应的大写字母;若为数字字符则输出其对应数的平方,若为其他字符则原样输出。
c=input('请输入一个字符:','s')
if c>='A'&& c<='Z'
disp(lower(c))
elseif c>='a'&& c<='z'
disp(upper(c))
elseif c>='O'&& c<='9'
disp(str2double(c)^2) % str2double(将字符串转化为数值)
else
disp(c)
end
%% 用switch语句实现选择结构
% switch表达式应该是一个其值可以列举的表达式。
% case结果表为switch表达式的取值,当取值有多个时,用单元数据表示。
x = input('x = ?')
switch fix(x)
case 2
disp(111);
case 2
disp(222);
case 3
disp(333);
case {4,5,6,7}
disp(888);
otherwise
disp(999);
end
% 输入一个英文单词,判断它是否以元音字母开头。
c=input('请输入一个单词:','s');
switch c(1)
case {'A','E','I','O','U','a','e','i','o ','u'}
disp([c,'以元音字母开头']);
otherwise
disp([c,'以辅音字母开头']);
end
c=input('请输入一个单词:','s');
if findstr(c(1),'AEIOUaeiou')>0 % 利用findstr函数返回单词首字母在后面长字符串中的位置
disp([c,'以元音字母开头']);
else
disp([c,'以辅音字母开头']);
end
% 例2 PM2.5是指大气中直径小于或等于2.5微米的可入肺颗粒物,是衡量空气质量的重要指标。假定空气质量等级以PM2.5数值划分为6级。
%{
A = [1 2 3;4 5 6]; % 建立一个数值阵列 A
C = num2cell(A) % 将数值阵列 A 转成异质阵列 C
C =
[1] [2] [3]
[4] [5] [6]
%}
g = input('请输入PM2.5的值:')
switch fix(g)
case num2cell(0:34)
disp('空气质量优')
case num2cell(35:74)
disp('空气质量良好');
case num2cell(75:114)
disp('空气质量轻度污染');
case num2cell(115:149)
disp('空气质量中度污染');
case num2cell(150:249)
disp('空气质量重度污染');
otherwise
disp('空气质量严重污染');
end
%% for循环语句
% for语句针对向量的每一个元素执行一次循环体。
% 退出循环之后,循环变量的值就是向量中最后的元素值。
% 当向量为空时,循环体一次也不执行。
% 利用无穷级数展开式求pi的近似值。
y = 0;
g = -1;
n = input('n = ');
for i = 1:1:n
g = -g;
y = y+g*1/(2*i-1);
end
pai = 4*y
% 用向量求和的方法求解
n = input('n = ');
x = 1:2:(2*n-1); % 构建向量x
y = (-1).^(2:n)./x; % 用点乘和点除的方法令向量各项相乘
pai = sum(y)/4
% 用定积分的方法确定pi的近似值。(用四分之一圆求定积分,确定其面积)
a = 0;
b = 1; % 1/4单位圆是0到1
n = input('n = '); % 将区间分为n份
h = (b-a)/n; % 计算每个区间的宽度
x = a:h:b;
f = sqrt(1-x.*x);
s = [];
for k = 1:n
s1 = (f(k)+f(k+1))*h/2; % 将f中第k个值和第k+1个值相加,相当于上底加下底
s = [s,s1]; % s1中的值导入矩阵s中
end
pai = 4*sum(s)
% 蒙特卡洛求pi的值(落点的概率)
gen = 1000;
count = 0;
r=1;
theta=0:pi/100:2*pi;
x=r*cos(theta);
y=r*sin(theta);
plot(x,y)
xlim([0,1])
ylim([0,1])
title('蒙特卡洛方法求pi值')
hold on
for i = 1:gen
a = rand;
b = rand;
plot(a,b,'.')
pause(0.00001)
if a^2 + b^2 < 1
count = count + 1;
end
end
p = count/gen*4;
disp(['pi的估计值为',num2str(p)])
i =0;
for k=[1,2,3,4] %是个行向量有四列执行四次
i = i+1;
end
i
i =0;
for k=[1,2;3,4] %是个矩阵有两列执行两次
i = i+1;
end
i
%% while循环语句
% while语句多用于循环次数不确定的情况,而对于循环次数确定的情况,使用for语句更方便。
% 例1从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和。
musum=0;
n=0;
x=input('Enter a number (end in 0):');
while x~=0
msum=msum+x;
n=n+1;
x=input('Enter a number (end in 0):');
end
if n>0
musum
mean=msum/n
end
% 利用筛选法求某范围内的全部素数
%{
1、先将1划掉(因为1不是素数也不是合数)。
2、用2去乘它后面的各个数,把能被2整除的数划掉,即把2的倍数划掉。
3、用3去除它后面的各数,把3的倍数划掉。
4、分别用5…各数作为除数去除这些数以后的各数。
%}
m = input('m=');
p = 1:m;
p(1) = 0; % 表示1不是素数
for i = 2:sqrt(m)
for j = 2*i:i:m
p(j) = 0;
end
end
n = find(p ~=0);
p(n)
%% break和continue语句
% break语句用来跳出循环体,结束整个循环。
% 求[100,200]之间第一个能被21整除的整数。
for n=100:200
if rem(n,21)~=O
continue
end
n
break
end
% continue语句用来结束本次循环,接着进行下一次是否执行循环的判断。
%% 执行函数文件fcircle中的函数
[s,p]=fcircle(10)
% 匿名函数
f = @(x,y)x^2+y^2
f(3,4)
%% 执行函数文件fact中的递归函数
n = input('Please input n = ');
s = fact(n);
disp(s)
%% 函数参数的可调性
fout = test(2)
fout = test(2,3,2)
%% 全局变量
global A B
A =1;
B = 2;
s = wad(1,2)