intersectab返回向量ab的公共部分.docx
- 文档编号:6630169
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:28
- 大小:337KB
intersectab返回向量ab的公共部分.docx
《intersectab返回向量ab的公共部分.docx》由会员分享,可在线阅读,更多相关《intersectab返回向量ab的公共部分.docx(28页珍藏版)》请在冰豆网上搜索。
intersectab返回向量ab的公共部分
intersect(a,b):
返回向量a,b的公共部分
intersect(A,B,'row'):
A,B为相同列数的矩阵,返回元素相同的行
[c,ia,ib]=intersect(a,b):
c为a,b的公共元素,ia表示公共元素在a中的位置,ib表示公共元素在b中的位置
c=setdiff(a,b):
返回属于a但不属于b的不同元素的集合,即c=a-b
c=setdiff(A,B,'row'):
返回属于A但不属于B的不同行
[c,i]=setdiff(...):
c与前面一致,i表示c中元素在a中的位置
c=setxor(a,b):
返回a,b交集的非
c=setxor(A,B,'row'):
返回矩阵A,B的非,A,B有相同的列数
[x,ia,ib]=setxor(...):
ia,ib表示c中元素分别在a(或A),b(或B)中的位置
c=union(a,b):
a,b的交集
c=union(A,B,'row'):
返回A,B矩阵不同行向量构成的大矩阵,其中相同行向量只取其一
[c,ia,ib]=union(...):
ia,ib分别表示c中行向量在原矩阵(向量)中的位置
dot(a,b):
若a,b为向量,a和b长度必须相同,返回向量a,b的点积;若a,b为矩阵,则a,b必须有相同的维数
dot=(A,B,dim):
在dim维数中给出A与B的点积
c=cross(a,b):
若a,b为向量,则c=a*b,a,b必须是3个元素的向量;若a,b为矩阵,则返回一个3*n的矩阵,其中的列式a与b对应列的叉积,a,b都是3*n矩阵
c=cross(a,b,dim):
在dim维数在给出向量a,b的叉积,a和b必须有相同的维数,size(a,dim),size(b,dim)必须是3
混合积:
x=dot(a,cross(b,c)),即a.(b*c),先叉积后点积
向量的长度:
sqrt(dot(a,a))或sqrt(sum(a.*a))
向量的方向角:
r=sqrt(dot(A,A));%计算向量A的长度
alpha=acos(A
(1)/r);%向量A与x轴的夹角
beta=acos(A
(2)/r);%向量A与y轴的夹角
gamma=acos(A(3)/r);%向量A与z轴的夹角
R1=sqrt(dot(a,a));R2=sqrt(dot(b,b));
alpha=acos(dot(a,b)/R1/R2)%计算向量a,b间的夹角
解析几何简单应用
(1)点与点之间的距离
s=A-B;
r=sqrt(dot(s,s))%计算A,B两点间的距离
(2)点与平面的距离
平面方程Ax+By+Cz+D=0,用f=[A,B,C,D],点P(a,b,c)用P=[a,b,c]表示。
d1=dot(f,[P,1]);%计算Aa+Bb+Cc+D
d2=sqrt(dot(f(1:
3),f(1:
3)));%计算(A^2+B^2+C^2)^(1/2)
d=abs(d1/d2)%d为点P到平面f的距离
(3)点与直线的距离
将直线
表示为点O=[
]和向量v=[A,B,C],距离
vs=p-pv;%计算
d1=sqrt(dot(v,v));%计算
c=cross(v,vs)%计算
d2=sqrt(dot(c,c))%计算
d=d2/d1%计算点P到直线的距离d
多项式和线性方程组的求解
1.p=[1,-4,7,-31];
poly2sym(p)%poly2sym(p)命令是将多项式向量转变为符号形式
2.A=[1,2,3;4,5,6;7,8,9];
p=poly(A)%特征根
poly2sym(p)%特征多项式
3.r=[1,3,7]%已知多项式的根为1,3,7
p=poly(r)%由根创建多项式的系数
poly2sym(p)%由根创建多项式
4.多项式的运算
(1)计算两多项式
,
的和、积、商,
p=[2,1,0,-5,3];s=[1,1,1];s0=[0,0,1,1,];
p+s0%多项式加法,向量p,s必须同维,将s扩展成s0
conv(p,s)%多项式乘法,此时s不必扩维成s0
[q,r]=deconv(p,s)%多项式除法,商为q,余数为r,不必扩维
(2)多项式的根
roots(p)%多项式的根,即方程p(x)=0的解
pc=compan(p)%多项式p的伴随矩阵
eig(pc)%多项式p的伴随矩阵的特征值等于多项式p的根
例:
求多项式
的根
解法1:
p=[1,3,7];roots(p)
解法2:
p=[1,3,7];pc=compan(p);eig(pc)
(3)多项式微分与赋值运算
polyder(p)%多项式p的一阶微分
polyval(p,a)%求x=a是多项式p的值
5.方程组的求解
(1)线性方程组有惟一的解时
x=inv(A)*b
x=inv(sym(A))*b%精确解
(2)线性方程组有无穷多解时
Z=null(A)%求解A矩阵的化零矩阵,也即基础解系
Z=null(A,'r')%求解A矩阵的化零矩阵的规范形式
x0=(pinv(A)*b)%AX=b的一个特解
(3)无解时
x=pinv(A)*b%最小二乘解
6.图形的绘制
(1)显函数绘制
fplot('函数',[a,b])%函数表达式要置于单引号内,[a,b]为指定区间
如:
fplot('sin(4*x)',[0,pi])
fplot('[sin(x),cos(x)]',[-2*pi,2*pi)%在同一坐标系下绘制正弦、余弦取曲线
(2)隐函数的绘制
ezplot('隐函数表达式')
如:
ezplot('x^2*sin(x+y^2)+y^2*exp(x+y)+5*cos(x^2+y)')
上面函数将根据x的定义域绘图,下面的限制了定义域
ezplot('x^2*sin(x+y^2)+y^2*exp(x+y)+5*cos(x^2+y)',[-10,10])
(3)极坐标下的图形绘制
polar(x,y,s)%x为极角,y为极径,s为图形设置选项
ezpolar('函数表达式')
(4)特殊二维曲线绘制函数
函数名
意义
常用调用格式
函数名
意义
常用调用格式
bar
条状图
bar(X,Y)
comet
彗星状图
comet(X,Y)
compass
罗盘图
compass(X,Y)
errorbar
误差限图
Errorbar(x,y,
)
feather
羽毛状图
feather(X,Y)
fill
二维填充图形
fill(X,Y,c)
hist
直方图
hist(X,Y)
stem
离散数据柄状图
stem(X,Y)
polar
极坐标图
polar(X,Y)
quiver
磁力线图
quiver(X,Y)
stairs
阶梯图
stairs(X,Y)
semilogx
x-半对数图
semilogx(X,Y)
loglog
对数图
loglog
semilogy
y-半对数图
semilogy(X,Y)
(5)图形修饰与控制
axissquare%是绘图区域为正方形
axisequal%控制各坐标轴的单位刻度,使其相等
axis([xmin,xmax,ymin,ynax])%控制坐标轴的范围
title('字符串')%给图形加上标题
xlabel('字符串')%x轴标注
ylabel('字符串')%y轴标
test(x,y,'字符串')%在点(x,y)处注说明文字
gridon%加网格线
gridoff%取消网格线
holdon%保持当前图形
holdoff%解除holdon命令
legend('First','Second',n)%对一个坐标系上的两个图形做出图例注解
subplot(m,n,p)%将当前窗口分成m行n列个区域,并指定在p区绘图
fill(X,Y,'颜色选项')%颜色填充
关于legend('First','Second',n)中参数n的补充:
0:
自动定位,使得图标与图形重复最少,即自动放在最佳位置
1:
置于图形的右上角(默认值)
2:
左上角
3:
左下角
4:
右下角
-1:
右外侧
(6)三维图形的绘制
plot3(X,Y,Z,s)
如:
绘制螺旋线
t=0:
pi/60:
10*pi;
x=sin(t);y=cos(t);
plot3(x,y,t,'*b')
其它函数:
stem3可以绘制火柴杆型曲线,fill3可以绘制三维的填充图形,bar3可以绘制三维的直方图,comet3可以绘制三维的彗星状图。
(7)三维曲面的绘制
[X,Y]=meshgrid(v1,v2)%生成网格数据
Z=...,如Z=X.*Y%计算二元函数的Z矩阵
surf(X,Y,Z)或mesh(X,Y,Z)%mesh函数绘制网格图,surf函数绘制表面图
其中v1,v2为x轴和y轴的分隔形式
其他绘制三维曲面的函数有:
meshz%绘制带有底座的三维网格图
meshc%带有等高线的三维网格图
surfc%带有等高线的三维曲面图
surf1%绘制光照下的三维曲面
waterfall%瀑布型三维图形
contour3%三维等高线函数
pie3%三维饼状图
cylinder%柱面图
sphere%球面图
如:
绘制带有底座的马鞍面:
x=-8:
8;y=-8:
8;
[X,Y]=meshgrid(x,y);
Z=(x.^2/4^2-y.^2/5^2);
meshz(X,Y,Z)
(8)直角坐标,柱坐标,球坐标之间的转换
[x,y]=pol2cart(theta,r)%二维极坐标转换为直角坐标
[theta,r]=cart2pol(x,y)%二维直角坐标转换为极坐标
[x,y,z]=pol2cart(theta,r,z)%三维柱坐标转换为直角坐标
[theta,r,z]=cart2pol(x,y,z)%三维直角坐标转换为柱坐标
[x,y,z]=sph2cart(theta,phi,r)%三维球坐标转换为直角坐标
[theta,phi,r]=cart2sph(x,y,z)%三维直角坐标转换为球坐标
如:
把三维柱坐标转换为直角坐标
theta=0:
pi/30:
2*pi;ro=sin(theta);
[t,r]=meshgrid(theta,ro);
z=r.*t;
[x,y,z]=pol2cart(t,r,z);
mesh(x,y,z)
(9)图形命令的各种设置选项
曲线线型
曲线颜色
标记符号
选项
意义
选项
意义
选项
意义
—
实线
b
蓝色
*
星号
——
虚线
c
蓝绿色
.
实点
:
点线
g
绿色
o
圆圈
—.
点划线
k
黑色
叉号
none
无线
m
紫红色
+
加号
r
红色
d
棱形
w
白色
^
向上三角
y
黄色
<
向左三角
>
向右三角
s
正方形
h
正六角形
p
五角形
向下三角
7.微积分基本运算
(1)函数的极限
limit(f,x,a)%f(x)在
时极限值
limit(f,x,a,'right')%右极限
limit(f,x,a,'left')%左极限
limit(limit(f,x,
),y,
)%累次极限
如:
求解极限
symxab;
f=x*(1+a/x)^x*sin(b/x);
limit(f,x,inf)
(2)函数的导数
diff(f,x)%求f关于x的导数
diff(f,x,n)%n阶导数
diff(diff(f,x,m),y,n)%二元函数f的偏导数
(3)函数的积分
int(f,x)%函数f(x)的不定积分;当被积函数f中只有一个变量时,可以省略x
int(f,x,a,b)%定积分
int(f,x,a,inf)%无穷积分
(4)函数的级数展开
(a)泰勒(Taylor)级数展开
taylor(f,x,k)%f(x)在x=0处的泰勒展开式,k为需要展开的项数
taylor(f,x,k,a)%在x=a处展开
注:
k的默认值为6.
(b)傅里叶(Fourier)级数展开
MATLAB本身没有提供专门的傅里叶级数展开的函数,可编写如下M函数实现
function[a0,an,bn]=fourier(f)
symsx
a0=int(f,-pi,pi)/pi;
an=int(f*cos(n*x),-pi,pi)/pi;
bn=int(f*sin(n*x),-pi,pi)/pi;
(4)梯形法数值积分
trapz(x,y)%x可以为行向量或列向量,y的行数等于x向量的元素数
注:
若y由多列向量给出,则该函数可以得到若干个函数的积分值。
如:
用梯形法求
区间,函数
的定积分值
x=[0:
pi/30:
pi]';%步长
可选
y=[sin(x)cos(x)];
trapz(x,y)
(5)quad函数计算数值积分(Simpson算法)
quad(Fun,a,b)%求定积分,误差为
quad(Fun,a,b,
)%限定精度为
的定积分求解
注:
Fun为描述被积函数的字符串变量,可以是一个Fun.m函数文件名,还可以是inline函数直接定义。
a,b分别为定积分的上限和下限,
为用户指定的误差限,默认值为
(6)矩形区域上二重积分的数值解
dblquad(Fun,a,b,c,d)%计算双重积分
dblquad(Fun,a,b,c,d,
)%限定精度为
的双重积分
如:
求二重积分:
f=inline('exp(-x.^2/2).*sin(x.^2+y)','x','y');
%inline函数的第一个输入变量为被积函数本身,第二个、第三个输入变量为自变量
J=dblquad(f,-2,2,-1,1)
(7)长方体区域上三重积分的数值解
triplequad(Fun,a,b,c,d,m,n,
)%三重积分
8.代数方程与常微分方程的求解
(1)代数方程的图解法
如:
求解方程:
ezplot('exp(x)-x^2-10',[0,5])
holdon,line([0,5],[0,0])
注:
通过局部放大图形,可得到原方程的解,直到曲线与x轴的交点附近完全一致。
如下图红圈所示。
(2)代数方程的符号解
solve(eqn)%求解方程eqn=0,输入变量eqn可以是符号表达式或字符串
solve(eqn,'x')%对指定变量x求解eqn(x)=0
solve(eqn1,eqn2,...,eqnn)%求解方程:
eqn1=0,eqn2=0,...,eqnn=0
如:
使用solve函数求解方程:
x3+4x2-4x-1=0
solve('x^3+4*x^2-4*x-1')
使用solve函数求解方程组:
x+y=1,x-3y=5。
[x,y]=solve('x+y=1','x-3*y=5')
(3)一般非线性方程数值解
x=fsolve(Fun,x0)
其中,Fun应该用M函数文件或inline函数按指定的格式描述,x0为搜索点的初值,方程求根程序从该值开始逐步减小误差搜索出满足方程的实根x。
如:
先用图解法观察方程5x2sinx-e-x=0在区间[0,10]内有多少解,然后试用数值方法求之。
ezplot('5*x^2*sin(x)-exp(-x)',[0,10])
holdon
line([0,10],[0,0])
从图中可以看出在[0,10]内共有4个解,分别在0,3,6,9附近
从而可以使用fsolve函数求其数值解
fun=inline('5*x.^3.*sin(x)-exp(-x)');
fsolve(fun,[0,3,6,9])
例:
求解方程组:
x-0.7sinx-0.2cosy=0,y-0.7cosx+0.2siny=0
解:
先编制函数文件fu.m
functiony=fu(x)
y
(1)=x
(1)-0.7*sin(x
(1))-0.2*cos(x
(2))=0;
y
(2)=x
(2)-0.7*cos(x
(1))+0.2*sin(x
(2))=0;
y=[y
(1),y
(2)];
在命令窗口调用fu函数,并计算:
x=fsolve('fu',[0.5,0.5])
结果为:
x=
0.52650.5079
(4)常微分方程的符号解(解析解)
dsolve(f1,f2,...fn)
dsolve(f1,f2,...Fn,'x')
其中,fi既可以描述微分方程,又可以描述初始条件或边界条件。
在描述微分方程,可以用D4y表示y(4)(t),还可以用D2y
(2)=3表示y''
(2)=3。
如火自变量不是t而是x,则可以用后一个语句指明自变量。
如:
求解微分方程y''-y'-ex=0的通解及在初始条件y(0)=1;y'(0)=2下的特解。
dsolve('D2y-Dy-exp(x)=0','x')
ans=
C3*exp(x)+exp(x)*(x+C2*exp(-x))
在初始条件y(0)=1;y'(0)=2下:
dsolve('D2y-Dy-exp(x)=0','y(0)=1','Dy(0)=2','x')
ans=
exp(x)+x*exp(x)
(5)常微分方程的数值解法
[T,Y]=ode45(Fun,[t0,tf],y0)%在区间[t0,tf]上,用初始条件y0求解显式微分方程:
y'=f(t,y),t0默认为0
例:
求解微分方程y'=-2y+2x2+2x,0
x
0.5,y(0)=1
fun=inline('-2*y+2*x^2+2*x','x','y');
[x,y]=ode45(fun,[0,0.5],1);
plot(x,y)%绘制解函数曲线图
例:
考虑描述振荡器的经典VanderPol方程:
在初始条件y(0)=1y'(0)=0的解(取μ=7)
分析:
首先,用dsolve函数,看看有啥结论
y=dsolve('D2y+mu*(y^2-1)*Dy+y=0','y(0)=1','Dy(0)=0')
Warning:
Explicitsolutioncouldnotbefound.
>Indsolveat194
y=
[emptysym]
得出无解提示,可见dsolve函数不能直接用于一般非线性方程的解析解的求解。
数值解,首先把微分方程转化为显式微分方程
的形式。
令
,则原方程化为:
初值条件变为:
x1(0)=1,x2(0)=0
解法1使用inline函数描述微分方程组:
f1=inline('[x
(2);-7*(x
(1)^2-1)*x
(2)-x
(1)]','t','x');
y0=[1;0];
[t,x]=ode45(f1,[0,40],y0);
plot(t,x)
解法2编写M函数文件vdp.m来描述微分方程组:
functionfy=vdp(t,x)
fy=[x
(2);-7*(x
(1)^2-1)*x
(2)-x
(1)];
然后在命令窗口中输入:
y0=[1;0];
[t,x]=ode45('vdp',[0,40],y0);
plot(t,x)
(6)不同求解器Solve的特点
求解器Solve
ODE类型
特点
说明
ode45
非刚性
一步法,4,5阶Runge-Kutta方程,累计截断误差达(Δx)3
大部分场合的首选算法
ode23
非刚性
一步法,2,3阶Runge-Kutta方程,累计截断误差达(Δx)3
使用于精度较低的情形
ode113
非刚性
多步法,Adams算法,高低精度均可达10-6~10-3
计算时间比ode45短
ode23t
适度刚性
采用梯形算法
适度刚性情形
ode15s
刚性
多步法,Gear's反向数值微分,精度中等
若ode45失败时。
可尝试使用
ode23s
刚性
一步法,2阶Rosebrock算法,低精度
当精度较低时,计算时间比ode15s短
9.优化问题
(1)无约束最优化问题的数值解法
x=fminunc(Fun,x0)%最简求解语句
[x,f]=fminunc(Fun,x0,options)%一般求解语句
fminsearch的用法与fminuc一样
options的选择
参数名
参数说明
Display
中间结果显示方式,其值可以取off表示不显示中间值,iter逐步显示,notify求解不收敛时给出提示,final只显示终值
GradObj
表示目标函数的梯度是否已知,可以选择为on或off
LargeScale
表示是否使用大规模问题算法,取值为on或off
MaxIter
方程求解和优化过程最大允许的迭代次数,若方程未求出解,可适当增加此值
MaxFunEvals
方程函数或目标函数的最大调用次数
TolFun
误差函数的误差限控制量,当函数的绝对值小于此值即终止求解
TolX
解的误差限控制量,当解的绝对值小于此值即终止求解
opt=optimset%获得默认的常用变量
opt.TolX=1e-10;%修改解的误差限控制量,或者用set(opt.'TolX',1e-10)
【例1.75】已知二元函数z=f(x,y)=(x^2-2*x).exp(-x^2-y^2-xy),使用MATLAB提供的求解函数求出其最小值
首先用inline语句定义目标函数:
f=inline('(x
(1)^2-2*x
(1))*exp(-x
(1)^2-x
(2)^2-x
(1)*x
(2))','x');
然后给出初始值,并将求解控制变量中的Display属性设置为'iter',这样可以显示中间的搜索结果:
x0=[0;0];ff=optimset;ff.Display='iter';
最后,可以用下面的语句求解出最优解:
x=fminsearch(f,x0,ff)
IterationFunc-countminf(x)Procedure
010
13-0.000499937initialsimplex
24-0.000499937reflect
.......
71135-0.641424contractinside
72137-0.641424contractoutside
Optimizationterminated:
thecurrentxsatisfiestheterminationcriteriausingOPTIONS.TolXof1.000000e-04
andF(X)satisfiestheconver
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- intersectab 返回 向量 ab 公共 部分