在线时间 1084 小时 最后登录 2015-9-10 注册时间 2014-4-18 听众数 162 收听数 1 能力 10 分 体力 43976 点 威望 6 点 阅读权限 255 积分 15250 相册 0 日志 0 记录 1 帖子 3471 主题 2620 精华 1 分享 0 好友 513
升级 0%
TA的每日心情 开心 2015-3-12 15:35
签到天数: 207 天
[LV.7]常住居民III
群组 : 第六届国赛赛前冲刺培
群组 : 国赛讨论
群组 : 2014美赛讨论
群组 : 2014研究生数学建模竞
群组 : 数学中国试看培训视频
matlab在数学建模中的运用3
41.
Matlab 解惑之——多项式运算 (2011-07-21 16:31:54)转载▼
标签: matlab 杂谈 分类: 算法
% matlab语言把多项式表达成一个行向量,该向量中的元素是按多项式 %降幂排列的。
% f(x)=an^n+an-1^n-1+……+a0
% 可用行向量 p=[an an-1 …… a1 a0]表示
clear all ;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1. poly —— 产生特征多项式系数向量poly(A)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 特征多项式一定是n+1维的
% 特征多项式第一个元素一定是1
a=[1 2 3;4 5 6;7 8 0];
p=poly(a)
% p =1.00 -6.00 -72.00 -27.00
% p是多项式p(x)=x^3-6x^2-72x-27的matlab描述方法,我们可用:
p1=poly2str(p,'x') %— 函数文件,显示
% 数学多项式的形式
% p1 =x^3 - 6 x^2 - 72 x - 27
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2.roots —— 求多项式的根
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
r=roots(p) %P为多项式系剩,按降幂排列
% r = 12.12
% -5.73 ——显然 r是矩阵a的特征值
% -0.39
% 当然我们可用poly令其返回多项式形式
p2 = poly(r) %poly(r) 通过根得出多项式系数
% p2 =
% 1.00 -6.00 -72.00 -27.00
% matlab规定多项式系数向量用行向量表示,一组根用列向量表示
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 3.conv,convs多项式乘运算
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 例:a(x)=x^2+2x+3; b(x)=4x^2+5x+6;
% c = (x^2+2x+3)(4x^2+5x+6)
a=[1 2 3];b=[4 5 6];
c=conv(a,b) %=conv([1 2 3],[4 5 6])
% c = 4.00 13.00 28.00 27.00 18.00
p=poly2str(c,'x')
% p = 4 x^4 + 13 x^3 + 28 x^2 + 27 x + 18
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 4.deconv多项式除运算
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
a=[1 2 3];
c = [4.00 13.00 28.00 27.00 18.00]
d=deconv(c,a)
% d =4.00 5.00 6.00
% [d,r]=deconv(c,a)
% r为余数
% d为c除a后的整数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 5.多项式求导
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% matlab提供了polyder函数多项式的求导。
% 命令格式:
% polyder(p): 求p的求导
% polyder(a,b): 求多项式a,b乘积求导
% 例:
a=[1 2 3 4 5];
poly2str(a,'x')
% ans = x^4 + 2 x^3 + 3 x^2 + 4 x + 5
b=polyder(a)
% b = 4 6 6 4
poly2str(b,'x')
% ans =4 x^3 + 6 x^2 + 6 x + 4
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%6.多项式拟合
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% P = POLYFIT(X,Y,N) finds the coefficients of a polynomial P(X) of
% degree N that fits the data Y best in a least-squares sense. P is a
% row vector of length N+1 containing the polynomial coefficients in
% descending powers, P(1)*X^N + P(2)*X^(N-1) +...+ P(N)*X + P(N+1).
x0=0:0.1:1;
y0=[-.447 1.978 3.11 5.25 5.02 4.66 4.01 4.58 3.45 5.35 9.22];
p=polyfit(x0,y0,3)
% p = 56.6915 -87.1174 40.0070 -0.9043
% Y = POLYVAL(P,X) returns the value of a polynomial P evaluated at X. P
% is a vector of length N+1 whose elements are the coefficients of the
% polynomial in descending powers.
% Y = P(1)*X^N + P(2)*X^(N-1) + ... + P(N)*X + P(N+1)
xx=0:0.01:1;yy=polyval(p,xx);
plot(xx,yy,'-b',x0,y0,'or')
1. 多项式的算术运算
参加加减运算的多项式应该具有相同的阶次。
多项式乘法采用conv函数,除法由deconv函数完成。
2. 求根
求多项式的根采用roots函数。
3. 求值
函数polyval可以将某个特定数值代入多项式
函数polyvalm可以求出当多项式中的未知数为方阵时的值。
4. 求导
使用polyder函数对多项式求导
例: 将表达式(x-4)(x+5)(x2-6x+9)展开为多项式形式,并求其对应的一元n次方程的根。
>>p=conv([1 -4],conv([1 5],[1 -6 9]))
>>px=poly2str(p,’x’)
>>x=roots(p)
例: 已知向量A=[1 –34 –80 0 0],用此向量构造一多项式并显示结果。
(x-1)(x+34)(x+80)(x-0)(x-0)
>>PA=poly(A)
>>PAX=poly2str(PA,'X')
X^5 + 113 X^4 + 2606 X^3 - 2720 X^2
42.matlab中line()的用法 (2012-12-15 18:08:01)转载▼
标签: matlab 杂谈
line([起点横坐标,终点横坐标],[起点纵坐标,终点纵坐标]),
例line([1,2],[3,4])将画出(1,3)到(2,4)的一条直线,而不是(1,2)到(3,4)。
当line(a,b)中,a b是相同大小的矩阵时,将会在对应的每一列做一条直线。
当line(a,b,c)时,相应地会在三维图中画一条线。
a b c 均为2XN矩阵。
43.
plot(x,y,'.','markersize',8)%默认为6 %改变点的大小
44.
rand,randi和randn区别:
1,rand 生成均匀分布的伪随机数。分布在(0~1)之间
主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数
rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可以是'single'
rand(RandStream,m,n)利用指定的RandStream(我理解为随机种子)生成伪随机数
2,randn 生成标准正态分布的伪随机数(均值为0,方差为1)
主要语法:和上面一样
3, randi 生成均匀分布的伪随机整数
主要语法:randi(iMax)在开区间(0,iMax)生成均匀分布的伪随机整数
randi(iMax,m,n)在开区间(0,iMax)生成mXn型随机矩阵
r = randi([iMin,iMax],m,n)在开区间(iMin,iMax)生成mXn型随机矩阵
43.
scatter可用于描绘散点图。
1.scatter(X,Y)
X和Y是数据向量,以X中数据为横坐标,以Y中数据位纵坐标描绘散点图,点的形状默认使用圈。
2.scatter(...,'filled')
3.scatter3(x,y,z)
描绘三维图像。
44.
unifrnd(1,10,2,3)%产生2行3列的1-10之间服从平均分布的随机数
45.
matlab factoran 因子分析函数 (2013-08-17 17:02:42)转载▼
标签: matlab 概率 矩阵 载荷 方差 it 分类: matlab基础
因子分析是指从观测变量中提取共性因子的多元统计分析技术,目前因子分析已经在很多领域得到了广泛的应用。
在MATLAB中用于因子分析的函数为factoran(),其调用格式为:
lambda = factoran(X,m)
输入参数X为n×d的数据矩阵,行数据对应观测,列数据对应变量,m为公因子数,返回参数lambda为因子模型的载荷矩阵。
[lambda,psi] = factoran(X,m)
参数psi返回特殊方差的最大似然估计值。
[lambda,psi,T] = factoran(X,m)
参数T为旋转矩阵。
[lambda,psi,T,stats] = factoran(X,m)
返回的结构体变量stats包含模型检验的信息,loglike(对数似然函数的最大值),dfe(误差自由度),chisq(卡方统计量),p(检验的概率值)。
45.
函数名称: isnumeric
函数功能: 判断输入参数是否是数字类型(包括浮点型和整型)
语法格式:
tf = isnumeric(A)
返回1(true)如果A是数字类型的, 返回0(false)如果A不是数字类型的.类型的。
46.
[data,textdata]=xlsread(filename, sheet, 'range')
其中data是数据
textdata是文本
注意两者的对应与一致性
47.
matlab计算加权欧氏距离的函数dist,加权函数将权值应用到输入得到加权输入。
用法:
1. dist (W,P)
输入SXR的W权值矩阵、RXQ的矩阵P的Q输入向量,返回SXQ的向量距离矩阵。也就是计算矩阵S行的W向量和Q行的P向量之间的距离矩阵。计算公式为:d = sum((x-y).^2).^0.5。例如:
>> a = [1 2 3; 4 5 6]
a =
1 2 3
4 5 6
>> b = [2 3 4; 5 6 7]
b =
2 3 4
5 6 7
>> b'
ans =
2 5
3 6
4 7
>> dist(a, b')
ans =
1.7321 6.9282
3.4641 1.7321
2. dist(pos)
输入一个参数pos -- N x S矩阵,返回一个S x S的距离矩阵。例如:
>> a = [1 2 3; 4 5 6]
a =
1 2 3
4 5 6
>> dist(a)
ans =
0 1.4142 2.8284
1.4142 0 1.4142
2.8284 1.4142 0
>> dist(a')
ans =
0 5.1962
5.1962 0
48.
Matlab中的randperm和randsample函数用法对比
构建替代数据的时候,一种常见的思路是打乱原数据的排列次序,通过随机置换原数据的排列次序从而产生和原数据系列统计特征(如均值、方差、分布)一致的随机数据。具体到Matlab中,此思路的实现会涉及到两个命令:randperm和randsample
p.s. 相关的重新排序命令还包括:
1
2
3
4
5
6
7
8
9
Reordering Algorithms
amd Approximate minimum degree permutation
colamd Column approximate minimum degree permutation
colperm Sparse column permutation based on nonzero count
dmperm Dulmage-Mendelsohn decomposition
ldl Block LDL' factorization for Hermitian indefinite matrices
randperm Random permutation
symamd Symmetric approximate minimum degree permutation
symrcm Sparse reverse Cuthill-McKee ordering
1、RANDPERM
根据Matlab文档,randperm最常用的用法是是返回一个从1-n的包含n个数的随机排列(每个数字只出现一次)——以行向量的形式
1
p = randperm(n) returns a row vector containing a random permutation of the integers from 1 to n inclusive
如果希望从1-n的数字序列里面随机返回k个数,则可以使用
1
p = randperm(n,k)
其中,这k个数之间彼此也是不相同的。可见,randperm能够产生不重复的随机排列,结合原数据,可写成类似下面的形式:
1
new = old( randperm( size(old,1) ) , : );
这样新数组中的各行就被重排了。如果各列也需要重排,则可以嵌套使用。
Matlab文档中还说,randperm完成的是不重复的重排采样(k-permutations),如果结果中的数需要重复多次出现的情况,则可以用:
1
randi(n,1,k)
randperm和rand、randi、randn一样,其随机数的生成是收到rng命令控制的,因此,可通过该命令影响随机数据流rand stream的情况。
2、RANDSAMPLE
randsample的命令组合比randperm要复杂,事实上这个命令内部也有对randperm的调用。因此,在适当的情况下,使用randperm的速度理论上比randsample快。(事实上也快很多)
randsample的命令格式:
第一种情形,randsample(n,k)和randperm(n,k)的功能一样,都是产生k个不相同的数(1-n)。
第二种情形,randsample(ARRAY,k),事实上就是randperm和原数组结合使用的形式,从ARRAY数组里面随机取出k个不相同的数。
第三种情形,replacement是一个bool变量,为1的时候,取出的数可能是重复的,为0的时候,可能不重复。
很显然,看到这里,会发现randsample和randperm很相似,譬如,之前旧数组随机排序的需求可写成下面的样式:
1
2
3
new = old( randsample( 1:length(matrix) , length(matrix) ,0),: );
or
new = randsample( old, length(old), 0 ); <-- I preferred this.
事实上更有用的是第四种情形,多出来一个w,是权重系数,能够根据此权重系数在原数组(或1-n数组)里面选出可能重复的k个数。典型用法譬如:
1
R = randsample('ACGT',48,true,[0.15 0.35 0.35 0.15])
上面的语句能够产生48个内容为ATCG的随机字串,且A出现的权重为0.15,其余类推。这个显然在生物信息学中很有用。ATCG也就是DNA的碱基序列。
第五种情形,可以用自己提供的随机数stream替换系统默认的随机数,s必须派生自Matlab的RandStream类。
小结
通过对比,我们很容易的发现randperm比randsample更直接更底层,而randsample则是对各种使用的情形进行了封装。randsample最有用的优势是可以很方便的实现随机数的权重分布。
49.
生成绘制3-D图形所需的网格数据。在计算机中进行绘图操作时, 往往需要一些采样点,然后根据这些采样点来绘制出整个图形。在进行3-D绘图操作时,涉及到x、y、z三组数据,而x、y这两组数据可以看做是在Oxy平面内对坐标进行采样得到的坐标对(x, y)。
例如, 要在“3<=x<=5,6<=y<=9,z不限制区间” 这个区域内绘制一个3-D图形,如果只需要整数坐标为采样点的话。我们可能需要下面这样一个坐标构成的矩阵:
(3,9),(4,9),(5,9);
(3,8),(4,8),(5,8);
(3,7),(4,7),(5,7);
(3,6),(4,6),(5,6);
在matlab中我们可以这样描述这个坐标矩阵:
把各个点的x坐标独立出来,得:
3,4,5;
3,4,5;
3,4,5;
3,4,5;
再把各个点的y坐标也独立出来:
9,9,9;
8,8,8;
7,7,7;
6,6,6;
这样对应的x、y结合,便表示了上面的坐标矩阵。meshgrid就是产生这样两个矩阵,来简化我们的操作。然后根据(x, y)计算获得z,并绘制出三维图形。
在Matlab命令窗口中键入type meshgrid可以查看该函数的源代码(由此可以理解meshgrid的算法思想), 键入doc meshgrid或者help meshgrid可以获得帮助文档。语法 [X,Y] = meshgrid(x,y)
上面的描述,我们可以知道,meshgrid返回的两个矩阵X、Y必定是行数、列数相等的,且X、Y的行数都等
于输入参数y中元素的总个数,X、Y的列数都等于输入参数x中元素总个数(这个结论可以通过查看meshgrid的源代码得到,可以通过示例程序得到验证)。
[X,Y]=meshgrid(x)与[X,Y]=meshgrid(x,x)是等同的
[X,Y,Z]=meshgrid(x,y,z)生成三维数组,可用来计算三
50.
echo on%逐行显示m文件的内容
echo off%结束上述操作
51.
X=round(normrnd(mu,sigma,[n,1]));%产生以mu,sigma
%为均值和标准差的正态分布的随机数n行1列,然后在四舍五入取整
zan