Matlab基础学习(上)

1、前记:本文为matlab相关基础内容,主要参考:https://zhuanlan.zhihu.com/c_1208096335112843264

Contents

*********主要记录matlab一些基本操作************ 

     Created by JianXingQiang,April 29, 2020.       %
%Reference page:web('https://zhuanlan.zhihu.com/c_1208096335112843264', '-browser')
 a=input('请输入一个数字: ');%输入的数字即实现了对a的赋值,当然数组,结构体也可以也可以。
 b=0.002;
 fprintf('答案是 %g 和 %0.6f \n',a,b) %a,b一般为实数.f前加的0.6表示保留小数点后6位

矩阵,数组double类型[]里面的逗号或空格表示一列,分号表示换行

 A=[0 0 1;2 3 12;0 0 1];
 B=[0 0 1 2; 1 2 3 4;2 3 3 1;1 3 24 4];
 disp(A);
 % 二值化的矩阵
 Image=[0 0 0 0 1;
        0 0 1 0 0;
        0 0 0 0 1;
        0 0 0 0 0;
        1 0 0 0 0];
    imshow(Image)%黑色为0,白色为1
    heatmap(Image);%查看,热图

结构体struct

S=struct('Test',{'guanjie1';'guanjie2'},'position',{20;45});%{}里面的为元胞数组cell,需要单引号
disp(S)
S1=struct('Name',{'MackJim';'JohnSnow'},'age',{26;33});
disp(S1);disp({S1.Name});disp({S1.age})
% 修改结构体里面的信息,如下年龄或姓名
S1(1).age = 24;
S1(2).Name='Nanci';

条件判断,输出X的绝对值

x=-12;
if x>=0
  disp(x)
else
  disp(-x)
end

或和与----->||一个满足就满足,&&同时满足才满足

a=-1;
if a>1 &&a<3
 disp(a)
elseif a<1 || a >=3
  disp(a-10)
end

基本运算,加,减,乘,点乘直接+,-,*,.*;

%乘方:2^8
%对数:log10(100),以10为底,真数为100的对数。loga(b)表示为以a为底,真数为b的对数
%自然数e在matlab中表示为exp(1)--以e为底数:log(exp(1)^10)和log(exp(10))相等
%a的平方根就是sqrt(a),或者a^0.5
pi       %圆周率
abs(-6)  %求绝对值
mod(10,2) %10除2的余数
asin(1)   %反正弦
acos(0)   %反余弦
atan(1)   %反正切 机器人逆运动学算法解中常用

矩阵的运算

%矩阵叉乘:a*b,a/b 就是线性代数中的矩阵乘法和矩阵除法。
%矩阵点乘:a.*b,a./b,和加减一样,对应行对应列的数字进行乘除
A=[10 6 8;1 4 6;1 1 1]
B=[2 3 8;2 2 3;1 1 1]
C=A*B
D=A.*B
E=A/B
F=A./B
% 乘方:和乘法类似
%求倒数:inv(a)就是1/a,一般是方阵求逆,行列式不等于0,可逆,非奇异
inv(A)%为奇异矩阵,不满秩,行列式等于0的方阵.A行列式的倒数乘以A的伴随矩阵A*
inv(B);
%如果A为奇异矩阵  (singular matrix),则AX=0有无穷解,AX=b有无穷解或者无解。
%如果A为非奇异矩阵(nonsingular matrix),则AX=0有且只有唯一零解,AX=b有唯一解。
%在信号处理中,当信号协方差矩阵不是奇异矩阵时,则信号不相关或者部分相关。
%协方差矩阵可用来表示多维随机变量的概率密度,从而可通过协方差矩阵达到对多维随机变量的研究
 Cov = cov(A) %协方差具体用法help查看
% 矩阵查询:查询时先列后行,查第几个就用A(第几个)
% 或者按某行某列查询,如下两个方式获得的数一致
disp(A(5))
disp(A(2,2))
 %如果是取某一列或某一行
 disp(A)
 disp(A(1,:))    %第一行
 disp(A(:,1))    %第一列
 disp(A')        %矩阵的转置,行变列

循环操作

 while true %可以加条件,true为直接进入循环中
    tic
    timerVal = tic;%记录的是使用时间
    T=toc;         %记录已用时间,常用来查看算法的时间复杂度?
%     disp(timerVal)
    disp(T)
 end
%ctrl+C退出循环

for循环

i=100

tic
 for i=1:1:100

 pause(0.1)

 end
 T=toc;
 fprintf('算法执行时间为:%f 秒\n',T)

符号计算。利用常有于公式推导,微分,积分运算。如机器人的逆解,动力学,比手推好多了。

as=sin(sym(pi/3))  %sym 用来定义要进行计算的符号(字母)
pretty(as)         %pretty将结果简化的漂亮些-分母表示?
 % syms的用法,求极限
 syms x f;      %定义变量,符号化
 f=(x-sin(2*x))/x^exp(2);%定义符号函数
 ans=limit(f,x,+inf)        %求极限函数limit(),x趋近正无穷是f的取值;-inf负无穷

显函数求导

syms x f;
f=sqrt(1+exp(x));
ans1=diff(f,x,1);  %diff()函数求一阶导
pretty(ans1)     %化简

隐函数求导

syms x y f
f=cos(x+sin(y))-sin(y) %原隐函数表达式为把f化为0,然后移项:cos(x+sin(y))=sin(y)
an1=diff(f,x);an2=diff(f,y);pretty(an1/an2)%和下面的结果一致
ans2=-diff(f,x)/diff(f,y); %两个diff()表示f分别对x,y求导
pretty(ans2)

参数方程求导

syms x y t
x=2*t,y=t^2-1
ans3=diff(y,t)/diff(x,t) %
pretty(ans3)

不定积分

syms x f;
f=(3-x^2)^3;
ans1=int(f,x) %int()为积分函数
pretty(ans1)
syms x g;
g=1/(1+x^2)
int(g,x)

定积分

syms x
ans3=int(abs(1-x),x,1,2) %对1-x求x的上极限为2,下极限为1的定积分
ans4=int(sin(x),x,0,1)
%求定积分,一般先找到sin(x)是通过-cos(x)求导得到的【积分表】
%再将上下极限代入得到原积分结果。定积分还有凑微分,换元法的计算方法
syms x
pretty(1/(1+x^2))
ans4=int(1/(1+x^2),-inf,+inf) %结果为圆周率pi?

多项式---求根

在这里多项式一般在matlab中使用矩阵来表示其系数

a=[1 1 -2];       %表示x^2+x-2=f(x)
ans3=roots(sym(a))%对其求根结果为-2,1
pretty(ans3)
%虚根
a=[1 -1 1];       %表示x^2-x+1=0
ans31=roots(sym(a))%对其求根结果为-2,1
pretty(ans31)

根求多项式

f=[1 1 -2]
polyval(f,2)  %当x=2时,f=x^2+x-2的值
%如果代入的根为数组,同样可以计算出每个数组对应多项式的值,如下.
a=[1 2;3 5]
polyval(f,a)

多项式相乘

a=[1 2 1];
b=[1 3 2];
cc=conv(a,b)   %conv函数将x^2+2x+1与x^2+3x+2相乘,结果为x^4+5x^3+9x^2+7x+2
%多项式除法:deconv(A,B)

多项式求导

A=[2 -4 2]
p=polyder(A)   %求2x^2-4x+2的导数,结果为[4 -4]即为4x+4

画出多项式

figure;
hold on
title('f(x)=x^2')
grid on
x=-6:0.001:6;
f=[1 0 0]
xlabel('X')
ylabel('f(x)')
plot(x,polyval(f,x))
legend( 'x^2在区间的走势')

方程组求解

a=[3 2;5 7];  %方程组左边系数
b=[7.5;23.5]; %方程组右边系数
%a和b组成的方程组为3x+2y=7.5;5x+7y=23.5
ans=inv(a)*b;
fprintf('方程组的解为: x = %g, y = %g',ans(1),ans(2));

多元多次方程组 使用solve()函数

syms x y
f=(x^2 + y^2 == 4)  %x^2+y^2=4,解析式的等号这里为==
g=(y - x + 1 == 0)  %y-x+1=0
[x,y]=solve(f,g)    %将f和g的解析式代入solve
a=[x,y]
pretty(a)

使用符号计算,完成多项式

syms f g x;
f=3*x^2+2*x+2;
g=3*x+1;
ans1=f+g;%加
ans2=f-g;%减
disp(ans1);disp(ans2);
% 下面的直接进行乘和除根本没有达到化简
ans3=f*g;%乘
ans4=f/g;%除
disp(ans3),disp(ans4)
%因此,需要对其进行多项式拆分,使用expand()函数
ans3=expand(f*g)

因式分解

syms a b;
s=a^3-b^3;
ans1=factor(s);%factor函数,返回得值为矩阵,即分解的分一项。
disp(ans1)
%factor还用来分解某一数的质因数
factor(15) %15的质因数

多项式化简 simplify--可因式化简得

syms a b f g h
f=(a^2-b^2)/(a-b)
p=simplify(f)     %将f化简
% simplify中可以式多个f
syms a b f g h
f=(a^3-b^3)/(a-b)
g=(a^2-b^2)/(a+b)
h=a+3*b-2*b
p=[f,g,h]
ans2=simplify(p)

最大,最小值

A=[10 0 22 33; 12 3 2 33;10 0 23 43]
max(A)%找出最大值为每一列中的最大值,等价值为max(A,[],1)
max(A,[],2)%A中每一行中的最大值
%如果要求A中的最大值,怎么办。因为上边已经找出了每一行的最大值,所以对其再找一次
max(max(A),[],2)

平均数mean()和中位数median(),使用规则同

A=[13 -56 78;25 63 -235;78 25 563;1 0 -1]
mean(A)        %矩阵中每列的平均值
mean(A,2)      %矩阵中每行的平均值
mean(mean(A),2)

排序

dim=1;mode='ascend';
%dim=1,对每一列进行排序;dim=2,对每一行进行排序
%mode='ascend'升序排序,mode='descend'降序排序
sort(A,dim,mode)

画参数方程曲线

引入句柄的方式;x=@t x(t);@t是调用句柄,x(t)是我们想要表达的关系式

x=@(t) (1-t^2)/(1+t^2)  % x=(1-t^2)/(1+t^2)
y=@(t) 4*t/(1+t^2)      % y=4t/(1+t^2)
fplot(x,y,[-10,10]);    %参数t的取值范围[-10,10]
axis equal              %等距显示X,Y轴刻度
hold on
title('x=(1-t^2)/(1+t^2)与y=4t/(1+t^2)构成的曲线')

极坐标:polar(t,r),用法同plot

t=0:pi/100:2*pi;%取值范围
r=1-sin(t);     %函数
polar(t,r);
% 更多绘图的修饰可以help或查看最开始的知乎链接,或者对figure进行文件-->导出设置。

三维绘图,绘制螺旋线plot3的用法

t=linspace(0,10*pi,200);
x=sin(t)+t.*cos(t);
y=cos(t)-t.*sin(t);
z=t;
plot3(x,y,z);
t=linspace(0,10*pi,200);
x=sin(t)+t.*cos(t);
y=cos(t)-t.*sin(t);
z=t;
plot3(x,y,z,x,y,z+2,x,y,z+4);%在上面的基础上,螺旋线向z轴平移2个单位

斐波那契(Fibonacci)螺旋线的绘制

t = 0 : 0.1 : 10 * pi;
z=t;
y = exp(-t / 20) .* cos(t);
x = exp(-t / 20) .* sin(t);
figure
plot3(x, y, z);

曲面绘制,mesh函数与surf函数,具体help吧!

 

以上是直接将matlab代码发布成html格式复制粘贴的。看起来不用太大改动,发布还比较快的。

以下是上面的所有代码:

(复制到工作目录下,按小节运行)

%% ***********主要记录matlab一些基本操作************ %%
%       Created by JianXingQiang,April 29, 2020.       %
%Reference page:web('https://zhuanlan.zhihu.com/c_1208096335112843264', '-browser')
 a=input('请输入一个数字: ');%输入的数字即实现了对a的赋值,当然数组,结构体也可以也可以。
 b=0.002;
 fprintf('答案是 %g 和 %0.6f \n',a,b) %a,b一般为实数.f前加的0.6表示保留小数点后6位
 %% 矩阵,数组double类型[]里面的逗号或空格表示一列,分号表示换行
 A=[0 0 1;2 3 12;0 0 1];
 B=[0 0 1 2; 1 2 3 4;2 3 3 1;1 3 24 4];
 disp(A);
 % 二值化的矩阵
 Image=[0 0 0 0 1;
        0 0 1 0 0; 
        0 0 0 0 1;
        0 0 0 0 0;
        1 0 0 0 0];
    imshow(Image)%黑色为0,白色为1
    heatmap(Image);%查看,热图
%% 结构体struct
S=struct('Test',{'guanjie1';'guanjie2'},'position',{20;45});%{}里面的为元胞数组cell,需要单引号
disp(S)
S1=struct('Name',{'MackJim';'JohnSnow'},'age',{26;33});
disp(S1);disp({S1.Name});disp({S1.age})
% 修改结构体里面的信息,如下年龄或姓名
S1(1).age = 24;
S1(2).Name='Nanci';
%% 条件判断,输出X的绝对值
x=-12;
if x>=0
  disp(x)
else
  disp(-x)
end
%% 或和与----->||一个满足就满足,&&同时满足才满足
a=-1;
if a>1 &&a<3
 disp(a)
elseif a<1 || a >=3
  disp(a-10)
end
 
%% 基本运算,加,减,乘,点乘直接+,-,*,.*;
%乘方:2^8
%对数:log10(100),以10为底,真数为100的对数。loga(b)表示为以a为底,真数为b的对数
%自然数e在matlab中表示为exp(1)--以e为底数:log(exp(1)^10)和log(exp(10))相等
%a的平方根就是sqrt(a),或者a^0.5
pi       %圆周率
abs(-6)  %求绝对值
mod(10,2) %10除2的余数
asin(1)   %反正弦
acos(0)   %反余弦
atan(1)   %反正切 机器人逆运动学算法解中常用
%% 矩阵的运算
%矩阵叉乘:a*b,a/b 就是线性代数中的矩阵乘法和矩阵除法。
%矩阵点乘:a.*b,a./b,和加减一样,对应行对应列的数字进行乘除
A=[10 6 8;1 4 6;1 1 1]
B=[2 3 8;2 2 3;1 1 1]
C=A*B
D=A.*B
E=A/B
F=A./B
% 乘方:和乘法类似
%求倒数:inv(a)就是1/a,一般是方阵求逆,行列式不等于0,可逆,非奇异
inv(A)%为奇异矩阵,不满秩,行列式等于0的方阵.A行列式的倒数乘以A的伴随矩阵A*
inv(B);
%如果A为奇异矩阵  (singular matrix),则AX=0有无穷解,AX=b有无穷解或者无解。
%如果A为非奇异矩阵(nonsingular matrix),则AX=0有且只有唯一零解,AX=b有唯一解。
%在信号处理中,当信号协方差矩阵不是奇异矩阵时,则信号不相关或者部分相关。
%协方差矩阵可用来表示多维随机变量的概率密度,从而可通过协方差矩阵达到对多维随机变量的研究
 Cov = cov(A) %协方差具体用法help查看
% 矩阵查询:查询时先列后行,查第几个就用A(第几个)
% 或者按某行某列查询,如下两个方式获得的数一致
disp(A(5))
disp(A(2,2))
 %如果是取某一列或某一行
 disp(A)
 disp(A(1,:))    %第一行
 disp(A(:,1))    %第一列
 disp(A')        %矩阵的转置,行变列
 %%  循环操作
 while true %可以加条件,true为直接进入循环中
    tic
    timerVal = tic;%记录的是使用时间
    T=toc;         %记录已用时间,常用来查看算法的时间复杂度?
%     disp(timerVal)
    disp(T)
 end
%ctrl+C退出循环
 %% for循环
% i=100
tic
 for i=1:1:100
  
 pause(0.1) 
   
 end
 T=toc;
 fprintf('算法执行时间为:%f 秒\n',T) 
 %% 符号计算。利用常有于公式推导,微分,积分运算。如机器人的逆解,动力学,比手推好多了。
as=sin(sym(pi/3))  %sym 用来定义要进行计算的符号(字母)
pretty(as)         %pretty将结果简化的漂亮些-分母表示?
 % syms的用法,求极限
 syms x f;      %定义变量,符号化
 f=(x-sin(2*x))/x^exp(2);%定义符号函数
 ans=limit(f,x,+inf)        %求极限函数limit(),x趋近正无穷是f的取值;-inf负无穷
 %% 显函数求导
syms x f;
f=sqrt(1+exp(x));
ans1=diff(f,x,1);  %diff()函数求一阶导
pretty(ans1)     %化简
%% 隐函数求导
syms x y f
f=cos(x+sin(y))-sin(y) %原隐函数表达式为把f化为0,然后移项:cos(x+sin(y))=sin(y)
an1=diff(f,x);an2=diff(f,y);pretty(an1/an2)%和下面的结果一致
ans2=-diff(f,x)/diff(f,y); %两个diff()表示f分别对x,y求导
pretty(ans2) 
%% 参数方程求导
syms x y t
x=2*t,y=t^2-1  
ans3=diff(y,t)/diff(x,t) %
pretty(ans3)
%% 不定积分
syms x f;
f=(3-x^2)^3;
ans1=int(f,x) %int()为积分函数
pretty(ans1)
 %%
syms x g;
g=1/(1+x^2)
int(g,x)
%% 定积分
syms x
ans3=int(abs(1-x),x,1,2) %对1-x求x的上极限为2,下极限为1的定积分
ans4=int(sin(x),x,0,1)   
%求定积分,一般先找到sin(x)是通过-cos(x)求导得到的【积分表】
%再将上下极限代入得到原积分结果。定积分还有凑微分,换元法的计算方法
syms x
pretty(1/(1+x^2))
ans4=int(1/(1+x^2),-inf,+inf) %结果为圆周率pi?
%% 多项式---求根 
% 在这里多项式一般在matlab中使用矩阵来表示其系数
a=[1 1 -2];       %表示x^2+x-2=f(x)
ans3=roots(sym(a))%对其求根结果为-2,1
pretty(ans3)
%虚根
a=[1 -1 1];       %表示x^2-x+1=0
ans31=roots(sym(a))%对其求根结果为-2,1
pretty(ans31)
%% 根求多项式
f=[1 1 -2]
polyval(f,2)  %当x=2时,f=x^2+x-2的值
%如果代入的根为数组,同样可以计算出每个数组对应多项式的值,如下.
a=[1 2;3 5]
polyval(f,a) 
%% 多项式相乘
a=[1 2 1];
b=[1 3 2];
cc=conv(a,b)   %conv函数将x^2+2x+1与x^2+3x+2相乘,结果为x^4+5x^3+9x^2+7x+2
%多项式除法:deconv(A,B)
%% 多项式求导
A=[2 -4 2]
p=polyder(A)   %求2x^2-4x+2的导数,结果为[4 -4]即为4x+4 
%% 画出多项式
figure;
hold on
title('f(x)=x^2')
grid on
x=-6:0.001:6;
f=[1 0 0]
xlabel('X')
ylabel('f(x)')
plot(x,polyval(f,x))
legend( 'x^2在区间的走势')
%% 方程组求解
a=[3 2;5 7];  %方程组左边系数
b=[7.5;23.5]; %方程组右边系数
%a和b组成的方程组为3x+2y=7.5;5x+7y=23.5
ans=inv(a)*b;
fprintf('方程组的解为: x = %g, y = %g',ans(1),ans(2));
%% 多元多次方程组 使用solve()函数
syms x y
f=(x^2 + y^2 == 4)  %x^2+y^2=4,解析式的等号这里为==
g=(y - x + 1 == 0)  %y-x+1=0
[x,y]=solve(f,g)    %将f和g的解析式代入solve
a=[x,y]
pretty(a)
%% 使用符号计算,完成多项式
syms f g x;
f=3*x^2+2*x+2;
g=3*x+1;
ans1=f+g;%加
ans2=f-g;%减
disp(ans1);disp(ans2);
% 下面的直接进行乘和除根本没有达到化简
ans3=f*g;%乘
ans4=f/g;%除
disp(ans3),disp(ans4)
%因此,需要对其进行多项式拆分,使用expand()函数
ans3=expand(f*g)
%% 因式分解
syms a b;
s=a^3-b^3;
ans1=factor(s);%factor函数,返回得值为矩阵,即分解的分一项。
disp(ans1)
%factor还用来分解某一数的质因数
factor(15) %15的质因数
%% 多项式化简 simplify--可因式化简得
syms a b f g h
f=(a^2-b^2)/(a-b)    
p=simplify(f)     %将f化简
% simplify中可以式多个f
syms a b f g h
f=(a^3-b^3)/(a-b)
g=(a^2-b^2)/(a+b)
h=a+3*b-2*b
p=[f,g,h]
ans2=simplify(p)
%% 最大,最小值
A=[10 0 22 33; 12 3 2 33;10 0 23 43]
max(A)%找出最大值为每一列中的最大值,等价值为max(A,[],1)
max(A,[],2)%A中每一行中的最大值
%如果要求A中的最大值,怎么办。因为上边已经找出了每一行的最大值,所以对其再找一次
max(max(A),[],2)
%% 平均数mean()和中位数median(),使用规则同
A=[13 -56 78;25 63 -235;78 25 563;1 0 -1]
mean(A)        %矩阵中每列的平均值
mean(A,2)      %矩阵中每行的平均值
mean(mean(A),2)
%% 排序
dim=1;mode='ascend';
%dim=1,对每一列进行排序;dim=2,对每一行进行排序
%mode='ascend'升序排序,mode='descend'降序排序
sort(A,dim,mode) 
%% 画参数方程曲线
% 引入句柄的方式;x=@t x(t);@t是调用句柄,x(t)是我们想要表达的关系式
x=@(t) (1-t^2)/(1+t^2)  % x=(1-t^2)/(1+t^2)
y=@(t) 4*t/(1+t^2)      % y=4t/(1+t^2)
fplot(x,y,[-10,10]);    %参数t的取值范围[-10,10]
axis equal              %等距显示X,Y轴刻度
hold on
title('x=(1-t^2)/(1+t^2)与y=4t/(1+t^2)构成的曲线')
%% 极坐标:polar(t,r),用法同plot
t=0:pi/100:2*pi;%取值范围
r=1-sin(t);     %函数
polar(t,r);
% 更多绘图的修饰可以help或查看最开始的知乎链接,或者对figure进行文件-->导出设置。
%% 三维绘图,绘制螺旋线plot3的用法
t=linspace(0,10*pi,200);
x=sin(t)+t.*cos(t);
y=cos(t)-t.*sin(t);
z=t;
plot3(x,y,z);
%%
t=linspace(0,10*pi,200);
x=sin(t)+t.*cos(t);
y=cos(t)-t.*sin(t);
z=t;
plot3(x,y,z,x,y,z+2,x,y,z+4);%在上面的基础上,螺旋线向z轴平移2个单位
%% 斐波那契(Fibonacci)螺旋线的绘制
t = 0 : 0.1 : 10 * pi;
z=t;
y = exp(-t / 20) .* cos(t);
x = exp(-t / 20) .* sin(t);
figure
plot3(x, y, z);
%% 曲面绘制,mesh函数与surf函数,具体help吧!

再次感谢https://zhuanlan.zhihu.com/c_1208096335112843264

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JianRobSim

嘤嘤其名,求其友声!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值