この記事は、国立台湾大学 Guo Yanfu の MATLAB チュートリアル P2 ~ P4 の学習ノートであり、コードと放課後の演習が含まれています。
目次
11.Array Manipulation (配列操作 4 つの操作)
5.変数への空間の事前割り当て(変数への空間の事前割り当て)
14. 関数ハンドル (C 言語のポインタに似た関数ハンドル)
8. 演習: アン レーンの 3 年生の 90 点を求めます。明らかに、この問題は難しくありません。
11. cell 配列 (タプル) は中かっこを使用します。方法は 2 つあります。
1. 基本操作とマトリクス入力
1. 簡単な練習
1.
>> cos(((1+2+3+4)^3/5)^0.5)
ans =
-0.0050
2.
>> sin(sqrt(pi))+log(tan(1))
ans =
1.4228
3.
>> 2^(3.5*1.7)
ans =
61.8199
4.
>> exp(sin(10))
ans =
0.5804
2.埋め込み関数(埋め込み関数)
数式が長すぎる場合は、変数を使用してその一部を保存し、計算することができます。
>> cos(pi)
ans =
-1
>> sin(ans)
ans =
-0.8415
>> sin(cos(pi))
ans =
-0.8415
3.変数(変数)
①変数名の場合に違いがあります
②変数の先頭に文字を使用することはできません。また、変数の先頭に数字を使用することもできます。
変数のタイプを確認する: ワークスペースで変数をダブルクリックして、タイプを表示します。
または誰 (既存の変数を確認する人、変数関連情報を確認する人)
特殊変数 -- キーワード
Answer: 答え、ij: 複素数、inf: 無限大、eps: 非常に小さな数、NaN: 非数、pi: 円周率
利用可能なキーワードを確認する
関数を変数に変換します。文字列を cos に代入し、対応する 8 番目の文字を出力します。このとき、関数よりも変数の優先順位が高くなります。
>> cos='This string.';
>> cos(8)
ans =
'r'
変数を削除し、ワークスペースのすべての内容を 1 回のクリアでクリアします (慎重にクリアします)。
4.フォーマット(フォーマット)
異なる型に応じて異なる小数点以下の長さを出力する
long:非常に長い、shortE、longE:科学記号(e+00は10の0乗)、bank:小数点以下2桁、hex:16進数、rat:有理数に変換
練習問題:
難しくない、明らかに 1,d
5. コマンドラインターミナル
コードの後にセミコロンを追加しても結果が返されない場合は、上矢印を押して前のコマンドに戻ります。
clc: 画面をクリアします
6. 配列 (ベクトルと行列)
行ベクトル (スペース区切り)、列ベクトル (セミコロン区切り)。
a*b 内積、b*a 外積。
マトリックスをスペースで区切ってセミコロンで区切って入力します。
>> A=[1 21 6; 5 17 9; 31 2 7]
A =
1 21 6
5 17 9
31 2 7
7. マトリックスのインデックス付け
行ベクトルまたは列ベクトルを出力します。数値を直接出力するだけです。
行列 A(X,Y) の値を表示したい場合: A は行列、X は X 行、Y は Y 列、つまり X 行の Y 番目の列です。A(X) を使用して検索する場合は、上から下、左から右の原則に従い、最初に左側の最初の列ベクトルを確認し、次に左側の 2 番目の列ベクトルを確認します。
さらに次の 5 つのコマンドを入力して結果を観察します。
5 番目の命令の最初の角括弧は行ベクトルを表し、2 番目の角括弧は列ベクトルを表すことを強調しておく必要があります。つまり、1行目と3行目、1列目と3列目の値を2次の行列として取得します。
8. マトリックス置換演習
問題解決のアイデア: 2 番目の行列は簡単に置き換えることができ、3 番目の行列のブロガーは上記の方法を使用して 4 つの値をすばやく置き換えます。3 行目を削除するには、3 行目の値をデフォルトで空に設定するだけです。
9. コロン演算子 (コロン)
A=[j:i:k] j は開始値、i は算術差、k は終了番号です。算術差が 1 の場合は、i を省略します。
このうち、最後のBの型はdouble、strの型はstrです。
10. 配列の連結
F=[AB] は、行は変更されず、列が増加することを意味します。F=[A;B] は、列は変更されず、行が増加することを意味します。
11.Array Manipulation (配列操作 4 つの操作)
2 つの行列演算は次のとおりです。
行列演算と定数演算は簡単なので、ここでは繰り返しません。このうち、A^a は A.^a ではなく A*A となり、A' が対角線に沿って入れ替えられます、つまり転置されます。
12.いくつかの特別な行列 (いくつかの特別な行列)
linspace: 統一された計算命令。linspace (x, y, z) は x で始まり y で終わり、中間に z 個の要素があります。
eye(n): 対角線上に 1 を持つ nxn 行列。
zeros(n1.n2): すべての要素が 0 の n1xn2 行列。
diag(): 対角線上に既知の数値を持つ行列。
rand(): ランダム行列。
13.一部の行列関連関数(一部の行列関連関数)
max(A) は A の各列ベクトルの最大値を求め、行ベクトルを返します。min(A)、sum(A)、mean(A) は同じです。max(max(A)) は定数を返します。
sort(A) は各列ベクトルをソートし、sortrows(A) は各行を最初の列ベクトルのサイズ順に変更します。
size(A) は n*n、length(A) は行ベクトルまたは列ベクトルの大きい方の値が返されます。find (A==5)、A の数値は 5 です。
2 つの構造化されたプログラムとカスタム関数
1.MATLAB Script(matlab脚本)
最初の sin 描画スクリプトを作成すると、結果として動画が生成されます。
for i=1:10
x=linspace(0,10,101)
plot(x,sin(x+i));
print(gcf,'-deps',strcat('plot',num2str(i),'.ps'));
end
matlab % はコメント、%% は簡単なデバッグを説明するセクションです。スクリプトは保存できますが、コマンドラインを入力すると消えてしまいますので、スクリプトを使用することをお勧めします。
2.スクリプトフロー(スクリプトフロー)
上から下へ
構造化プログラミング
違いは ~= 違います! =
文法は最後の命令と一致する必要があります
スクリプト内の右側のコードを実行すると、結果がコマンド ライン ウィンドウに表示されます。
a=3;
if rem(a,2)==0 %reminder余数
disp('a is even')
else
disp('a is odd')
end
input_num=1;
switch input_num
case -1
disp('negative 1')
case 0
disp('zero')
case 1
disp('positive 1')
otherwise
disp('other value')
end
n = 1;
while prod(1:n) < 1e100 % product阶乘 10的100次方
n = n + 1;
end
3. 1~999の連続加算を練習する
n = 1;
sum = 0;
while n < 1000
sum = sum + n;
n = n + 1;
end
disp('1+2+3+...+999=')
disp(sum)
4.forループ
for n=1:10
a(n)=2^n;
end
disp(a)
再割り当てするために変数をクリアする必要がある場合は、
n を奇数に変更すると、n の偶数は存在しない代わりに 0 になるため、n=(1:2:10 は機能しません)となります。
5.変数への空間の事前割り当て(変数への空間の事前割り当て)
tic はタイミングの開始、toc はタイミングの終了です
%% を使用して 2 つのプログラムを実行すると、プログラム B の事前割り当てにより時間が大幅に節約されることがわかります。
%%
tic
for ii = 1:2000
for jj=1:2000
A(ii,jj) = ii + jj;
end
end
toc
%%
tic
A = zeros(2000, 2000);
for ii = 1:size(A:1) %返回矩阵对应行数
for jj = 1:size(A,2) %返回矩阵对应列数
A(ii,jj) = ii +jj;
end
end
toc
6. A から B 行列への変換を練習する
行列 B = 行列 A とし、B の負の数を非負の数に変更します。
A=zeros(3,3);
B=zeros(3,3);
A=[0 -1 4; 9 -14 25; -34 49 64];
B=A;
disp(B)
for n=(1:9)
if B(n)<0
B(n) = -B(n);
end
end
disp(B)
7.ブレイク
8.脚本執筆のヒント(脚本スキル)
プログラムを実行する前に変数とピクチャをクリアします。clc は画面をクリアすることです。; プログラムの結果を表示しません。...改行番号 (コードが長すぎます。次の行は上記のコードの続きです)。コマンドライン ctrl+c はプログラムを停止します。
9.スクリプトと関数 (スクリプトと関数)
平均的な組み込み関数を表示する
>> edit(which('mean.m'))
>>
10. ユーザー定義関数
最初の機能 - 自由落下
関数をスクリプトに保存します (ドット乗算が必要です。そうしないと 2 セットの配列を出力できません)。
function x = freebody(x0, v0, t)
% calculation of free falling
% x0: initial displacement in m
% v0: initial velocity in m/sec
% t: the elapsed time in sec
% x: the depth of falling in m
x = x0 +v0.*t + 1/2*9.8*t.*t;
コマンドラインウィンドウに入力します
11.複数の入出力を持つ関数(複数の入出力を持つ関数)
出力が複数ある場合は [] を使用します。
12. 体温調節訓練
1. 華氏温度を求め、対応する摂氏温度を計算します。温度を摂氏で表示すると、出力が数値でなくなるまで関数が実行されます。
間違いやすいポイントとしては、①y=F2Cと書く必要はない、そうしないとEnterを押した後にansが出力される、②入力値を入力するにはinputを使う、③dispは変数が1つしか出力できないので配列を使う、です。 ], ④摂氏 C を文字列に変換する必要があるため、num2str を使用します。
function F2C
n=1;
while n==1
F= input('Temperature in F:');
if isempty(F)
break;
else
C = 5 .*(F-32)./9;
disp(['==>Temperature in C:',num2str(C)])
%disp(['==>Temperature in C:',num2str(C,'%.2f')]) %num2str数字转字符,%.2f小数点后两位
end
end
13. 関数のデフォルト変数
ここでの意味は、pillar を呼び出すときにパラメータが 2 つだけ入力された場合、デフォルトの高さは 1 です。nargin は入力変数の実際の数の関数であり、varargin は変数入力パラメータのリストです。
14. 関数ハンドル (C 言語のポインタに似た関数ハンドル)
3つの変数(バリアブル)ファイルアクセス
1 MATLAB データ型
2.型変換
3. 文字列
unit16をASCIIコードに変換します。
4. アレイ
このうち、s1とs2は次元が異なるため行列に結合できません。
5.論理演算と代入(論理演算と代入)
さらに詳しい質問については、strcmp 関数を直接呼び出すのが最も簡単な方法です。
6. ストリングの練習を逆にする
ここで注意すべき点がいくつかあります。 ①入力 s1 は文字型として定義する必要があります。
function reverse
s1 = input('give a string:','s');
n = strlength(s1);
for i=1:n
s2(n-i+1) = s1(i);
end
disp(char(s2));
7.ストラクチャー(構造)
>> student.name = 'John Doe';
student.id = '[email protected]';
student.number = 301073268;
student.grade = [100, 75, 73; ...
95, 91, 85.5;...
100, 98, 72];
student
クラスメートが複数いる場合は、括弧を使用してそれらを格納します。
>> student(2).name = 'Ann Lane';
student(2).id = '[email protected]';
student(2).number = 301078853;
student(2).grade = [95, 100, 90; ...
95, 82, 97;...
100, 85, 100];
>> student
8. 演習: アン レーンの 3 年生の 90 点を求めます。明らかに、この問題は難しくありません。
9.構造機能
rmfield は構造体を削除し、fieldname は構造体の属性名を取得し、rmfield は構造体の特定の属性を削除して別の構造体を生成します。
10.入れ子構造(入れ子構造)
構造体のプロパティ値は構造体にすることができます。
このうち、A 構造体には data と nest という 2 つの属性があり、nest は属性 testnum、xdata、ydata を含む別の構造体です。
>> A = struct('data',[3 4 7; 8 0 1], 'nest',...
struct('testnum', 'Test 1',...
'xdata', [4 2 8],'ydata', [7 1 6]));
A(2).data = [9 3 2; 7 6 5];
A(2).nest.testnum = 'Test 2';
A(2).nest.xdata = [3 4 2];
A(2).nest.ydata = [5 0 9];
A.nest
11. cell 配列 (タプル) は中かっこを使用します。方法は 2 つあります。
>> A(1,1)={[1 4 3; 0 5 8; 7 2 9]};
A(1,2)={'Anne Smith'};
A(2,1)={3+7i};
A(2,2)={-pi:pi:pi};
A
A =
2×2 cell 数组
{3×3 double } {'Anne Smith' }
{[3.0000 + 7.0000i]} {[-3.1416 0 3.1416]}
>>
12. B タプルの作成を練習する
ここで 4 番目の部分はセルであるため、中括弧をネストする必要があります。
>> B(1,1)={['This is the first cell']};
B(1,2)={[5+j*6 4+j*5]};
B(2,1)={[1 2 3; 4 5 6; 7 8 9]};
B(2,2)={
{'Tim', 'Chris'}};
B
13. cell 配列へのアクセス (タプルの取得)
cell 配列の内容を確認する場合は中かっこを使用してください
行列内の値を抽出したい場合は、() を使用します。
14. cell 配列関数 (タプル関数)
cell2struct とセル変換 cell2struct
マジック キューブ マトリックスでは、各行、各列、および各対角線の合計は等しくなります。mat2cell は 3 つの行に分割され、列は変更されません。
15.多次元配列
行、列、レイヤー。
A と B を cat() で接続します
16.形を変える
>> A = {'James Bond', [1 2; 3 4; 5 6];pi, magic(5)}
A =
2×2 cell 数组
{'James Bond'} {3×2 double}
{[ 3.1416]} {5×5 double}
>> c = reshape(A,1,4)
c =
1×4 cell 数组
{'James Bond'} {[3.1416]} {3×2 double} {5×5 double}
>>
17. 形を変える練習をする
>> A = [1:3; 4:6]
A =
1 2 3
4 5 6
>> C = reshape(A,3,2)
C =
1 5
4 3
2 6
>>
18. ステータスの確認
19. ファイルアクセス
20.save()とload()
save はデータを保存すること、load はデータを取得することです。-ascii を追加した後、note でファイルを開くと値が表示されます。
2 つのファイルを赤いパスの下に保存します。
ちんぷんかんぷん
見られます
クリア後にファイルを読み取ると、ワークスペースに が表示されます
データを取得するには、Ascii に -ascii を追加する必要があります
>> load('mydata2.mat','-ascii')
21. 特定の変数のみを保存する
いろいろ調べてみたところ、特に良い方法がなかったので、保存する値を設定してから直接保存するというシンプルな方法を採用しました。mydata2 の最初の値は 16 なので、それを保存します。
22.Excelファイル読み込み
指定したディレクトリにExcelを作成する
2 つの方法は同じように解釈され、最初の方法では数値以外の部分が自動的に省略されます。
23. Excelファイルの書き込み
平均を計算する
このうち、「転置」は、matlabでは列ベクトルで計算するため、各人の平均値を転置する必要があります。このとき、平均値は実際には列ベクトルなので、計算完了後に転置が必要です。
平均値 M を対応する位置に書き込みます。
>> M = mean(Score')';
xlswrite('04Score.xlsx', M, 1,'E2:E4');
xlswrite('04Score.xlsx', {'Mean'}, 1, 'E1');
平均値を自動的に書き込みます
標準偏差を計算する
SD=std(Score,0,2);
xlswrite('04score.xlsx',SD,1,'F2:F4');
xlswrite('04score.xlsx',{'标准差'},1,'F1');
24. Excel スプレッドシートでテキストを取得する
数値とヘッダーを返すことができます。
ヘッダーはセルです
25. スコアをヘッダーに保存する練習をする
26. 低レベルファイル入出力
matlab がファイルを処理するには、ファイルに fid が必要です。ファイルのどの部分が処理されるのかを示すポインターもあります
ファイルを開くにも権限が必要です。
27. sin値の書き込み
%5.3f には合計 5 つの値があり、そのうち 3 つは小数点です
>> x = 0:pi/10:pi; y = sin(x); fid = fopen('sinx.txt', 'w');
for i = 1:11
fprintf(fid,'%5.3f %8.4f\n', x(i), y(i));
end
fclose(fid); type sinx.txt
28. ファイルの読み込み
名前は文字タイプなので、最初の文字が J、2 番目の文字が o など、最後まで 5 文字を読みます。
1 回目の実行は 1 行目、2 回目の実行は 2 行目です。
>> fid = fopen('04asciiData.txt','r');i=1;
while ~feof(fid)
name(i,:) = fscanf(fid, '%5c', 1);
year(i) = fscanf(fid, '%d', 1);
no1(i) = fscanf(fid, '%d', 1);
no2(i) = fscanf(fid, '%d', 1);
no3(i) = fscanf(fid, '%g', 1);
no4(i) = fscanf(fid, '%g\n');
i = i+1;
end
fclose(fid);
ワークスペースにはさらに多くの変数があることがわかります。
上記は、国立台湾大学 Guo Yanfu の MATLAB チュートリアルのメモの最初の部分です~
先生が書いたすべてのコードと演習はここにあります~フォローアップコースは次に更新されます。