MATLAB数值计算
1 数据分析函数库
- 基本的数据分析
基本的数据处理功能按列进行(行也可以)。
函数 | 功能 |
---|---|
max( ) | 求各列最大值 |
min( ) | 求各列最小值 |
mean( ) | 求各列平均值 |
sum( ) | 求各列元素和 |
std( ) | 求各列标准差 |
标准差是指列中N个元素与该列平均值之差的平方和开方。
data=[49 99 100 63 63 55 56 89 96 60]';
a=max(data)
b=min(data)
m=mean(data)
s=sum(data)
c=std(data)
- 用于随机数据分析的函数
函数 | 功能 |
---|---|
rand(m,n) | 产生在0~1之间均匀分布的m行、n列随机数矩阵 |
randn(m,n) | 产生正态分布的m行、n列随机数矩阵,均值为0,标准差为1 |
y= 5*(randn(1,10)-.5)
plot(y)
- 用于相关分析的函数
函数 | 功能 |
---|---|
corrcoef(x,y) | 计算两个向量x,y的相关系数 |
cov(x,y) | 计算x,y的协方差矩阵 |
x= rand(1,10)
y= rand(1,10)
corrcoef(x,y)
2 多项式函数库
2.1 多项式的四则运算
- 多项式的表示
用各幂次前的系数向量表示,从高到低。零系数不能省去。
a(x)=a1xn+a2xn-1+…+anx+an+1
a=[a(1), a(2),…,a(n), a(n+1)]
a(x)=x3+2x2+1
b(x)=x2+2x+1
a=[1, 2, 0, 1]
b=[1, 2, 1]
- 多项式的运算
-
多项式相加:
a+b
,长度必须相同,短的在前面以“0”补齐 -
多项式相乘:
conv(a,b)
-
多项式相除:
[q,r]=deconv(a,b)
q:商式
r:余子式
注意:a是分子,b是分母,分母系数向量的第一位不能为零。
a(x)=2x3+4x2+6x+8
b(x)=3x2+6x+9
a=[2, 4, 6, 8]
b=[3, 6, 9]
c=a+[0, b]
d=conv(a,b)
[q,r]=deconv(d,a)
[q,r]=deconv(a,b)
2.2 多项式求导、求根和求值
函数 | 功能 |
---|---|
polyder(a) | 多项式求导 |
roots(a) | 多项式求根 |
poly(a) | 由根求多项式系数 |
polyval(a,xv) | 多项式求值,给多项式a中的自变量x赋予值xv |
a(x)=2x3+4x2+6x+8
a=[2, 4, 6, 8]
a1=polyder(a)
a2=roots(a)
a3=poly(a2)
a4=polyval(a,1)
2.3 多项式拟合
拟合:根据一组已知的数据找到其数学表达式。拟合方法:使方差最小,应用最小二乘法。
p=polyfit(x,y,n)
x,y是已知的N个数据点坐标向量,n是拟合的多项式次数,p是求出的多项式系数向量。
在11个点(x=0:0.1:1)上测得的数值为y=[0.447,1.978,3.28,6.16,7.01,7.32,7.66,
9.56,9.48,9.30,11.2],试用最小二乘法求拟合曲线。
x=0:0.1:1;
y=[0.447,1.978,3.28,6.16,7.01,7.32,7.66,9.56,9.48,9.30,11.2];
subplot(2,3,1),plot(x,y,'o','LineWidth',1)%%原始数据
a1=polyfit(x,y,1); %%线性拟合
xi=linspace(0,1);
yi1=polyval(a1,xi);
subplot(2,3,2),plot(x,y,'o',xi,yi1,'y','LineWidth',1)
a1=polyfit(x,y,2); %%二次拟合
xi=linspace(0,1);
yi1=polyval(a1,xi);
subplot(2,3,3),plot(x,y,'o',xi,yi1,'c','LineWidth',1)
a1=polyfit(x,y,3); %%三次拟合
xi=linspace(0,1);
yi1=polyval(a1,xi);
subplot(2,3,4),plot(x,y,'o',xi,yi1,'g','LineWidth',1)
a1=polyfit(x,y,9); %%九次拟合
xi=linspace(0,1);
yi1=polyval(a1,xi);
subplot(2,3,5),plot(x,y,'o',xi,yi1,'b','LineWidth',1)
a1=polyfit(x,y,10); %%十次拟合
xi=linspace(0,1);
yi1=polyval(a1,xi);
subplot(2,3,6),plot(x,y,'o',xi,yi1,'LineWidth',1)
%%linspace(X1, X2) generates a row vector of 100 linearly equally spaced points between X1 and X2.
3 非线性函数分析及函数的数值积分
- 非线性函数的分析
绘制函数曲线:fplot (‘函数名’ ,[初值,终值])
求函数极值:fmin (‘函数名’ ,初值,终值)
求函数零点:fzero(‘函数名’,初猜值)
- 函数的数值积分
定积分子程序:quad (‘函数名’ ,初值,终值)
例:绘制humps函数曲线(一个函数),求零点值及在1~2之间的定积分。
fplot(‘humps’,[0, 2]),grid
z=fzero(‘humps’,1)
s=quad(‘humps’,1,2)