目录:
1.创建柱状图
2.基本统计
3.编写MATLAB函数
4.使用for循环编程
5.计算标准偏差和中位数
6.更多编程要点
1.创建柱状图
MATLAB 中我们要做的第一件事是输入这些数据然后从这些数据中产生柱状图。
首先我们输入分数(x)及每个分数的学生数(y):
x = [55,63,69,70,75,78,82,84,85,88,90,96,100];//配置x坐标(分数)
y = [1,2,1,6,4,7,2,1,3,2,4,2,1];//配置y坐标(人数)
bar(x,y)//输出垂直柱状图
bar(a,b),xlabel(‘分数’),ylabel(‘学生人数’), title(‘期中考代数成绩’)//配置垂直柱状图与轴,y,标题标签
barh(a,b),xlabel(‘学生人数’),ylabel(‘考试分数’)//配置水平柱状图与x,y坐标轴标签
扩展:
1.使用 bar3 或 bar3h 显示奇特的三维图象
bar3(a,b),xlabel(‘考试分数’),ylabel(‘学生人数’)//配置垂直三维柱状图与x,y坐标轴标签
MATLAB 中创建的带有多种数据集合的柱状图可以组合和堆合。要产生含有 x,y 数据的组合柱状图,我们写成 bar(x, y, ‘grouped’),由于“grouped”是默认选项,因此写成 bar(x,y)也完全一样。要产生堆合柱状图,我们写成 bar(x, y, ‘stacked’)。
x = [54.5,64.5,74.5,84.5,94.5];//配置中间坐标
garcia= [0; 3; 18; 13; 10];simpson= [3; 5; 20; 10; 5];smith= [1; 2; 15; 17; 8];配置人数
y = [garcia simpson smith];//配置各个部分人数
bar(x,y)//输出柱状图
2.基本统计
mean函数
a = [11,12,16,23,24,29];//1 x n矩阵计算
mean(a)//平均数计算ans =19.1667
A = [1 2 3; 4 4 2; 4 2 9];//3x3矩阵计算
mean(A)//平均数计算ans = 3.0000 2.6667 4.6667
sum函数
x = [55, 63,69,70,75,78,82,84,85,88,90,96,100];
y = [1,2,1,6,4,7,2,1,3,2,4,2,1];
N = sum(y)
s = sum(x.*y)//x 和 y 数组的向量乘积
s = 2847
N =36
平均数计算举例:
x = [55, 63,69,70,75,78,82,84,85,88,90,96,100];
y = [1,2,1,6,4,7,2,1,3,2,4,2,1];
N = sum(y) //N = 36
s = sum(x.*y) //s =2847
平均分数是:
ave = s/N //ave =79.0833
由获得78分概率计算引出下文
p = y(6)/N //p =0.1944
用概率计算平均数:
首先,我们创建概率的数组:
p = y/N
p = Columns 1 through 10
0.0278 0.0556 0.0278 0.1667 0.1111 0.1944 0.0556 0.0278 0.0833 0.0556
Columns 11 through 13
0.1111 0.0556 0.0278
然后平均值就可以用下面语句计算得到:
ave = sum(x.*p) //ave =79.0833
3.编写MATLAB函数
- 点击文件(File)下拉菜单
- 选择新建(New)→M 文件(M-File)
描述:它会打开文件编辑器,你可以在其中输入你的脚本文件。行号会在窗口左边提供。第一行中,我们要依次输入单词 function、用来返回数据的变量名、函数名和用来传给数据的参数。我们把函数称为 myaverage。这个函数带有两个参数:
(1) 含有数据的数组 x
(2) 包含每个数值个数的数组 N
流程:
(1)我们使用变量 ave 返回数据
function ave = myaverage(x, N)
(2)要正确地计算平均数,x 和 N 的元素个数必须相同,我们使用 size 命令检查每个数组元素的个数,把结果储存到两个变量 sizex 和 sizeN
sizex = size(x);
sizeN = size(N);
变量 sizex 和 sizeN 实际上是一个带有两个元素的行向量。
sizex =1 4
(3)因此要通过它的值看看它们是否相等,我们必须检查 sizex(2)和 sizeN(2)。
法一:
就是使用 if 语句,看看 sizex 是否比 sizeN 大或者 sizeN 是否比 sizex 大。在 MATLAB 中我们使用“管”字符“|”来表示逻辑或(OR)。
if (sizex(2) > sizeN(2)) | (sizex(2) <sizeN(2))
法二:
简单地判断 sizex 和 sizeN 不相等。我们在等号“=”前面加上否定号“~”表示“不相等”
if sizex(2) ~= sizeN(2)
(4)如果两个数组大小不相等,我们就结束函数。如果相等,我们继续,然后计算平均数,这可以使用 if – else 语句做到。如果两个两数组的大小不相等,我们所要做的就是使用 disp命令在屏幕上打印出错误信息。
if sizex(2) ~= sizeN(2)
disp(‘错误:数据必须具有相同的维数。’)
(5)在 MATLAB 中,我们把 N 作为参数传递给 sum 命令即可求和。
else total = sum(N);
(6)计算平均数公式分子的值
s = x.*N;
(7)计算平均数,然后把它赋给声明过的变量 ave:
ave = sum(s)/total;
(8)end 语句用来结束 if - else 语句块。
end
整个函数看起来是:
function ave = myaverage(x,N)
sizex = size(x);
sizeN = size(N);
if sizex(2) ~= sizeN(2)
disp(‘错误:数据必须具有相同的维数。’)
else
total = sum(N);
s = x.*N;
ave = sum(s)/total;
end
(9)一旦函数写完,保存它以便在命令窗口中使用。MATLAB 会把.m 文件保存到工作文件夹。
(10)函数调用
age = [20, 25, 38, 43, 55];//
num = [2, 3, 4, 2, 3];//age的值与num值相等,否则报错
myaverage(age,num)
ans =37
4.使用for循环编程
(1)第一步是声明函数名称和获取传递进来的数组大小
function sumx = mysum(x)
(2)获取元素个数//%为matlab中注释的作用
num = size(x);
(3)初始化总和
sumx = 0;
(4)用 for 循环遍历列量中的每个元素一次
for i = 1:num(2)
sumx = sumx + x(i);
end
注意:写函数时,确保在每行语句后面加上分号“;”——除非你想把结果显示在屏幕上。
5.计算标准偏差和中位数
数据举例:
2 个雇员的年龄是 17
1 个雇员的年龄是 18
3 个雇员的年龄是 21
1 个雇员的年龄是 24
1 个雇员的年龄是 26
4 个雇员的年龄是 28
2 个雇员的年龄是 31
1 个雇员的年龄是 33
2 个雇员的年龄是 34
3 个雇员的年龄是 37
1 个雇员的年龄是 39
2 个雇员的年龄是 40
3 个雇员的年龄是 43
(1)创建一个绝对频数数据数组,这一次我们会有每个年龄的入口,所以我们把所给年龄没有雇员的地方设为 0。我们把绝对频数称为 f_abs
f_abs = [2, 1, 0, 0, 3, 0, 0, 1, 0, 1, 0, 4, 0, 0, 2, 0, 1, 2, 0, 0, 3, 0, 1, 2, 0, 0, 3];
(2)由于我们是以一岁一岁度量的,我们把 bin width 设为 1
binwidth = 1;
(3)创建一个数组表示 17 到 43 之间的年龄,binwidth 是 1
bins = [17:binwidth:43];
(4)我们收集未加工的数据,使用 for 循环遍历所有数据
raw = [];
for i = 1:length(f_abs)
if f_abs(i) > 0
new = bins(i)*ones(1,f_abs(i));
else new = [];
end
raw =[raw,new];
end
(5)总结:这个循环所做的就是创建一个数组,按频率重复每个元素
raw =
Columns 1 through 18
17 17 18 21 21 21 24 26 28 28 28 28 31 31 33 34 34 37
Columns 19 through 26
37 37 39 40 40 43 43 43
雇员年龄的平均数是:
ave = mean(raw)
ave = 30.7308
雇员年龄的中位数是:
md = median(raw)
md = 31
雇员年龄的标准偏差是:
sigma = std(raw)
sigma = 8.3836
我们把数据按照频数比例绘制成柱状图图象。第一步是计算数据的“面积”:
area = binwidth*sum(f_abs);
计算比例:
scaled_data = f_abs/area;
产生图象:
bar(bins,scaled_data),xlabel(‘年龄’),ylabel(‘频数比例’)
温馨提示:
当数据符合高斯分布时,标准偏差就可以用来描述数据,确定落在某个数据上的概率。我们可以把最后的数据看成是符合的这种情况的。标准偏差用 σ 表示,平均数用 μ 表示,那么曲线落在下列范围:
μ - σ ≤ x ≤ μ + σ 、 μ - 2 σ ≤ x ≤ μ + 2 σ和μ - 3 σ ≤ x ≤ μ + 3 σ 、的百分率分别是 68%、96%和 99.7%。
6.更多编程要点
input函数
描述:当执行到该语句时,MATLAB 在命令窗口打印出该字符串,等待用户的输入数据。当用户敲回车键后,用户所输入的数据将被正确地保存到变量中。
format bank
rate = 10;
sqft = input(‘请输入房子的总平方数:’)//输入1740
sqft = 1740.00
price = rate*sqft
price = 17400.00
while语句
%询问用户有多少个数值要求和
n = input(‘输入求和的个数:’)
%初始化一些变量
i = 1;
sum = 0;
%while循环
while i <= n;
sum = sum + 1/i;
i = i + 1;
end
注意:如果你不是程序员,你要记下的一条笔记是——确保在你的 while 循环块中对增量进行改变,本例中使用 i = i + 1 语句,否则 MATLAB 将会死循环
switch语句
可以使用 switch 语句把各等级的工资赋给 pay:
switch grade
case 1
pay = 40000
case 2,3
pay = 65000
case 4
pay = 85000
end