matlab基础

clear:清除工作空间的所有变量
clf:关闭所有的图形窗口
clc:清除命令窗口的内容,对工作环境中的全部变量无任何影响

inf:无穷大

nan:无法定义,即非数,如0/0

pathtool:自定义路径

 

real()    复数的实部

imag()  复数的虚部

abs()    实数的绝对值或复数取模

angle()   复数的辐角

conj()   复数的共轭

 

 创建基础矩阵

zeros(m,n)  产生m*n的全0数组

ones(m,n)   产生m*n的全1数组

eye(m,n)     产生m*n的单位数组

rand(m,n)    产生m*n的均匀分布数组

randn(m,n)    产生m*n的正态分布数组

magic(n)     产生n*n的模仿数组

 

round()     四舍五入到最近的整数

fix()          向0方向取整数

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

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

 

 字符串操作

upper()      把字符串任一小写字母转换为大写字母

lower()       把字符串任一大写字母转换为小写字母

double()     转换字符串为ASCALL码

char()        将ASCALL码转换为字符串

int2str()     将整数转换为字符串

num2str()    将数值转换为字符串

str2num()  将字符串转换为数值

sprintf()     按照给定格式将数值转换为字符串

sscanf()     按照给定格式将字符串转换为数值

  

起始值:间隔:终止值

 >> 1:0.1:2
 
 ans =
 
     1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000    1.9000    2.0000

linspace(起始值,终止值,值的个数)

>> linspace(1,2,11)

ans =

    1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000    1.9000    2.0000

矩阵:

创立矩阵(例三阶魔方矩阵)

>> a=magic(3)

a =

     8     1     6
     3     5     7
     4     9     2

矩阵特征值与特征向量

[X,D]=eig(a)   X的每一列为对应的特征向量,D的对角线为矩阵的特征值

>> [X,D]=eig(a)

X =

   -0.5774   -0.8131   -0.3416
   -0.5774    0.4714   -0.4714
   -0.5774    0.3416    0.8131


D =

   15.0000         0         0
         0    4.8990         0
         0         0   -4.8990

 逆矩阵

>> inv(a)

ans =

    0.1472   -0.1444    0.0639
   -0.0611    0.0222    0.1056
   -0.0194    0.1889   -0.1028

行列式

>> det(a)

ans =

  -360

矩阵的秩

>> rank(a)

ans =

     3

转置矩阵

>> a'

ans =

     8     3     4
     1     5     9
     6     7     2

行最简式

>> rref(a)

ans =

     1     0     0
     0     1     0
     0     0     1

 

 数据的拟合与插值:

 tic        %计 %数据的拟合
  clear all,clc
  %确定x,y的坐标
  figure(1)
  x=0:0.1:1;
  y=[1.2,1.6,1.67,3.6,4,5.3,5.6,7.6,7.7,8.3,8.5];
  p1=polyfit(x,y,1)    %线性拟合
  y1=poly2str(p1,'x')  %化为标准多项式形式
 
 p2=polyfit(x,y,2)    %二阶多相似拟合
 y2=poly2str(p2,'x')  %化为标准多项式形式
 subplot(1,3,1),plot(x,y,'r-');title('原图')
 subplot(1,3,2),plot(x,p1(1)*x+p1(2),'b-');title('线性拟合')
 subplot(1,3,3),plot(x,p2(1)*x.^2+p2(2)*x+p2(3),'b-');title('二阶线性拟合')
 
 
 %数据的插值
 %linear:线性插值,matlab默认此插值方式
 %nearnest:最近邻近插值法
 %cubic:立方插值法
 %spline:三次样条插值法
 figure(2)
 x=linspace(0,5,6);y=sin(x);%创建原始数据点
 subplot(2,2,1),plot(x,y,'r-');title('原图')
 x0=linspace(0,5,21);       %待插值点
 y0=sin(x0);                %精确值
 y1=interp1(x,y,x0);        %线性插值法
 subplot(2,2,2),plot(x0,y1,'b-');title('线性插值')
 y2=interp1(x,y,x0,'spline')%三次样条插值法
 subplot(2,2,3),plot(x0,y2,'g-');title('三次样条插值')
 y3=interp1(x,y,x0,'cubic') %立方插值法
 subplot(2,2,4),plot(x0,y3,'m-');title('立方插值')
 disp('三种插值的残差为')
 err=[y1-y0;y2-y0;y3-y0]
 disp('残差的标准方差')
 s=[std(err(1, : )),std(err(2, : )),std(err(3, : ))]
 toc

 

 符号计算:

创建符号变量:sym(常量,参数)

例:a=sym('pi+2*cos(3)'),

syms x;  a=6*x^3

精度控制

digits(5); %定义精度
a=vpa(sqrt(2)); %a=1.4142

极限

limit(f,x,a,right):自变量x从右边趋近于a时,符号函数f的极限值

limit(f,x,a,left):自变量x从左边趋近于a时,符号函数f的极限值

符号微分:diff(f,y,x):矩阵f对于y的x阶级导数

clear,clc,syms a x y
f=[a,y^3,y*cos(x),log(x)];    %创建矩阵
dfdx=diff(f)                  %对x的一阶导数
dfdy2=diff(f,y,2)             %对y的二阶导数
dfdxd=diff(diff(f,x),y)       %混合求导

dfdx =
 
[ 0, 0, -y*sin(x), 1/x]
 
 
dfdy2 =
 
[ 0, 6*y, 0, 0]
 
 
dfdxd =
 
[ 0, 0, -sin(x), 0]

 符号积分:s=int(f,v,a,b):f关于变量v的积分,积分区间在[a,b],缺少v时系统自动认定

clear,clc,syms x a p positive
s1=int(a^x*cos(x),0,pi)           %0到pi上的定积分
s2=int(1/x^p,1,inf)         %1到无穷的定积分

s1 =
 
-(log(a)*(a^pi + 1))/(log(a)^2 + 1)
 
 
s2 =
 
piecewise(1 < p, 1/(p - 1), p <= 1, Inf)

符号替换:subs(S,OLD,NEW) 表示将符号表达式S中的符号变量OLD替换为新的值NEW

clear,clc,syms x y
s=x^2+3*x
subs(s,x,y)

s =
 
x^2 + 3*x
 
 
ans =
 
y^2 + 3*y

符号累和:symsum(expr,v,a,b)

clear,clc,syms v f
a=1;b=100;
f=v^2;
s=symsum(f,v,a,b)

s =
 
338350

 

 数值微分:

f(x)在x点的偏导数定义为:f‘(x)=lim(h->0) (f(x+h)-f(x))/h

方式一:

daoshu=diff(a,n,dim)

a:矩阵a  n:n阶差分  dim=1时列计算,dim=2时行计算,默认dim=1

方式二:

二维情况:[dfdx,dfdy]=gradient(f,dx,dy)

其中didf为其水平方向上的梯度,dify为其垂直方向上的梯度

一维情况:didx=gradient(f,a) 

f为矩阵  a为对应x  返回一维数值梯度

clear all,clc
dt=pi/20;                   %定义dt,保证数值较小
t=pi/20:dt:pi/2;            %x的取值
x=exp(t).*cos(t);           %创建函数x=e^t * cos(t)
dxdt_diff=diff(x)/dt        %方式一计算
dxdt_grad=gradient(x,dt)    %方式二计算

dxdt_diff =

    0.9321    0.7975    0.5672    0.2191   -0.2701   -0.9243   -1.7666   -2.8178   -4.0943            %方式一结果


dxdt_grad =

    0.9321    0.8648    0.6824    0.3931   -0.0255   -0.5972   -1.3455   -2.2922   -3.4561   -4.0943  %方式二结果

 

数值积分

方式一:

[I,n]=quad(fun,a,b,tol)

计算被积函数fun在[a,b]上的定积分。输出变量I为定积分的结果,n为本积分的函数调用次数,tol为精确度,默认为10^-6

方式二:

[I,n]=quadl(fun,a,b,tol)

特性基本同上,该函数可以更精确的求出定积分的值。

quad:采用递推自适应的Simpson法来计算

quad1:采用递推自适应的Lobatto法来计算

 方式三:

st=trapz(x,y)

其中x,y是基础数值,x可以为行向量或列向量,y可以为向量或矩阵,y的行数应等于x向量的元素个数;若dim=1,则按行求积,若dim=2,则按列求积。认dim=1.

 

clear,clc
format long                                          %精度显示,计算sqrt(1-1/2*sinx)在0到pi/2上的定积分
[s_quad,n]=quad('sqrt(1-1/2*sin(x))',0,pi/2,1e-11)   %方式一积分
[s_quadl,n]=quadl('sqrt(1-1/2*sin(x))',0,pi/2,1e-11) %方式二积分

s_quad =  

   1.288898992309974        %方式一结果


n =

   121                      %方式一被积函数调用次数


s_quadl =

   1.288898992310102        %方式二结果


n =

    48                      %方式二被积分函数调用次数
clear,clc
x=linspace(0,pi/2,500);     %0到pi/2之间创建500个等间隔数值
y=sqrt(1-1/2*sin(x));       %同样,这是500个y的数值的行向量
s_trapz=trapz(x,y)          %方式三积分

s_trapz =

   1.288899198751829        %方式三结果

 

matlab解方程组:

多项式求跟:z=roots(p)  如果已知多项式的跟x,可以使用poly:p=poly(x)

clear,clc
%求f(x)=2x^4+3x^2+2x-5全根
p=[2 0 3 2 -5];
x=roots(p)                     %求全根
g=poly(x);                     %构造新多项式
g=poly2str(g,'x')

x =

  0.141441321334151 + 1.592960474043117i
  0.141441321334151 - 1.592960474043117i
 -1.140196435014263 + 0.000000000000000i
  0.857313792345960 + 0.000000000000000i


g =

    '   x^4 - 2.2204e-16 x^3 + 1.5 x^2 + 1 x - 2.5'

 线性代数方程组(齐次):

clear,clc
a=[1 2 2 1;2 1 -2 -2;1 -1 -4 -3];
format rat     %结果用有理分数显示
z=null(a,'r')
%方程的通解如下
syms k1 k2
x=k1*z( : ,1)+k2*z( : ,2)

z =

       2              5/3     
      -2             -4/3     
       1              0       
       0              1       

 
x =
 
   2*k1 + (5*k2)/3
 - 2*k1 - (4*k2)/3
                k1
                k2

(非齐次)

clear,clc
A=[1 -2 3 -1;3 -1 5 -3;2 1 2 -1];
b=[1 2 3]';
B=[A b];
n=4;       %未知数的个数
ra=rank(A);
rb=rank(B);
format rat
if ra==rb&ra==n
    x=A\b
elseif ra==rb&ra<n
    x=A\b
    z=null(A,'r')
else
    x='无解'
end

x =

       0       
       9/7     
      13/7     
       2       


z =

      -7/5     
       4/5     
       1       
       0     

 符号方程solve:

clear,clc
syms x y
eq1=3*x+6*x-4;
s1=solve(eq1,x)

eq2=y-5*y-8;
s2=solve(eq2,y)

s1 =
 
4/9
 
 
s2 =
 
-2

 

posted @ 2021-03-10 21:41  天界定居者  阅读(200)  评论(0)    收藏  举报