matlab中的运算和操作是以数组为对象的,
数组又包括:数值数组、字符数组、元胞数组等。
数值数组:(1)n元数值向量(行向量与列向量)
(2)数值矩阵
(3)由数值矩阵构成的元胞数组
几个标点符号的作用:
逗号:用来分开数组中的行元素。(可用空格代替)
分号:用来将矩阵中的行分开。(可用回车键代替)
冒号:相当于文字中的省略号。
中括号:界定数组的首与尾。
一、数组的建立
1.直接输入法
matlab在创立数组时以逗号或空格表示分列,分号或回车表示分行。数组开头“[”、结尾“]”
行数组:如a=[1,2,3,8,-1]
列数组: b=[1;2;3;8;-1] 或a’
矩阵:A= [2,4,1;8:-2:4;2,4,6]
2.通过数组编辑器生成矩阵
步骤:先建立空矩阵a=[], 然后在工作空间(workspace)中点开a进入数 组编辑器,输入元素。
3.用函数创建数组
定步长生成法: x=a:t:b (t步长,省略是为1);
定数线性采样法: x=linspace(a,b,n),a与b是数组的第一个和最后一个元素,n是采样的总点数。
4.元胞数组的创建
元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵。
组成元胞数组的元素可以是任何一种数据类型的量,每一个元素也可以具有不同的尺寸,每一个元素的内容也可以完
全不同,元胞数组的元素叫做元胞
建立元胞数组:{ }
a={'matlab',20;ones(2,3),1:10}
二,数组的操作
A=A*X;
假如a是一个2*n的矩阵,即两行. b=a(1,:);
[c,pos]=sort(b);%pos为排序后的下标,c为第一行的排序结果;
a(2,:)=a(2,pos);%第二行按照第一行排序的下标对应
a(1,:)=c;%第一行结果重新赋给a 的第一行
以下适用于m*n的矩阵按第一行排序
[ b, pos ] = sort( a( 1, : ) );
a = a( :, pos );
10> nchoosek 来实现二项式系数或所有组合
语法:
C = nchoosek(n,k)
C = nchoosek(v,k)
描述:
C = nchoosek(n,k) 其中n和k是非负整数, 返回 n!/((n–k)! k!).一. matlab里和随机数有关的函数:
(1) rand:产生均值为0.5、幅度在0~1之间的伪随机数
(2) randn:产生均值为0、方差为1的高斯白噪声
(3) randperm(n):产生1到n的均匀分布随机序列
(4) normrnd(a,b,c,d):产生均值为a、方差为b大小为cXd的随机矩阵
rand
rand(n):生成0到1之间的n阶随机数方阵
rand(m,n):生成0到1之间的m×n的随机数矩阵
randn
randn()命令是产生白噪声的,白噪声应该是0均值,方差为1的一组数,同rand有randn(n),randn(m,n)
rand是0-1的均匀分布,randn是均值为0方差为1的正态分布
二. 功能:生成服从正态分布的随机数
R=normrnd(MU,SIGMA)
R=normrnd(MU,SIGMA,m)
R=normrnd(MU,SIGMA,m,n)
说明:
R=normrnd(MU,SIGMA):生成服从正态分布(MU参数代表均值,DELTA参数代表标准差)的随机数。输入的向量或矩阵MU和SIGMA必须形式相同,输出R也和它们形式相同。标量输入将被扩展成和其它输入具有 相同维数的矩阵。
R=norrmrnd(MU,SIGMA,m):生成服从正态分布(MU参数代表均值,DELTA参数代表标准差)的 随机数矩阵,矩阵的形式由m定义。m是一个1×2向量,其中的两个元素分别代表返回值R中行与列的维数。
R = normrnd(MU,SIGMA,m,n)
其中MU为均值,SIGMA为标准方差,m、n为矩阵大小;
三、求矩阵中所有元素的均值和方差
x是一个m*n的矩阵
均值:sum(x(:))/(m*n)
方差:var(x(:))
转置A’
行列式 det(A),
特征值eig(A),
秩rank(A),
逆inv(A),
迹trace(A),
f = @(x) x.^2 + 3*x + 5
x=[-2,1,2.5,3,5.2]
y1=f(x)
y1 =
3.00 9.00 18.75 23.00 47.64
例2: 定义函数g(x, y) = sin(x^2 + 3y),并计算g(3,2)
g=@(x,y)sin(x.^2+3*y)
y=g(3,2)
y = 0.6503
例3;(复合函数)
u = @(x, y) x ./ y
v = @(x, y)3*x - 2*y;
f = @(x, y)u(x, y) .^ 2 .* log(v(x, y))
x=[2,3,4,4]
y=[1,2,1,3]
z=f(x,y)
z =
5.5452 3.6212 36.8414 3.1854
function [m,y]=ff(x)
s=sum(x);
m=mod(s,5);
switch m
case 1
t=mod(x,2); y=sum(t.*x); //x是个向量,他会逐一把向量里数值进行运算
case 4
t=1-mod(x,2); y=sum(t.*x);
otherwise
y=max(x)-min(x);
end
x=[2,-4,3,6,7,11]
x=[8,3,5,-1,6,10,7,2,9,11];
s1=0; s2=0;
for m=x //这里是直接让临时变量m 等于 x数组里的每个元素的值 还可以 for i = 1:length(x) -> x(i)
switch mod(m,5)
case 1
s1=s1+m;
case 4
s2=s2+m;
end
end
s1,s2
代码2: 直接find找出数组符合题意的数字
x=[8,3,5,-1,6,10,7,2,9,11];
i1=find(mod(x,5)==1);
s1=sum(x(i1))
i2=find(mod(x,5)==4);
s2=sum(x(i2))
颜 色 |
线 型 |
点 型 |
|||
r |
红色 |
— |
实线 |
p |
五角星 |
k |
黑色 |
— — |
虚线 |
h |
六边形 |
b |
蓝色 |
—. |
点划线 |
x |
X形 |
g |
绿色 |
: |
点线 |
o |
圆圈 |
y |
黄色 |
|
|
* |
* |
m |
洋红 |
|
|
. |
点 |
w |
白色 |
|
|
d |
菱形 |
x=0:pi/20:2*pi;
y=sin(x).*cos(x).^2;
plot(x,y)
figure(2) //下面图形画在第二个图表的意思
plot(x,y,'r--p')
figure(3) //第三个图表的意思
plot(x,y,‘m:h’,‘linewidth’,2) %洋红,点线,六边形
subplot(3,1,1) //写在前面,代表操作表格
x=0:pi/20:2*pi;
y=sin(x).*cos(x).^2;
plot(x,y,'k-*')
subplot(3,1,2)
y=exp(x).*sin(x);
plot(x,y,'b--o')
subplot(3,1,3)
x1=cos(x);
y1=1/sqrt(2)*sin(x);
plot(x1,y1,'m:p')
axis equal //代表x 轴跟 y轴的刻度一样
x=0:pi/15:2*pi;
y1=sin(x);
y2=cos(x);
plot(x,y1,‘b:*,x,y2,‘r-.p’)
x=0:pi/15:2*pi;
y1=sin(x);
plot(x,y1, ‘b:*’)
hold on //下面的图形都跟上面图形一样
y2=cos(x);
plot(x,y2, ‘r:p’)
hold off
例2 : 在同一坐标窗口绘制曲线族
x=0:pi/40:2*pi;
y=sin(x).*cos(x);
plot(x,y,'linewidth',2.5)
colors=['rkgmy'];
hold on
for k=1:5
y=y.*cos(x);
plot(x,y,colors(k),'linewidth',2.5)
end
title('y=sin(x)*(cos(x))^n') %加标题
legend('n=1','n=2','n=3','n=4','n=5','n=6') %加图例
ezplot(@(x)cos(x).^3)
figure(2)
ezplot(@(x,y)(x.^4+y.^4-1),[-1.2,1.2,-1.2,1.2])
grid on
figure(3)
ezplot(@(t)(t-sin(t)),@(t)(1-cos(t)),[-2*pi,4*pi])
grid on //显示表格
fplot(fun,[a,b],S) ,数值a,b界定绘图区间,字符串S设定曲线颜色和线形 ,例子:fplot(@sin,[-pi/2,3*pi],'r--') ; y=inline('sin(x)');fplot(y,[-pi,pi]);
t=0:pi/50:2*pi;
x=sin(t).*cos(t).^2;
y=cos(t).*sin(t).^2;
z=t.*(2*pi-t);
plot3(x,y,z,‘r--*')
grid on
t=-5:0.5:5;
s=t;
[S,T]=meshgrid(s,t);
plot(S,T,'.')
求出网格数据点(S,T)处 (X,Y,Z)的值
clear,clc
x=-7.5:0.5:7.5;y=x; //已知x,y范围,所以把xy所在网格画出来
[X,Y]=meshgrid(x,y);
R=sqrt(X.^2+Y.^2+1);
Z=sin(R)./R;
mesh(X,Y,Z) //画出立体图形
figure(2)
surf(X,Y,Z)
clc,clear
x=-1:0.1:1; z=0:0.1:2;
[X,Z]=meshgrid(x,z); //这里x跟z是已知的,因为没有z,所以z就是负无穷到正无穷,这里截取一段,所以把xz画出来
Y=2*X.^2;
surf(X,Y,Z)
axis equal
figure(2)
surf(X,Y,Z)
view(-37.5+180,30)
axis equal
例3.10 画圆柱面 x^2 + y^2 =9的图形// 通过sinx cosx来表达等式
clear,clc
t=0:pi/50:2*pi;
s=0:0.1:4;
[T,S]=meshgrid(t,s);
x=3*cos(T);
y=3*sin(T);
z=S;
mesh(x,y,z)
x=-2:0.05:2;
y=x;
[X,Y]=meshgrid(x,y);
Z=sin(X.*Y);
mesh(X,Y,Z)
figure(2)
v=[-0.8,-0.5,-0.3,0.2,0.5,0.8];
[C,h]=contour(Z,v);
clabel(C,h)
figure(3)
[C,h]=contourf(Z,v);
clabel(C,h)
colormap cool %定义等高线的色图
colorbar %定义等高线的色标
效果图: