[Matlab]入门教程基础向笔记(B站视频)

版权声明:未经许可,请勿转载 https://blog.csdn.net/glpaichiyu/article/details/82785452

[Matlab]入门教程基础向笔记(B站视频)

快捷操作

  1. clc:清除命令行窗口历史操作
  2. 用⬆(上箭头)表示快捷输入上一段代码

计算细节

  1. 矩阵相乘

A*B:表示现代中的相乘运算
A.B:表示各个数字分别相乘运算
例:A=[1 2 ;3 4]
B=[5 6;7 8]
A
B=[13 16;13 16]
A.*B=[3 8;5 12]

  1. mod(x,y):求x,y相除的余数

运算符号

&&:并且
||:或者
非:~

一个基本的计算脚本

fprintf输出

x=input('please input x:');
y=input('please input y:');

fprintf('the answer is:%f\n',x+y);

fprintf('the answer is:%g+%g=%g\n',x,y,x+y);

please input x:1
please input y:2
the answer is:3.000000
the answer is:1+2=3

disp输出

disp('apple','banana','orange')

错误使用 disp
输入参数太多。

disp(['apple','banana','orange'])

applebananaorange

disp(['apple ','banana ','orange'])

apple banana orange

 fr1='apple';
 fr2='banbana';
 fr3='orange';
disp([fr1,fr2,fr3])

applebanbanaorange

 fr1='apple';
 fr2='banbana';
 fr3='orange';
 disp([fr1,' ',fr2,' ',fr3])

apple banbana orange

if条件语句

a=input('a =');
b=input('b =');
c=input('c =');
delta=b^2-4*a*c;

if delta>0
    x1=-b+sqrt(delta)/(2*a);
    x2=-b-sqrt(delta)/(2*a);
    fprintf('x1=%f\nx2=%f\n',x1,x2);
elseif delta==0;
    x=-b/(2*a);
    fprintf('x=%f\n',x);
else delta<0;
    fprintf('no solution');
end

a =1
b =1
c =-2
x1=0.500000
x2=-2.500000

!注意:
换行符为\n,为右斜杠;
根号用sqrt()表示

while循环语句

i = 1;
s = 0;

while i <= 100;
    i=i+1;
    s=s+i;
end

disp(s)

5150

for循环语句

%求1-1/2+1/3-1/4+1/5....-1/100的和

s=0;

for i = 1:100;
    if mod(i,2)==1;
        s=s+1/i;
    else
        s=s-1/i;
    end
end

disp(s)

0.6882

函数模块

  1. 计算a-b的总数
function  Untitled6( a,b )     %Untitled6为文件名,a,b为参数
s=0;

for i = a:b;
    s=s+i;
end

disp(s)


end

调用方法:
Untitled6( 5,6 )
11

  1. 定义函数返回值,使其赋值
function result = Untitled7( a,b)     %注意,此时与上一段代码不同,定义了一个result 返回值
s=0;

for i = a:b;
    s=s+i;
end

result=s;         %result为函数返回值


end

s1=Untitled7(1,3)

s1 =

6

s2=Untitled7(11,12)

s2 =

23

s1+s2

ans =

29

画图

  • matlab每次使用plot时都会将上一次图形给覆盖掉
  • 若想同时保留两张图,可在第一个plot后加上hold on
  • 使用grid on 显示图像网格
  • 添加标题使用title(’ ')
  • 添加x,y轴标签:xlabel(’ ‘);ylabel(’ ')
x1 = -5:0.1:5;
y1 = x1.*x1;
plot(x1,y1);

hold on;

x2 = -5:0.1:5;
y2 = x2.^3;
plot(x2,y2);

grid on;
title('x^2 vs x^3');
xlabel('x');
ylabel('y');

在这里插入图片描述

简单的plot直线图

x = -3:0.1:3;  %表示x从步距为0.1,从-3到3
y = x.*x;  %注意为点乘,或者使用x.^2也为点乘
plot(x,y,'r-o') %'r-o'表示图形颜色为红色,在关键点上画圆
axis equal %表示直线坐标的xy轴间距相同

在这里插入图片描述

简单的直方图bar

>> x=2000:2005;
>> y=[10 15 20 22 23 25];
>> bar(x,y)

在这里插入图片描述

画一个简单3D图像:plot3

>> theta = 0 :pi/50 : 6*pi;
>> x = cos(theta);
>> y = sin(theta);
>> z = 0 :300;
>> plot3(x,y,z)

在这里插入图片描述

用subplot对画图区进行分块

subplot(a,b,[c,d]) %a,b表示分块方式,c,d表示定位

x = -4:0.1:4;

y1 = cos(x);
y2 = cos(2.*x);
y3 = cos(4.*x);

subplot(2,2,1);
plot(x,y1);
title('y = cos(x)');

subplot(2,2,2);
plot(x,y2);
title('y = cos(2x)');

subplot(2,2,[3,4]);
plot(x,y3);
title('y = cos(4x)');

在这里插入图片描述

surf曲面三维立体图

x = -3:0.1:3;
y = -3:0.1:3;
[X,Y] = meshgrid(x,y);  %取坐标上每一个x,y的值,赋值给X,Y
Z = X.^2+Y.^2;
surf(X,Y,Z); %画出X,Y,Z的三维图

在这里插入图片描述

做动画效果

做一个永动的sin曲线

X = -2*pi:0.1:2*pi;
Y = sin(X);

h = plot(X,Y); %将每一次的Y赋值给h

while true %当程序为真时,即表示永久运行
    X = X+0.1; %X往右侧移动0.1的单位
    Y = sin(X); 
    set(h,'XData',X,'YData',Y) %重新设置h,注意引号的使用和X,D为大写
    drawnow; %强制把图像再画一遍
end

在这里插入图片描述

做一个永动的弹簧

theta = -10*pi:0.1:10*pi;
X = cos(theta);
Y = sin(theta);
Z=theta;

h = plot3(X,Y,Z);   %先画一个三维立体的图
axis([-1,1,-1,1,-40,40])   %将x,y,z轴固定起来,不随弹簧的变动而变动

while true   %while循环使其永久实现
    for i = 1:100
        Z = 0.98*Z;
        set(h,'XData',X,'YData',Y,'ZData',Z);

        drawnow;
    end
%先使其收缩
    for i = 1:100
        Z = Z/0.98;
        set(h,'XData',X,'YData',Y,'ZData',Z);

        drawnow;
    end
%再使其变大
end

在这里插入图片描述

做一个时钟的线

t = 0:pi/50:2*pi;
X = cos(t);
Y = sin(t);

plot(X,Y);
axis equal;
hold on;

lineX = [0 1];
lineY = [0 0];

h = plot(lineX,lineY);

theta = 0;
while true;
    theta = theta+0.01;
    lineX(2)=cos(theta);
    lineY(2)=sin(theta);
    set(h,'XData',lineX,'YData',lineY);

    drawnow;
end

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/glpaichiyu/article/details/82785452