数学软件提取数组下标.docx

上传人:b****9 文档编号:25245910 上传时间:2023-06-06 格式:DOCX 页数:18 大小:27.33KB
下载 相关 举报
数学软件提取数组下标.docx_第1页
第1页 / 共18页
数学软件提取数组下标.docx_第2页
第2页 / 共18页
数学软件提取数组下标.docx_第3页
第3页 / 共18页
数学软件提取数组下标.docx_第4页
第4页 / 共18页
数学软件提取数组下标.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数学软件提取数组下标.docx

《数学软件提取数组下标.docx》由会员分享,可在线阅读,更多相关《数学软件提取数组下标.docx(18页珍藏版)》请在冰豆网上搜索。

数学软件提取数组下标.docx

数学软件提取数组下标

提取数组下标:

已知p是一维数组x的元素,做索引[a,b]=sort(x),a是数组x的升序排列,b为对应下标,

语句d=b(p==a)可获得数p在x中的下标d。

(若是多维的话此方法显示的只有第几列)

已知p是二维数组x的元素,取出数组的阶[m,n]=size(x),

化为一维数组g=x(:

),

[a,b]=sort(g),d=b(p==a),

取p在x中的下标mm,nn

ifrem(d,m)==0mm=m,elsemm=rem(d,m);end;

nn=ceil(d/m);[mm,nn]

以上方式要求数组中没有相同的元素,即没有相等的数!

若有相等的,则取出排列顺序(列优先序)靠前者。

思考还有更简洁的方式获得下标吗?

取整函数:

round(x)取最靠近x的整数

fix(x)向0方向取整

floor(x)向负无穷方向取整

ceil(x)向正无穷方向取整

a=[20.04425.080132.686211.51211.018617.8314

19.86625.209530.455110.82670.950916.3498

20.63445.348330.092810.55950.938917.1787

20.45135.466231.386710.70641.001017.3970

21.30145.576431.199910.81070.975316.9232

21.72555.735132.398411.14690.999817.6053

21.77795.934232.786111.37641.062817.6373

21.96236.090032.702111.60701.062817.1927

22.30386.144533.266411.74471.149517.4934

22.64676.264233.375311.90201.203717.3428

23.26546.342334.397212.27191.251317.8713

24.19166.110036.280013.27441.316218.3418

23.67086.813035.896411.29281.324518.2154

23.53776.825035.012311.12051.342518.1564

22.92436.948134.125610.85151.385117.6598

23.53687.235134.012510.56091.475217.1229

23.71647.523933.895911.92991.522917.5946

24.09027.808635.259312.29561.540917.9467

25.30898.082936.335712.86161.805118.0819

25.37488.312736.035612.68131.672617.8218

25.63018.435537.544113.05381.718119.1278

26.28088.581438.262713.15851.788020.5607

26.67668.680838.605613.03151.690820.2338

28.41007.660041.395914.76661.570220.7094]

matlab常用到的永久变量。

 

ans:

计算结果的默认变量名。

 

ij:

基本虚数单位。

 

eps:

系统的浮点(F10a9Bg个oht):

 

inf:

 无限大,例1/0 

nanNaN:

非数值(N航anmnb谢) 

pi:

圆周率n(n=3.1415926..)。

 

realmax:

系统所能表示的最大数值。

 

realmin:

 系统所能表示的最小数值, 

nargin:

 函数的输入参数个数:

 

nargout:

函数的输出多数个数 

①matlab的所有运算都定义在复数城上。

对于方根问题运算只返回处于第一象限的解。

 

⑦matlab分别用左斜/和右\来表示“左除和“右除”运算。

对于标量运算而言,这两者的作用没有区别:

但对于矩阵运算来说,二者将产生不同的结果。

 

多项式的表示方法和运算 

p(x)=x^3-3x-5 可以表示为p=[10 –35],求x=5时的值用plotval(p,5) 

也可以求向量:

a=[345],plotval(p,a) 

函数roots求多项式的根 roots(p) 

p=[10-35]; 

r=roots(p) 

由根重组多项式poly(根) 

q=poly(r) 

real(q) 有时会产生虚根,这时用real抽取实根即可 

conv(a,b)函数 多项式乘法(执行两个数组的卷积) 

a=[1234]; 

b=[14916]; 

c=conv(a,b) 

多项式的加减法,低阶的多项式必须用首零填补,使其与高阶多项式有同样的阶次 

多项式除法 [q,r]=deconv(c,b) 表示b/cq为商多项式,r为余数 

多项式的导数 polyder(f) 

f=[245621]; 

s=polyder(f) 

多项式的曲线拟合 

x=[12345]; 

y=[5.640150250498.9]; 

p=polyfit(x,y,n) 数据的n次多项式拟合 poly:

矩阵的特征多项式、根集对应的多项式 

x2=1:

0.1:

5;n取1时,即为最小二乘法 

y2=polyval(p,x2); 计算多项式的值 (polyvalm计算矩阵多项式) 

plot(x,y,'*',x2,y2);gridon 

最小二乘法 

x=[12345]; 

y=[5.640150250498.9]; 

plot(x,y,’*’),lsline 

多项式插值 (p158) 

YI=interp1(x,y,XI,’method’) 一维插值 

(XI为插值点的自变量坐标向量,可以为数组或单个数。

 

method为选择插值算法的方法,包括:

 

linear(线性插值) 

cubic(立方插值) 

spline(三次样条插值) 

nearst(最近临插值) 

例如:

人口预测 

year=1900:

10:

1900; 

number=[7891105 ….每十年的人口数]; 

x=1900:

1:

2000; 

y=interp1(year,number,x,’spline’); 

plot(year,numeber,’*’,x,y);gridon 

一维博里叶变换插值使用函数interpft实现,计算含有周期函数值的矢量的傅里叶变换 

然后使用更多的点进行傅里叶变换的逆变换,函数的使用格式如下:

y=interpft(x,n) 其中x是含有周期函数值的矢量,并为等距的点,n为返同等间距点的个数。

 

求解一元函数的最小值 

y=fminbnd('humps',0.3,1)humps为一内置函数 

求解多元函数的最小值 

函数fminserch用于求多元函数的最小值。

它可以指定一个开始的矢量,并非指定一个区间。

此函数返回一个矢量为此多元函数局部最小函数值对应的自变量 

纹理成图功能 

由warp函数的纹理成图功能实现平面图像在空间三维曲面上的显示。

 

将文件名为flowers.tif的图像分别投影到圆柱形和球星表面上 

i=imread('flowers.tif'); 

[x,y,z]=cylinder; 

subplot(1,2,1),warp(x,y,z,i); 

[x,y,z]=sphere(50); 

subplot(1,2,2),warp(x,y,z,i); 

warp(x,y,z,i); 

求函数的零点 

求函数humps在[1,2]区间上的零点 fzero(‘humps’,[1,2]); 

也可以给一个初始值 fzero(‘humps’,0.9); 

对于多项式可直接由roots求其根 roots(‘4*x^3+……’); 

也可以用solve 

c=sym('c','real'); 

x=sym('x','real'); 

s=solve(x^3-x+c) 

函数定积分 

q=quadl(‘humps’,0,1) 求humps函数在01区间上的定积分,也可以用quad语句 

二重积分 首先计算内积分,然后借助内积分的中间结果再求出二重积分的值,类似于积分中的分步积分法。

 

Result=dblquad(‘integrnd’,xin,xmax.,ymin,ymax)integrnd为被积函数的名称字符串 

符号积分运算int(f) 

最精确的是符号积分法 

计算s=∫12[∫01xydx]dy 

symsxy 中间为空格,不能为逗号 

s=int(int(‘x^y’,’x’,0,1),’y’,1,2) 引号可省略 

vpa(s) 显示s的值 

内积分限为函数的二重积分 

I=∫14[∫√y2(x2+y2)dx]dy 

符号法I=vpa(int(int(‘x^2+y^2’,’x’,sqrt(y),2),’y’,1,4) 

微分运算(diff) 

微分是描述一个函数在一点处的斜率,是函数的微观性质、因此积分对函数的形状在小范围内的改变不敏感,而微分很敏感。

 —个函数的小的变化,容易产生相邻点的斜率的大的改变。

由干微分这个固有的困难.所以尽可能避免数值微分.特别是对实验获得的数据进行微分。

在这种情况,最好用最小二乘曲线拟合这种数据,然后对所得到的多项式进行微分;或用另一种方法对点数据进行三次样条拟合,然后寻找样条微分,但是,有时微分运算是不能避免的,在MATLAB中.用函数diff汁算一个矢量或者矩阵的微分(也可以理解为差分)。

 

a=[12333789]; 

b=diff(a) 一次微分 

bb=diff(a,2) 二次微分 

实际上diff(a)=[a

(2)-a

(1),a(3)-a

(2),……,a(n)-a(n-1)] 

对于求矩阵的微分,即为求各列矢量的微分,从矢量的微分值可以判断矢量的单调性、是否等间距以及是否有重复的元素。

 

符号微分运算(diff) 

symsxta 

f=cos(a*x) 

df=diff(f) 由findsym的规则,隐式的指定对x进行微分 

dfa=diff(f,'a') 指定对变量a进行微分 

dfa=diff(f,'a',3) 三次微分 

diff函数不仅作用在标量上,还可以在矩阵上,运算规则就是按矩阵的元素分别进行微分 

symsax 

A=[cos(a*x),sin(a*x),-sin(a*x),cos(a*x)]; 

dA=diff(A) 

微分方程dsolve 

在matlab中,符号表达式中包含字母D用来表示微分运算,D2,D3分别对应第二,第三阶导数,D2y表示d2y/dt2 把t缺省了 

y=dsolve(‘Dy=f(y)’) 单个方程,单个输出 

[u,v]=dsolve(‘Du=f(u,v)’,’Dv=g(u,v)’)2个方程,2个输出 

s=dsolve(‘Dx=f(x,y,z)’,’Dy=g(x,y,z)’,’Dz=k(x,y,z)’) 

s.xs.ys.z3个方程,架构数组 

dsolve('Dx=-a*x') 结果:

C1*exp(-a*t) 没给定初值,所以结果中含参变量 

x=dsolve('Dx=-a*x','x(0)=1','s') 结果exp(-a*s) 给定了初值,独立变量设为s 

计算多元函数的梯度 

fx=gradient(f)f是一个矢量返回f的一维数值梯度,fx对应于x方向的微分。

 

[x,y]=meshgrid(-2:

.2:

2,-2:

.2:

2); 

z=x.*exp(-x.^2-y.^2); 

[px,py]=gradient(z,.2,.2); 

contour(z),holdon 画等值线 

quiver(px,py) 

matlab字符串运算 

利用sym命令创建表达式 

f=sym(‘cos(x)+sin(x)’)或 symsx,f=cos(x)+sin(x) 

diff(f) 求其导数 

(也可直接用命令f=diff(‘cos(x)+cos(y)’) 

当字符表达式中含有多于一个的变量时,只有—个变量是独立变量。

如果不告诉matlab哪一个变量是独立变量,则可以通过findsym命令询问 

利用findsym命令查询独立变量 

f=sym('sin(a*x)+b') 

findsym(f,1) 给出独立变量(一个变量,如果为2则给出2个变量) 

findsym(f) 给出所有变量 

符号表达式的化简和替换 

collect函数 collect(f,v)表示将f表示为关于符号变量v的多项式形式,即关于v合并同类项,v缺省,则用findsym确定的缺省变量 

symsxy 

f=x^2*y+y*x-x^2-2*x+1 

collect(f) 得到(-1+y)*x^2+(y-2)*x+1 

collect(f,y) 得到(x+x^2)*y+1-x^2-2*x 

expand函数 expand(f)将f展开,写成和的形式 

symsx 

expand((x-1)^3) 得到x^3-3*x^2+3*x-1 

horner函数 horner(f)将f写成镶嵌套形式 

symsx 

horner(x^3-6*x^2) 得到(-6+x)*x^2 

factor函数 factor(f)将f转换成低阶有理多项式的乘积 

symsx 

f=x^3-6*x^2+11*x-6 

factor(f) 得到 (x-1)*(x-2)*(x-3) 

simplify(f)函数 综合化简 

simple(f) 函数的最简形式 

symsx 

f=2*sin(x^2)+cos(3*x) 

simple(f) 如果不想看到中间过程,可z=simple(f) 有时使用两次simple命令可以得到最简式 

如果想知道哪个简化命令得到最后结果,可以加一个参数how 

[z,how]=simple(f) 

符号表达式的替换 

subs(f,new,old) 

f='a*x^2+b*x+c' 

subs(f,'t','x') 得到a*(t)^2+b*(t)+csubs是一个符号函数,返回一个符号变量 

subexpr函数 有时matlab返回的符号表达式难以理解,用subexpr函数,可以将表达式中重复出现的子式用一个符号表示,从而简化表达形式 

c=sym('c','real'); 

x=sym('x','real'); 

s=solve(x^3-x+c) 

a=subexpr(s) 得到sigma=-108*c+12*(-12+81*c^2)^(1/2) 

a= 

[1/6*sigma^(1/3)+2/sigma^(1/3)] 

[-1/12*sigma^(1/3)-1/sigma^(1/3)+1/2*i*3^(1/2)*(1/6*sigma^(1/3)-2/sigma^(1/3))] 

[-1/12*sigma^(1/3)-1/sigma^(1/3)-1/2*i*3^(1/2)*(1/6*sigma^(1/3)-2/sigma^(1/3))] 

pretty函数有时也能起到同样的作用。

 

Pretty(f) 显示函数的习惯书写形式 

线性方程组的求解 

求解线性方程组,用反斜杠\ 

a=hilb(3) 

b=[123]' 

a\b 

矩阵的特征值和特征向量 

用eig(v,d)函数,[v,d]=eig(A); 其中d将返回特征值,v返回相应的特征向量,缺省第二个参数将只返回特征值 

symsabcreal 

A=[abc;bca;cab]; 

[v,d]=eig(A); 

为了观察更清楚,使用以前学过的替换函数,这里不用默认的sigma,而改用M,显式的代替繁琐的表达子式 

vv=subexpr(v); 

vs=subs(vv,'m','sigma') 运行结果为 

vs= 

[1,1,1] 

[-(c+(m)-a)/(c-b),-(c-(m)-a)/(c-b),1] 

[-(a-(m)-b)/(c-b),-(a+(m)-b)/(c-b),1] 

再用m替换d中的表达子式 

dd=subexpr(d); 

ds=subs(dd,’m’,’sigma’) 

运行结果为ds= 

[(m),0,0] 

[0,-(m),0] 

[0,0,c+a+b] 

note 求特征值也可用以下命令 

f=poly(A)poly函数 用来求A的特征多项式 

d=solve(f)solve(f)函数用来求多项式的解 

svd()函数 求矩阵的奇异值分解,将矩阵分解为两个正交矩阵和对角矩阵的乘积 

a=sym(hilb

(2)) 

[u,s,v]=svd(a) 

代数方程和方程组 

代数方程的求解可用solve(f)命令,如果f不含=,matlab将给表达式置零。

方程的未知量在默认的情况下由findsym决定或显式指出 

symsabcx 

solve(a*x^2+b*x+c) 以x为默认变量 

solve(a*x^2+b*x+c,a) 指定对a为变量 

求含有等号的方程的解(一定要加单引号) 

f=solve(‘cos(x)=sin(x)’) 

x=solve('exp(x)=tan(x)') 如果不能求得符号解,就计算可变精度解。

 

求解方程组与单方程类似 

解一个三元一次方程 

v=solve('a*u^2+v^2','u-v=1','a^2-5*a+6') 

结果为v= 

a:

[4x1sym]u:

[4x1sym]v:

[4x1sym] 

一些常用的符号运算 

极限运算limit 

limit(f) 求x到0的极限 

limit(f,x,a)或limit(f,a) 求x到a的极限 

limit(f,a,’left’)limit(f,a,’right’) 求x到a的左极限和右极限 

limit(f,inf) 求x趋于无穷的极限 

符号求和symsum(s) 

symsum(s) 以默认的findsym决定的变量求和 

symsum(s,v) 以s中指定的变量v求和 

symsum(s,a,b)symsum(s,v,a,b) 从a到b的有限项求和 

symskn 

symsum(k) 从0到k求和 

symsum(k,0,n-1) 从0到n-1求和 

symsum(1/k^2,1,inf) 无限项求和 

泰勒级数taylor(f) 

taylor(f)表示求f的5阶talor展开,可以增加参数指定展开的阶数(默认式5),也可以对于多元函数指定展开的变量,还可以指定在哪个点展开 

symsxt 

taylor(exp(-x)) 

taylor(log(x),6,1) 在1点的6阶taylor展开 

taylor(x^t,3,t) 对t的3阶taylor展开 

积分变换 

fourier变换和逆变换fourier(f) 

fourier分析可以将信号转换为不同频率的正弦曲线。

可对离散数据进行分析,也可对连续时间系统进行分析,特别在信号和图形处理领域。

离散变换(DFT)作用于有限数据的采集,最有效的是快速fourier变换(FFT) 

F=fourier(f) 独立变量x,返回关于参数w的函数 

F=fourier(f,v) 返回函数F关于符号对象v的函数 

F=fourier(f,u,v) 对关于u的函数f进行变换,而不是缺省的w,返回函数F是关于v的函数 

symstvwx 

fourier(1/t) 

fourier(exp(-t)*sym('Heaviside(t)'),v) 

fourier(diff(sym('F(x)')),x,w) 

Fourier逆变换 

f=ifourier(F) 缺省独立变量w,返回关于x的函数对w进行积分 

f=ifourier(F,v) 返回函数f是关于符号对象v的函数,而不是缺省的x 

f=ifourier(F,u,v) 是关于u的函数f进行变换,而不是缺省的x,返回函数f是关于v的函数 

Laplace变换和逆变换laplace(f) 

应用于连续系统(微分方程)中,可以用来求解微分方程的初值问题 

laplace(F) 缺省独立变量t,缺省返回关于s的函数L 

laplace(F,t) 返回关于t的函数L,而不是缺省的s 

laplace(F,w,z) 对函数F的自变量w积分,返回关于z的函数L 

逆变换 

F=ilaplace(L) 缺省独立变量s,返回关于t的函数F 

F=ilaplace(L,y) 返回关于y的函数F,而不是缺省的t 

F=ilaplace(L,y,x) 对函数L的自变量y积分,返回关于x的函数F 

Z-变换和逆变换ztrans(f) 标量符号f的Z-变换 

F=ztrans(f) 缺省独立变量n,返回关于z的函数 

F=ztrans(f,w) 返回关于符号变量w的函数F,而不是缺省的z 

F=ztrans(f,k,w) 关于k的符号变量作Z-变换返回关于符号变量w的函数 

逆变换iztrans(F) 

f=iztrans(F) 或(F,k)或 (F,w,k) 

符号绘图函数 

符号函数简易绘图函数ezplot(f) 

f可以包含单个符号变量x的字符串或表达式,默认画图区间(-2pi,2pi),如果f包含x和y,画出的图像是f(x,y)=0的图像,缺省区间是-2pi

 

Ezplot(f,xmin,xmax)或ezplot(f,[xmin,xmax])绘制在xmin

symsxt 

ezplot('t*cos(t)','t*sin(t)',[0,4*pi]) 

绘制符号图像函数fplot(fun,lims,tol,’linespec’,n) 

其中lims=[xmin,xmax]或[xmin,xmax,ymin,ymax]tol为指定相对误差,默认0.001 ‘linespec’指定绘图的线型 n指定最少以n+1个点绘图 

[x,y]=fplot(fun,lims,…) 只返回用来绘图的点,并不绘图,可以自己调用plot(x,y)来绘制图形。

 

symsx 

subplot(2,2,1),fplot('humps',[0,1]) 

f='abs(exp(x*(0:

9))*ones(10,1))' 

subplot(2,2,2),fplot(f,[0,2*pi]) 

subplot(2,2,3),fplot('sin

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 演讲主持

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1