MATLAB の基礎の復習

目次

1.ヘルプコマンド

2. データ型

3. セル配列と構造

4.行列演算

4.1 マトリックスの定義と構築

4.2 行列の四則演算

4.3 行列の添字

5. プログラムの構造

5.1 for ループ構造

5.2 ブランチ構造

7. 描画の基本操作

7.1. 二次元平面図

6.2 3D ステレオ描画

7. グラフィックの保存とエクスポート

8. 補足


ステートメントの後に ; を追加すると、プログラムの実行中に、変更された行の演算結果がコマンド ライン ウィンドウに表示されなくなります。

コンパクト形式: % 出力行間隔はコンパクト モードに設定されます

フォーマット ルーズ: % デフォルトのルーズ モードに復元します

format関数の設定は現在の MATLAB セッションの出力行間隔にのみ影響し、実際のデータや変数は変更されないことに注意してください。また、この設定はグラフィックスやその他のコマンド ライン以外の出力には影響しない場合があります。

1.ヘルプコマンド

 

 

たとえば、キーワード inverseに関連する関数を使用する場合は 、次のコードを使用してそれを検索できます。


2. データ型

%%  独占一行的注释
%   普通注释

clear all	删除所有变量
clc	删除命令行窗口内容

变量命名规则:区分大小写;长度不超过63

10/3=3.3333     /是真除法 


abs('a')  %输出97  单引号表示字符
abs('ab') %输出97 98
char(97) %输出'a'
num2str(97) %输出'a'

length('adjkasnjfka') #输出的是字符串长度

A=[1 2 3;4 5 6;7 8 9]  %定义矩阵
B=A'    %转置
C = A(:) %竖向拉长

D = inv(A) %逆矩阵(必须时方阵才能求逆矩阵)
A * D (相当于A×A的逆)
在MATLAB中,可以使用inv函数或者det函数来判断一个矩阵是否可逆。
·inv函数用于计算矩阵的逆。如果一个矩阵是可逆的,inv函数将返回该矩阵的逆矩阵。如果矩阵不可逆(奇异矩阵),inv函数将引发一个异常。
·det函数用于计算矩阵的行列式。如果一个矩阵的行列式不等于零,则说明该矩阵是可逆的;如果行列式等于零,则说明该矩阵是不可逆的。

E = zeros(10,5,3) 创建一个10行5列3维的全0矩阵
E(:,:,1) = rand(10,5)  %rand生成均匀分布的伪随机数。分布在(0~1)之间
rand(m,n,‘double’)生成指定精度的均匀分布的伪随机数,参数还可以是’single’

rand(): [0,1) の 10 進数を生成します。

rand(m):ランダムな小数で埋められた m X m の正方行列を生成します。

rand(m,n):ランダムな小数で埋められた m X n の行列を生成します。

rand(m,n,p):ランダムな小数で埋められた m X n X p の行列を生成します。

a+(ba)*rand(): [b,a] 間隔 10 進数

'double' および 'single':データ型を指定し、rand の最後のパラメータ位置に配置します。

randi は生成された整数で、rand は [0,1] の 10 進数です。

randi(iMax): [0, iMax] の整数を生成します。

randi(iMax,m): m X m の正方行列、値間隔 [0,iMax] を生成します。

randi(iMax,m,n): m X n の行列、値の範囲 [0,iMax] を生成します。

randi(iMax,m,n,p,...):以下はすべて次元 m X n X p X ...

randi([iMin,iMax],m,n): m X n の行列、値間隔 [iMin, iMax] を生成します。

randn(m): m×m

randn(m,n): m X n

randn(m,n,p): m X n X p

· [iMin, iMax] を指定できるのは randi だけであり、rand も randn も指定できません。

· randi は整数を生成し、rand と randn は小数を生成します。

· randn は次元のみを指定できます。

3. セル配列と構造

セル配列: MATLAB における一意のデータ型です。配列の一種です。その内部要素はさまざまなレイアウト タイプに属することができます。概念的な理解の観点からは、C 言語の構造および C++ のオブジェクトと考えることができます。 . 非常によく似ています。cell 配列は MATLAB の特徴的なデータ型であり、他のデータ型 (文字型、文字配列や文字列、一般的な算術データや配列など) とは異なります。その特徴は、ユーザーに情報を問い合わせているような感覚を与え、すべての変数が基本的なデータ情報に変換されるまで徐々に追跡できる独自のデータ アクセス方法によって決まります。そのクラス関数の出力は cell (cell) です

Cell 配列
A = cell(1,6) %Define
A{2} = eye(3) %Matlab バージョン 2021 より前の添え字は 1 から始まります
A{5} = magic(5) %Magic cube: 行列は水平です、縦または斜めの 3 方向の数の和は常に同じ
B = A{5}

構造 

定義はカンマで区切られていることに注意してください。アクセスするときはドットを使用してください。

>> books=struct('name',{
    
    {'Machine Learning','Data Mining'}},'price',[30,40])
books = 
  包含以下字段的 struct:
     name: {'Machine Learning'  'Data Mining'}
     price: [30 40]

>> books.name
ans =
  1×2 cell 数组
    'Machine Learning'    'Data Mining'

>> books.price
ans =
    30    40

>> books.name(1)
ans =
  cell
    'Machine Learning'

>> books.name{1}
ans =
Machine Learning

4.行列演算

4.1 マトリックスの定義と構築

>> A=[1,2,3,4,5,6,7,8,9]%直接定义矩阵
A =
     1     2     3     4     5     6     7     8     9

>> B=1:2:9 %第二个参数为步长,不可缺省,[1,9]包含最后一个数值
B =
     1     3     5     7     9

>> C = repmat(B,3,2) %重复执行3行2列
C =
     1     3     5     7     9     1     3     5     7     9
     1     3     5     7     9     1     3     5     7     9
     1     3     5     7     9     1     3     5     7     9

>> D = ones(2,4) %生成一个2行4列的全1矩阵
D =
     1     1     1     1
     1     1     1     1

4.2 行列の四則演算

>> A = [1 2 3 4; 5 6 7 8]
A =
     1     2     3     4
     5     6     7     8
>> B = [1 1 2 2; 2 2 1 1]
B =
     1     1     2     2
     2     2     1     1
>> C=A+B  %对应位置相加
C =
     2     3     5     6
     7     8     8     9
>> C=A*B'  %'是转置符号
C =
    17    13
    41    37
>> C=A'*B
C =
    11    11     7     7
    14    14    10    10
    17    17    13    13
    20    20    16    16


>> A
A =
     1     2     3     4
     5     6     7     8
>> B
B =
     1     1     2     2
     2     2     1     1
>> A.*B %对应位置相乘
ans =
     1     2     6     8
    10    12     7     8
>> A./B %对应位置相除
ans =
    1.0000    2.0000    1.5000    2.0000
    2.5000    3.0000    7.0000    8.0000

>> G = A / B %相当于A*B的逆 G*B = A  G*B*pinv(B) = A*pinv(B)  G = A*pinv(B),相当于A乘B
G =
    1.8333   -0.1667
    3.1667    1.1667
>> A * inv(B)
错误使用 inv
矩阵必须为方阵。 
>> A * pinv(B)  %pinv可以不是方阵
ans =
    1.8333   -0.1667
    3.1667    1.1667

4.3 行列の添字

>> A=magic(5)
A =
    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9
>> A(2,3) %矩阵坐标从1开始数,访问第二行第二列元素
ans =
     7
>> A(2,:) %访问第二行所有元素
ans =
    23     5     7    14    16
>> A(:,3) %访问第三列所有元素
ans =
     1
     7
    13
    19
    25
>> find(A>20) %返回的是大于20的元素的下标,竖着数
ans =
     2
     6
    15
    19
    23
>> A(6)
ans =
    24

5. プログラムの構造

5.1 for ループ構造

>> sum=0;
>> for i=1:5
sum=sum+i*i;
end
>> sum
sum =
    55

sum=0;
for i=1:5
    cur=1;
    for j=1:i
        cur=cur*j;
    end
    sum=sum+cur;
end
disp(sum); %153

 

%打印九九乘法表
for i=1:9
    for j=1:i
        a(i,j)=i.*j;
    end
end
disp(a);

>> test01
     1     0     0     0     0     0     0     0     0
     2     4     0     0     0     0     0     0     0
     3     6     9     0     0     0     0     0     0
     4     8    12    16     0     0     0     0     0
     5    10    15    20    25     0     0     0     0
     6    12    18    24    30    36     0     0     0
     7    14    21    28    35    42    49     0     0
     8    16    24    32    40    48    56    64     0
     9    18    27    36    45    54    63    72    81

5.2 ブランチ構造

7. 描画の基本操作

7.1. 二次元平面図

x=0:0.01:2*pi;
y=sin(x);
figure;  %建立一个幕布
plot(x,y);
title('y=sin(x)');
xlabel('x');
ylabel('y');
xlim([0 2*pi]); %设置x坐标值的范围

ここに画像の説明を挿入

x=0:0.01:20;
y1=200*exp(-0.05*x).*sin(x);
y2=0.8*exp(-0.5*x).*sin(10*x);
figure;
[AX,H1,H2]=plotyy(x,y1,x,y2,'plot');%共用一个x的坐标系,在y上有两个不同的取值
%设置相应的标签
set(get(AX(1),'Ylabel'),'String','Slow Decay');
set(get(AX(2),'Ylabel'),'String','Fast Decay');
xlabel('Time(\musec)');
title('Multiple Decay Rates');
set(H1,'LineStyle','--','Color','b');
set(H2,'LineStyle',':','Color','k');

6.2 3D ステレオ描画

t=0:pi/50:10*pi;
plot3(sin(t),cos(t),t);
xlabel('sin(t)');
ylabel('cos(t)');
zlabel('t');
%hold on 
%hold off %不保留当前操作
grid on;%把图片绘制出来,加一些网格线
axis square %使整个图(连同坐标系)呈方块

ホールドオンとは、現在の軸と画像が更新されずに保持され、後で描画されるグラフィックスを受け入れる準備ができており、複数のグラフィックスが共存することを意味します。つまり、グラフィックスのホールド機能がアクティブになり、現在の座標軸とグラフィックスが保持されます。が維持され、以降描画されるグラフィックスはこのグラフィックスに追加され、座標軸の範囲が自動的に調整されます。

Hold offでは、現在の軸とイメージが更新されなくなり、新しいイメージが表示されると、元のイメージがキャンセルされますつまり、グラフホールド機能をオフにします。

hold on とhold offは比較的よく使われます。

7. グラフィックの保存とエクスポート

matlab によって生成された画像がスクリーンショットによって直接インターセプトされると、画像の鮮明さが影響を受けます。したがって、次の方法を使用してグラフィックを保存およびエクスポートすることをお勧めします。

1) 図に示すようにここに画像の説明を挿入

ここに画像の説明を挿入

2) 編集→コピーオプション

調整可能な対応する要素

ここに画像の説明を挿入

3) 編集→図のプロパティ

ここに画像の説明を挿入

4) ファイル → 設定のエクスポート

ここに画像の説明を挿入

幅や高さなどのピクセル値の属性を調整することで、画像が小さくても文字を鮮明に表示できます。

Matlab の基本的な部分はこれで終わりです。少し追加してみましょう~

8. 補足

[x,y,z] = peaks(30); %peaks命令用于产生双峰函数或者是用双峰函数绘图
mesh(x,y,z)
grid

>> ピーク
z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ... - 10*(x/5 - x. 
   ^ 3 - y.^5).*exp(-x.^2-y.^2) ... - 1/3 
   *exp(-(x+1).^2 - y.^2)  

おすすめ

転載: blog.csdn.net/m0_58086930/article/details/131939369