浅谈matlab

 最近一段时间大概学习了一下matlab,在这里做一下总结,有不对的地方真心希望大佬指教,本人小白一枚。

  matlab作为一款集计算,统计,代数,矩阵,方程,各种算法,还有强大的绘图功能于一身,确实相比其他软件要好用,大多数情况下只要调用函数便可实现我们想得到的结果,matlab对已有的算法和功能的使用确实比较强,但是对于比较高级和创新型的算法自我感觉还是不到java或者是c++。

一.强大的计算功能

1.线性方程组的一个解

1>Ax=b,x=pinv(A)*b

若线性方程组有一个解,则matlab给出该解;若线性方程组无解,则matlab给出最小二乘解,即|Ax-b|^2最小;若线性方程组有许多解,则给出最小范解;

2>若给定条件xa=b,则x=solve(x*a==b),但是自我感觉还是pinv()函数好用;

2.线性方程组的通解

[R,lie]=rref(a),返回值R是矩阵a的行最简式,lie是a的列向量组的最大无关组的标号,a是线性方程组的未知量的系数和和右端数值的大小组成的矩阵;

3.非线性方程的零点

1>a=roots(p),p是该非线性多项式的次数前面的系数,如x^6-5x^5+3x^2+7=0,则p=[1,-5,0,0,3,0,7],a为这个多项式所得到的全部解;

2>fzero 可以求出给定初值附近的一个数值解,a=fzero(x,y),其中x是该多项式,y是给定的初值,a是所求出的数值解;

4.非线性方程组的符号解

s=solve([X1,X2,X3......],var),[X1,X2,X3......]为所给的方程组,var为符号变量,s为求得的符号解;

5.非线性方程组的数值解

s=fsolve(fun,x0,var),其中fun是定义方程的函数,x0是初值,var是优化参数的设置;

6.矛盾方程组的最小二乘解(何谓矛盾方程解,通俗点说,就是方程的个数大于未知量的数目)

1>用刚才提到的pinv函数可以求得,调用的形式也相同;

2>x=lsqnonlin(fun,x0),其中fun是方程组匿名函数的返回值,x0是初始值;

7.常微分方程组的符号解

a=dsolve(fun,x0),fun为符号微分方程,x0是初值或者边界,在matlab中求导数的函数是diff函数diff(x,2)指x的二阶导数

8.常微分方程组的数值解

[t,y]=obe45(fun,qujian,y0],其中fun是M函数或者是匿名函数定义的f(t,y),qujian指一个区间[to,tfinal],to必须是初始条件中自变量的取值,tfinal可大可小,y0是初值,t是matlab自动离散化的[to,tfinal]上的点,y是点t所对应的值

9.高阶微分方程组的数值解

在matlab中没有求解高阶微分方程特定的函数,我们需要把它化为一阶,然后再调用函数,其中主要用到diff函数

10.矩阵运算

在这里,我就不啰嗦特殊矩阵的命名函数,说一下矩阵中元素或者块的常用操作

1>a([i1:i2],:)=[],删除a的i1~i2行;

2>a=(:,[i2:-1:i1])以逆序提出矩阵i1~i2列

3>diag(a,k)抽取矩阵 a的第 k 条对角线元素向量(主对角线编号为 0,上方的 编号依次加 1,下方的编号依次减 1); 若 a为向量,生成一个以 a 为第 k 对角线元素的方阵

4>tril(a,k)抽取矩阵 a的第 k 条对角线下面的部分

5>triu(a,k)抽取矩阵 a 的第 k 条对角线下面的部分 

6>flipud(a)矩阵a进行上下翻转

7>fliplr(a)矩阵a进行左右翻转        8>inv(a)求矩阵a的逆       9>det(a)矩阵a的行向量       10>rank(a)矩阵a的秩

11>eig(a)求矩阵a的特征值及特征向量      12>var(a)求矩阵的列方差(std(a)---标准差)   13>cov(a)矩阵列的协方差矩阵

总结:1>在方程求解的过程中,matlab不用再编写程序,直接按格式调用函数即可;

2>为什么会有符号解和数值解两种情况呢?

其实微分方程等不一定有精确解,也就是符号解,或者叫解析解,所以要把它转化成数值解来输出,通俗点说,数值解是在方程组在无解的情况下的一种补救措施;

3>在求解过程中,我们一定要把方程和矩阵联系起来,很多时候,它们似乎是一一对应的关系,例如可以通过矩阵和增广矩阵的秩来判断线性方程组是否有解,把系数组成的矩阵化成最简矩阵,可以很容易求得其解;

4>遇到复杂的方程组,我们可以通过转化组成为以上几种方程形式,然后再调用相应的函数。

二.多维的绘图功能

1.简单的plot(x,y,'color-style-marker')函数

2.一个窗口分成多个子窗口subplot(m,n,y)分成m*n个窗口,并且将该图化在第y个子窗口中

3.fplot(fun,limit,tol,miaoshu),fun指函数,limit限制了范围,tol指相对误差,描述是指对线条的修饰

4.三维绘图命令

plot3(x,y,z)分别指横坐标,纵坐标,竖坐标

mesh(x,y,z)画网格曲面,x是m维的向量,y是n维的向量,z是m*n的矩阵

surf(x,y,z)画三维表面图

ezsurf(fun,qujian)在指定的区间内画函数f

ezmesh(fun,qujian)在指定的区域内画出二元符号函数网格图f(x,y)

5.四维空间绘图

cplxgrid(m)构建一个极坐标的复数数据网格,产生一个(m+1)*(2*m+1)的极坐标下的复数数据网格,最大半径为1的圆

cplxmap对复变函数(四维)做图,其方法是三维空间坐标再加上颜色cplxmap(z,f(z)),它在作图时,以xy平面表示自变量所在的复平面,以z轴表示复变函数的实步,以颜色表示虚部

绘图的修饰功能:
坐标轴显示:axis('auto')将坐标轴设置返回默认状态;axis('off/on')不显示/显示坐标轴    axis('square')将坐标轴设置为正方形

axis('equal')将两个坐标轴刻度设置为相等

坐标轴范围:axis[x1,x2,y1,y2]

grid off/on(不)显示网格线

绘制叠加图形:hold (off)on(不)启动图形保持功能

增加图例:legend('s1','s2')       增加标注:text(x,y,'s')在二维图形指定位置(x,y)处增加标注s   

增加箭头:annotation('arrow',x,y)添加从点(x(1),y(1))到(x(2),y(2))的箭头

产生网格数据:meshgrid(t,s)(二维)(生成极坐标的网络数据)

三:高效处理统计学中概率问题

1.概率分布

  •  离散型随机分布:
  • 二项分布binopdf(k,n,p)n:实验总次数,p:每次所发生的概率,k:事件发生k次
  • 二项分布累计概率值:binocdf(k,n,p)n:实验总次数,p:每次所发生的概率,k:事件发生k次

  • 概率和累计概率差别:相当于发生一次和至少发生一次的差别

  • 泊松分布:poisspdf(k,o)k:事件发生次数,o是参数/条件:1>事件相互独立   2>事件概率相同     3>求事件发生x次的概率

  • 泊松分布累计概率值:poisscdf(k,o)k:事件发生次数,o是参数

  • 超几何分布:hygpdf(k,n,m,t)k:抽的次品数,n产品总数,m次品总数,t抽的次数(不放回抽取)

  • 超几何分布累计概率值:hygcdf(k,n,m,t)k:抽的次品数,n产品总数,m次品总数,t抽的次数

  • 连续型随机分布:

  • 均匀分布:unifpdf(x,a,b)表示(a,b)上均匀分布概率密度在x处的函数值

  • 指数分布:exppdf(x,o)参数为o的指数密度函数

  • 正态分布:normpdf(x,a,b)参数为a,b的正态分布概率密度函数

  • 分布函数是专用函数计算累计函数概率的函数值

  • 分布函数所调用的函数只是将上边的函数中的pdf改为cdf

2.数字特征

离散型:

1>数学期望:sum(x)-----x是向量,sum(x)是所有数的和/x是矩阵,sum(x)是各列元素之和,返回一个行向量

2>均值函数:mean(x)------x的不同形式导致的不同数值与sum相似

3>方差:由公式可得,方差的计算是dx=sum(x.^2*p)-(EX).^2

连续型:

1>数学期望,方差都可以根据数学期望来计算dx=e^2(x)-e(x^2)

但是matlab在统计工具箱中给了很多现成函数,只需要把随机分布函数中后边的pdf或者cdf改为stat

注明:该图像来自于百度

3.统计直方图

1>hist(z,n)直角坐标系下的统计图,n表示直方图的区间数

2>rose(z,n)极坐标下角度直方图,n是[0,2]范围内所分区域数,z为指定的弧度数据

4.参数估计

1>点估计

mean(x)----均值估计      median(x)-----中位数      var(x)-------方差          std(x)-------标准差            skewness-------偏差

注明:该图像来自于百度

5.假设检验

1>单个正态总体方差知道,对期望的假设检验-----z检验方法

x=ztest(X,a,b)X是样本,a是期望值,b是正态总体标准差----若x=0,则接受原假设,若x=1,则拒绝原假设

2>单个正态总体方差未知,对期望的假设检验-----t检验法

x=ttest(X,,m,n)X是样本,m是期望值,n是所代表的水平----若x=0,则接受原假设,若x=1,则拒绝原假设

3>两个正态总体均差值的检验-----t检验

[h,sig,ci]=ttext(x,y),sig为观察值的概率,ci为置信区间

注意:在matlab中还有很多与c++相同的地方,比如循环体,赋值语句,变量,常量,运算符.......我们可以通过类比来学习,达到事半功倍的效果。

有关与matlab中算法相关的知识点,比如求最短路的floyd算法,排队论中的poisson过程......,有时间再更新,今天有点肝不动了。。。。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值