Matlab-quick-guide

提供:Dev Guides
移動先:案内検索

MATLAB-概要

MATLAB(マトリックスラボ)は、数値計算、視覚化、プログラミングのための第4世代の高レベルプログラミング言語および対話型環境です。

'_MATLABはMathWorksによって開発されています。_

マトリックス操作が可能です。関数とデータのプロット;アルゴリズムの実装。ユーザーインターフェイスの作成。 C、C ++、Java、およびFORTRANを含む他の言語で作成されたプログラムとのインターフェース。データを分析します。アルゴリズムを開発します。モデルとアプリケーションを作成します。

数学的な計算、プロットの生成、数値的手法の実行を支援する多数の組み込みコマンドと数学関数があります。

MATLABの計算数学の力

MATLABは、計算数学のあらゆる面で使用されています。 以下は、最も一般的に使用されるいくつかの一般的に使用される数学的計算です-

  • 行列と配列を扱う
  • 2次元および3次元のプロットとグラフィックス
  • 線形代数
  • 代数方程式
  • 非線形関数
  • 統計
  • データ分析
  • 微積分と微分方程式
  • 数値計算
  • 統合
  • 変換
  • カーブフィット
  • その他のさまざまな特殊機能

MATLABの機能

以下は、MATLABの基本的な機能です-

  • これは、数値計算、視覚化、およびアプリケーション開発のための高水準言語です。
  • また、反復的な調査、設計、問題解決のためのインタラクティブな環境も提供します。
  • 線形代数、統計、フーリエ解析、フィルタリング、最適化、数値積分、および常微分方程式を解くための数学関数の膨大なライブラリを提供します。
  • データを視覚化するための組み込みグラフィックスと、カスタムプロットを作成するためのツールを提供します。
  • MATLABのプログラミングインターフェイスは、コード品質の保守性を向上させ、パフォーマンスを最大化する開発ツールを提供します。
  • カスタムグラフィカルインターフェイスを備えたアプリケーションを構築するためのツールを提供します。
  • MATLABベースのアルゴリズムを外部アプリケーションおよびC、Java、.NET、Microsoft Excelなどの言語と統合するための機能を提供します。

MATLABの使用

MATLABは、物理学、化学、数学、およびすべての工学ストリームの分野を含む科学および工学の計算ツールとして広く使用されています。 それを含むアプリケーションの範囲で使用されています-

  • 信号処理と通信
  • 画像およびビデオ処理
  • 制御システム
  • テストおよび測定
  • 計算ファイナンス
  • 計算生物学

MATLAB-環境設定

ローカル環境のセットアップ

MATLAB環境のセットアップは、数回クリックするだけです。 インストーラーはhttps://www.mathworks.com/downloads/web_downloads/[こちら]からダウンロードできます。

MathWorksは、ライセンス製品、試用版、学生版も提供しています。 サイトにログインして、承認を少し待つ必要があります。

インストーラーをダウンロードした後、数回クリックするだけでソフトウェアをインストールできます。

MATLABのオンラインインストール、scaledwidth = 100.0%

Installing、scaledwidth = 100.0%

MATLAB環境を理解する

MATLAB開発IDEは、デスクトップに作成されたアイコンから起動できます。 MATLABのメイン作業ウィンドウはデスクトップと呼ばれます。 MATLABが起動すると、デスクトップはデフォルトのレイアウトで表示されます-

MATLAB desktop、scaledwidth = 100.0%

デスクトップには次のパネルがあります-

  • 現在のフォルダ-このパネルでは、プロジェクトのフォルダとファイルにアクセスできます。

現在のフォルダー

  • コマンドウィンドウ-これは、コマンドラインでコマンドを入力できるメインエリアです。 コマンドプロンプト(>>)で示されます。

コマンドウィンドウ

  • ワークスペース-ワークスペースには、ファイルから作成またはインポートされたすべての変数が表示されます。

ワークスペース

  • コマンド履歴-このパネルは、コマンドラインで入力されたコマンドを表示または返します。

コマンド履歴

GNU Octaveをセットアップする

マシン(Linux、BSD、OS XまたはWindows)でOctaveを使用する場合は、http://www.gnu.org/software/octave/downloadl [Download GNU Octave]から最新バージョンをダウンロードしてください。 マシンの特定のインストール手順を確認できます。

MATLAB-基本構文

MATLAB環境は、超複雑な計算機のように動作します。 >>コマンドプロンプトでコマンドを入力できます。

MATLABは解釈された環境です。 つまり、コマンドを入力すると、MATLABがすぐに実行します。

ハンズオンプラクティス

たとえば、有効な式を入力します

5 + 5

ENTERを押す

実行ボタンをクリックするか、Ctrl + Eを入力すると、MATLABはすぐに実行し、返される結果は-

ans = 10

さらにいくつかの例を取り上げましょう-

3 ^ 2          % 3 raised to the power of 2

実行ボタンをクリックするか、Ctrl + Eを入力すると、MATLABはすぐに実行し、返される結果は-

ans = 9

もう一つの例、

sin(pi/2)    % sine of angle 90o

実行ボタンをクリックするか、Ctrl + Eを入力すると、MATLABはすぐに実行し、返される結果は-

ans = 1

もう一つの例、

7/0           % Divide by zero

実行ボタンをクリックするか、Ctrl + Eを入力すると、MATLABはすぐに実行し、返される結果は-

ans = Inf
warning: division by zero

もう一つの例、

732 *20.3

実行ボタンをクリックするか、Ctrl + Eを入力すると、MATLABはすぐに実行し、返される結果は-

ans =  1.4860e+04

MATLABは、πのpi、∞のInf、√-1のi(およびj)など、いくつかの数学記号に特別な式を提供します。* Nan *は「not a number」の略です。

MATLABでのセミコロン(;)の使用

セミコロン(;)はステートメントの終わりを示します。 ただし、式のMATLAB出力を抑制して非表示にする場合は、式の後にセミコロンを追加します。

例えば、

x = 3;
y = x + 5

実行ボタンをクリックするか、Ctrl + Eを入力すると、MATLABはすぐに実行し、返される結果は-

y =  8

コメントを追加する

パーセント記号(%)は、コメント行を示すために使用されます。 例えば、

x = 9        % assign the value 9 to x

ブロックコメント演算子%\ {および%}を使用してコメントのブロックを記述することもできます。

MATLABエディターには、コメントの形式を追加、削除、または変更するのに役立つツールとコンテキストメニュー項目が含まれています。

一般的に使用される演算子と特殊文字

MATLABは、次の一般的に使用される演算子と特殊文字をサポートしています-

Operator Purpose
+ Plus; addition operator.
- Minus; subtraction operator.
* Scalar and matrix multiplication operator.
.* Array multiplication operator.
^ Scalar and matrix exponentiation operator.
.^ Array exponentiation operator.
\ Left-division operator.
/ Right-division operator.
.\ Array left-division operator.
./ Array right-division operator.
: Colon; generates regularly spaced elements and represents an entire row or column.
( ) Parentheses; encloses function arguments and array indices; overrides precedence.
[ ] Brackets; enclosures array elements.
. Decimal point.
Ellipsis; line-continuation operator
, Comma; separates statements and elements in a row
; Semicolon; separates columns and suppresses display.
% Percent sign; designates a comment and specifies formatting.
_ Quote sign and transpose operator.
._ Nonconjugated transpose operator.
= Assignment operator.

特別な変数と定数

MATLABは、次の特別な変数と定数をサポートしています-

Name Meaning
ans Most recent answer.
eps Accuracy of floating-point precision.
i,j The imaginary unit √-1.
Inf Infinity.
NaN Undefined numerical result (not a number).
pi The number π

変数の命名

変数名は、文字とそれに続く任意の数の文字、数字、またはアンダースコアで構成されます。

MATLABは*大文字と小文字を区別します*。

変数名の長さは任意ですが、MATLABは最初のN文字のみを使用します。Nは関数 namelengthmax で指定されます。

作業を保存する

*save* コマンドは、ワークスペース内のすべての変数を、.mat拡張子を持つファイルとして現在のディレクトリに保存するために使用されます。

例えば、

save myfile
*load* コマンドを使用して、いつでもファイルをリロードできます。
load myfile

MATLAB-変数

MATLAB環境では、すべての変数は配列または行列です。

変数を簡単な方法で割り当てることができます。 例えば、

x = 3          % defining x and initializing it with a value

MATLABは上記のステートメントを実行し、次の結果を返します-

x = 3

_x_という名前の1行1列の行列を作成し、その要素に値3を格納します。 別の例を確認してみましょう。

x = sqrt(16)    % defining x and initializing it with an expression

MATLABは上記のステートメントを実行し、次の結果を返します-

x = 4

次のことに注意してください-

  • 変数がシステムに入力されると、後で参照できます。
  • 変数は、使用する前に値を持っている必要があります。
  • 式が変数に割り当てられていない結果を返す場合、システムはそれをansという名前の変数に割り当てます。これは後で使用できます。

例えば、

sqrt(78)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =  8.8318

この変数を使用できます ans -

sqrt(78);
9876/ans

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =  1118.2

別の例を見てみましょう-

x = 7 *8;
y = x* 7.89

MATLABは上記のステートメントを実行し、次の結果を返します-

y =  441.84

複数の割り当て

同じ行に複数の割り当てを持つことができます。 例えば、

a = 2; b = 7; c = a * b

MATLABは上記のステートメントを実行し、次の結果を返します-

c = 14

変数を忘れてしまいました!

*who* コマンドは、使用したすべての変数名を表示します。
who

MATLABは上記のステートメントを実行し、次の結果を返します-

Your variables are:
a    ans  b    c
*whos* コマンドは変数についてもう少し表示します-
  • 現在メモリにある変数
  • 各変数のタイプ
  • 各変数に割り当てられたメモリ
  • 複雑な変数であるかどうか
whos

MATLABは上記のステートメントを実行し、次の結果を返します-

Attr Name        Size        Bytes      Class
==== ====        ====        ====       =====
   a             1x1           8        double
   ans           1x70         757        cell
   b             1x1           8        double
   c             1x1           8        double

Total is 73 elements using 781 bytes
*clear* コマンドは、すべての(または指定された)変数をメモリから削除します。
clear x     % it will delete x, won't display anything
clear       % it will delete all variables in the workspace
            %  peacefully and unobtrusively

長い課題

長い割り当ては、省略記号(…​)を使用して別の行に拡張できます。 例えば、

initial_velocity = 0;
acceleration = 9.8;
time = 20;
final_velocity = initial_velocity + acceleration * time

MATLABは上記のステートメントを実行し、次の結果を返します-

final_velocity = 196

formatコマンド

デフォルトでは、MATLABは小数点以下4桁の数値を表示します。 これは*ショートフォーマット*と呼ばれます。

ただし、より正確にしたい場合は、 format コマンドを使用する必要があります。

*format long* コマンドは、10進数の後に16桁を表示します。

たとえば-

format long
x = 7 + 10/3 + 5 ^ 1.2

MATLABは上記のステートメントを実行し、次の結果を返します。

x = 17.2319816406394

もう一つの例、

format short
x = 7 + 10/3 + 5 ^ 1.2

MATLABは上記のステートメントを実行し、次の結果を返します-

x = 17.232
*format bank* コマンドは、数値を小数点以下2桁に丸めます。 例えば、
format bank
daily_wage = 177.45;
weekly_wage = daily_wage * 6

MATLABは上記のステートメントを実行し、次の結果を返します-

weekly_wage = 1064.70

MATLABは、指数表記を使用して大きな数値を表示します。

*format short e* コマンドを使用すると、小数点以下4桁に指数を加えた指数形式で表示できます。

例えば、

format short e
4.678 * 4.9

MATLABは上記のステートメントを実行し、次の結果を返します-

ans = 2.2922e+01
*format long e* コマンドを使用すると、小数点以下4桁に指数を加えた指数形式で表示できます。 例えば、
format long e
x = pi

MATLABは上記のステートメントを実行し、次の結果を返します-

x = 3.141592653589793e+00
*format rat* コマンドは、計算の結果として最も近い有理式を提供します。 例えば、
format rat
4.678 * 4.9

MATLABは上記のステートメントを実行し、次の結果を返します-

ans = 34177/1491

ベクターの作成

ベクトルは、数値の1次元配列です。 MATLABは、2種類のベクトルを作成することができます-

  • 行ベクトル
  • 列ベクトル
  • 行ベクトル*は、要素のセットを角括弧で囲み、スペースまたはコンマを使用して要素を区切ることによって作成されます。

例えば、

r = [7 8 9 10 11]

MATLABは上記のステートメントを実行し、次の結果を返します-

r =

   7    8    9   10   11

もう一つの例、

r = [7 8 9 10 11];
t = [2, 3, 4, 5, 6];
res = r + t

MATLABは上記のステートメントを実行し、次の結果を返します-

res =

         9         11         13         15         17
  • 列ベクトル*は、要素を区切るためにセミコロン(;)を使用して、要素のセットを角括弧で囲むことによって作成されます。
c = [7;  8;  9;  10; 11]

MATLABは上記のステートメントを実行し、次の結果を返します-

c =
       7
       8
       9
      10
      11

行列の作成

マトリックスは、数値の2次元配列です。

MATLABでは、各行をスペースまたはコンマで区切られた要素のシーケンスとして入力することで行列が作成され、行の終わりはセミコロンで区切られます。 たとえば、次のように3行3列の行列を作成します-

m = [1 2 3; 4 5 6; 7 8 9]

MATLABは上記のステートメントを実行し、次の結果を返します-

m =
       1              2              3
       4              5              6
       7              8              9

MATLAB-コマンド

MATLABは、数値計算とデータ視覚化のための対話型プログラムです。 コマンドを入力するには、*コマンドウィンドウ*のMATLABプロンプト '>>'にコマンドを入力します。

このセクションでは、一般的に使用される一般的なMATLABコマンドのリストを提供します。

セッションを管理するためのコマンド

MATLABは、セッションを管理するためのさまざまなコマンドを提供します。 次の表は、そのようなすべてのコマンドを提供します-

Command Purpose
clc Clears command window.
clear Removes variables from memory.
exist Checks for existence of file or variable.
global Declares variables to be global.
help Searches for a help topic.
lookfor Searches help entries for a keyword.
quit Stops MATLAB.
who Lists current variables.
whos Lists current variables (long display).

システムを操作するためのコマンド

MATLABは、現在の作業をファイルとしてワークスペースに保存し、後でファイルをロードするなど、システムを操作するためのさまざまな便利なコマンドを提供します。

また、日付の表示、ディレクトリ内のファイルの一覧表示、現在のディレクトリの表示など、他のシステム関連のアクティビティのためのさまざまなコマンドも提供します。

次の表は、いくつかの一般的に使用されるシステム関連のコマンドを示しています-

Command Purpose
cd Changes current directory.
date Displays current date.
delete Deletes a file.
diary Switches on/off diary file recording.
dir Lists all files in current directory.
load Loads workspace variables from a file.
path Displays search path.
pwd Displays current directory.
save Saves workspace variables in a file.
type Displays contents of a file.
what Lists all MATLAB files in the current directory.
wklread Reads .wk1 spreadsheet file.

入出力コマンド

MATLABは、次の入力および出力関連のコマンドを提供します-

Command Purpose
disp Displays contents of an array or string.
fscanf Read formatted data from a file.
format Controls screen-display format.
fprintf Performs formatted writes to screen or file.
input Displays prompts and waits for input.
; Suppresses screen printing.
*fscanf* および *fprintf* コマンドは、C scanfおよびprintf関数のように動作します。 彼らは次のフォーマットコードをサポートしています-
Format Code Purpose
%s Format as a string.
%d Format as an integer.
%f Format as a floating point value.
%e Format as a floating point value in scientific notation.
%g Format in the most compact form: %f or %e.
\n Insert a new line in the output string.
\t Insert a tab in the output string.

フォーマット機能には、数値表示に使用される次の形式があります-

Format Function Display up to
format short Four decimal digits (default).
format long 16 decimal digits.
format short e Five digits plus exponent.
format long e 16 digits plus exponents.
format bank Two decimal digits.
format
Positive, negative, or zero.
format rat Rational approximation.
format compact Suppresses some line feeds.
format loose Resets to less compact display mode.

ベクトル、行列、配列コマンド

次の表は、配列、行列、ベクトルの操作に使用されるさまざまなコマンドを示しています-

Command Purpose
cat Concatenates arrays.
find Finds indices of nonzero elements.
length Computes number of elements.
linspace Creates regularly spaced vector.
logspace Creates logarithmically spaced vector.
max Returns largest element.
min Returns smallest element.
prod Product of each column.
reshape Changes size.
size Computes array size.
sort Sorts each column.
sum Sums each column.
eye Creates an identity matrix.
ones Creates an array of ones.
zeros Creates an array of zeros.
cross Computes matrix cross products.
dot Computes matrix dot products.
det Computes determinant of an array.
inv Computes inverse of a matrix.
pinv Computes pseudoinverse of a matrix.
rank Computes rank of a matrix.
rref Computes reduced row echelon form.
cell Creates cell array.
celldisp Displays cell array.
cellplot Displays graphical representation of cell array.
num2cell Converts numeric array to cell array.
deal Matches input and output lists.
iscell Identifies cell array.

プロットコマンド

MATLABは、グラフをプロットするための多数のコマンドを提供します。 次の表は、プロットに一般的に使用されるコマンドの一部を示しています-

Command Purpose
axis Sets axis limits.
fplot Intelligent plotting of functions.
grid Displays gridlines.
plot Generates xy plot.
print Prints plot or saves plot to a file.
title Puts text at top of plot.
xlabel Adds text label to x-axis.
ylabel Adds text label to y-axis.
axes Creates axes objects.
close Closes the current plot.
close all Closes all plots.
figure Opens a new figure window.
gtext Enables label placement by mouse.
hold Freezes current plot.
legend Legend placement by mouse.
refresh Redraws current figure window.
set Specifies properties of objects such as axes.
subplot Creates plots in subwindows.
text Places string in figure.
bar Creates bar chart.
loglog Creates log-log plot.
polar Creates polar plot.
semilogx Creates semilog plot. (logarithmic abscissa).
semilogy Creates semilog plot. (logarithmic ordinate).
stairs Creates stairs plot.
stem Creates stem plot.

MATLAB-Mファイル

これまで、MATLAB環境を計算機として使用しました。 ただし、MATLABは強力なプログラミング言語であり、インタラクティブな計算環境でもあります。

前の章で、MATLABコマンドプロンプトからコマンドを入力する方法を学習しました。 また、MATLABを使用すると、一連のコマンドをファイルに書き込んで、関数を作成して呼び出すなど、完全なユニットとしてファイルを実行することができます。

Mファイル

MATLABは2種類のプログラムファイルを書くことができます-

  • スクリプト-スクリプトファイルは、*。m拡張子*のプログラムファイルです。 これらのファイルには、一緒に実行する一連のコマンドを記述します。 スクリプトは入力を受け入れず、出力を返しません。 ワークスペース内のデータを操作します。
  • 関数-関数ファイルは、*。m拡張子*のプログラムファイルでもあります。 関数は入力を受け入れ、出力を返すことができます。 内部変数は関数に対してローカルです。

MATLABエディターまたは他のテキストエディターを使用して、。mファイルを作成できます。 このセクションでは、スクリプトファイルについて説明します。 スクリプトファイルには、MATLABコマンドと関数呼び出しの複数の連続した行が含まれています。 コマンドラインで名前を入力することにより、スクリプトを実行できます。

スクリプトファイルの作成と実行

スクリプトファイルを作成するには、テキストエディターを使用する必要があります。 あなたは2つの方法でMATLABエディタを開くことができます-

  • コマンドプロンプトを使用する
  • IDEを使用する

コマンドプロンプトを使用している場合は、コマンドプロンプトで edit と入力します。 これにより、エディターが開きます。 edit を直接入力してから、ファイル名(拡張子.m)を入力できます

edit
Or
edit <filename>

上記のコマンドは、デフォルトのMATLABディレクトリにファイルを作成します。 すべてのプログラムファイルを特定のフォルダーに保存する場合は、パス全体を指定する必要があります。

progsという名前のフォルダーを作成しましょう。 コマンドプロンプトで次のコマンドを入力します(>>)-

mkdir progs    % create directory progs under default directory
chdir progs    % changing the current directory to progs
edit  prog1.m  % creating an m file named prog1.m

初めてファイルを作成する場合、MATLABは確認を求めます。 はいをクリックします。

スクリプトファイルの作成、scaledwidth = 100.0%

または、IDEを使用している場合は、[新規]→ [スクリプト]を選択します。 また、エディターが開き、Untitledという名前のファイルが作成されます。 コードを入力した後、ファイルに名前を付けて保存できます。

エディターで次のコードを入力します-

NoOfStudents = 6000;
TeachingStaff = 150;
NonTeachingStaff = 20;

Total = NoOfStudents + TeachingStaff ...
   + NonTeachingStaff;
disp(Total);

ファイルを作成して保存した後、あなたは2つの方法でそれを実行することができます-

  • エディターウィンドウの[実行]ボタンをクリックするか、 *コマンドプロンプトでファイル名(拡張子なし)を入力するだけです:>> prog1

コマンドウィンドウプロンプトは結果を表示します-

6170

スクリプトファイルを作成し、次のコードを入力します-

a = 5; b = 7;
c = a + b
d = c + sin(b)
e = 5* d
f = exp(-d)

上記のコードをコンパイルして実行すると、次の結果が生成されます-

c =  12
d =  12.657
e =  63.285
f =    3.1852e-06

MATLAB-データ型

MATLABは、型宣言または次元ステートメントを必要としません。 MATLABは、新しい変数名を検出するたびに、変数を作成し、適切なメモリスペースを割り当てます。

変数が既に存在する場合、MATLABは元のコンテンツを新しいコンテンツに置き換え、必要に応じて新しいストレージスペースを割り当てます。

例えば、

Total = 42

上記のステートメントは、 'Total’という名前の1行1列の行列を作成し、値42を格納します。

MATLABで利用可能なデータ型

MATLABは15の基本データ型を提供します。 すべてのデータ型には、マトリックスまたは配列の形式のデータが格納されます。 この行列または配列のサイズは、最小で0行0列であり、任意のサイズの行列または配列に拡大できます。

次の表は、MATLABで最も一般的に使用されるデータ型を示しています-

Sr.No. Data Type & Description
1

int8

8ビット符号付き整数

2

uint8

8ビット符号なし整数

3

int16

16ビット符号付き整数

4

uint16

16ビット符号なし整数

5

int32

32ビット符号付き整数

6

uint32

32ビット符号なし整数

7

int64

64ビット符号付き整数

8

uint64

64ビット符号なし整数

9

single

単精度数値データ

10

double

倍精度数値データ

11

logical

1または0の論理値は、それぞれtrueとfalseを表します

12

char

文字データ(文字列は文字のベクトルとして保存されます)

13

cell array

それぞれが異なる次元とデータ型の配列を格納できるインデックス付きセルの配列

14

structure

Cに似た構造。各構造には、異なる次元とデータ型の配列を格納できる名前付きフィールドがあります

15

function handle

関数へのポインター

16

user classes

ユーザー定義のクラスから構築されたオブジェクト

17

java classes

Javaクラスから構築されたオブジェクト

次のコードでスクリプトファイルを作成します-

str = 'Hello World!'
n = 2345
d = double(n)
un = uint32(789.50)
rn = 5678.92347
c = int32(rn)

上記のコードをコンパイルして実行すると、次の結果が生成されます-

str = Hello World!
n =  2345
d =  2345
un = 790
rn = 5678.9
c =  5679

データ型変換

MATLABは、あるデータ型から別のデータ型に値を変換するためのさまざまな関数を提供します。 次の表は、データ型変換関数を示しています-

Function Purpose
char Convert to character array (string)
int2str Convert integer data to string
mat2str Convert matrix to string
num2str Convert number to string
str2double Convert string to double-precision value
str2num Convert string to number
native2unicode Convert numeric bytes to Unicode characters
unicode2native Convert Unicode characters to numeric bytes
base2dec Convert base N number string to decimal number
bin2dec Convert binary number string to decimal number
dec2base Convert decimal to base N number in string
dec2bin Convert decimal to binary number in string
dec2hex Convert decimal to hexadecimal number in string
hex2dec Convert hexadecimal number string to decimal number
hex2num Convert hexadecimal number string to double-precision number
num2hex Convert singles and doubles to IEEE hexadecimal strings
cell2mat Convert cell array to numeric array
cell2struct Convert cell array to structure array
cellstr Create cell array of strings from character array
mat2cell Convert array to cell array with potentially different sized cells
num2cell Convert array to cell array with consistently sized cells
struct2cell Convert structure to cell array

データ型の決定

MATLABは、変数のデータ型を識別するためのさまざまな関数を提供します。

次の表は、変数のデータ型を決定するための機能を提供します-

Function Purpose
is Detect state
isa Determine if input is object of specified class
iscell Determine whether input is cell array
iscellstr Determine whether input is cell array of strings
ischar Determine whether item is character array
isfield Determine whether input is structure array field
isfloat Determine if input is floating-point array
ishghandle True for Handle Graphics object handles
isinteger Determine if input is integer array
isjava Determine if input is Java object
islogical Determine if input is logical array
isnumeric Determine if input is numeric array
isobject Determine if input is MATLAB object
isreal Check if input is real array
isscalar Determine whether input is scalar
isstr Determine whether input is character array
isstruct Determine whether input is structure array
isvector Determine whether input is vector
class Determine class of object
validateattributes Check validity of array
whos List variables in workspace, with sizes and types

次のコードでスクリプトファイルを作成します-

x = 3
isinteger(x)
isfloat(x)
isvector(x)
isscalar(x)
isnumeric(x)

x = 23.54
isinteger(x)
isfloat(x)
isvector(x)
isscalar(x)
isnumeric(x)

x = [1 2 3]
isinteger(x)
isfloat(x)
isvector(x)
isscalar(x)

x = 'Hello'
isinteger(x)
isfloat(x)
isvector(x)
isscalar(x)
isnumeric(x)

ファイルを実行すると、次の結果が生成されます-

x = 3
ans = 0
ans = 1
ans = 1
ans = 1
ans = 1
x = 23.540
ans = 0
ans = 1
ans = 1
ans = 1
ans = 1
x =

          1          2          3

ans = 0
ans = 1
ans = 1
ans = 0
x = Hello
ans = 0
ans = 0
ans = 1
ans = 0
ans = 0

MATLAB-演算子

演算子は、特定の数学的または論理的な操作を実行するようコンパイラーに指示する記号です。 MATLABは、主に行列と配列全体で動作するように設計されています。 したがって、MATLABの演算子は、スカラーデータと非スカラーデータの両方で機能します。 MATLABは、次の種類の基本操作を許可します-

  • 算術演算子
  • 関係演算子
  • 論理演算子
  • ビット演算
  • セット操作

算術演算子

MATLABでは、2種類の算術演算が可能です-

  • 行列算術演算 *配列算術演算

行列算術演算は、線形代数で定義されているものと同じです。 配列操作は、1次元配列と多次元配列の両方で、要素ごとに実行されます。

行列演算子と配列演算子は、ピリオド(。)記号で区別されます。 ただし、加算と減算の演算は行列と配列で同じなので、演算子は両方の場合で同じです。 次の表は、演算子の簡単な説明を示します-

リンク:/matlab/matlab_arithmetic_operators [例を表示]

Sr.No. Operator & Description
1
  • +*

加算または単項プラス。 A + Bは、変数AおよびBに格納されている値を追加します。 AとBは、一方がスカラーでない限り、同じサイズでなければなりません。 スカラーは、任意のサイズの行列に追加できます。

2

-

減算または単項マイナス。 A-Bは、AからBの値を減算します。 AとBは、一方がスカラーでない限り、同じサイズでなければなりません。 スカラーは、任意のサイズの行列から減算できます。

3

行列の乗算。 C = A * Bは、行列AとBの線形代数積です。 より正確に、

行列乗算

非スカラーAおよびBの場合、Aの列数はBの行数と等しくなければなりません。 スカラーは、任意のサイズの行列を乗算できます。

4
  • .*.

配列の乗算。 A. *Bは、配列AとBの要素ごとの積です。 AとBは、どちらかがスカラーでない限り、同じサイズでなければなりません。

5

/

スラッシュまたは行列の右除算。 B/Aは、B * inv(A)とほぼ同じです。 より正確には、B/A =(A '\ B') 'です。

6

./ ./

配列の右除算。 A./Bは、要素A(i、j)/B(i、j)の行列です。 AとBは、どちらかがスカラーでない限り、同じサイズでなければなりません。

7

\

バックスラッシュまたは行列の左除算。 Aが正方行列の場合、A \ Bは異なる方法で計算されることを除いて、inv(A) *Bとほぼ同じです。 Aがn行n列の行列で、Bがn個の成分を持つ列ベクトル、またはそのような列をいくつか含む行列である場合、X = A \ Bは方程式_AX = B_の解です。 Aが適切にスケーリングされていないか、ほぼ特異な場合、警告メッセージが表示されます。

8
  • .\*

配列の左除算。 A. \ Bは、要素B(i、j)/A(i、j)の行列です。 AとBは、どちらかがスカラーでない限り、同じサイズでなければなりません。

9

^

マトリックスの力。 X ^ pは、pがスカラーの場合、Xのp乗です。 pが整数の場合、累乗は繰り返し2乗して計算されます。 整数が負の場合、Xが最初に反転されます。 pの他の値の場合、[V、D] = eig(X)の場合、X ^ p = V *D. ^ p/Vとなるように、計算には固有値と固有ベクトルが含まれます。

10
  • .^*

アレイ電源。 A. ^ Bは、要素A(i、j)のB(i、j)乗の行列です。 AとBは、どちらかがスカラーでない限り、同じサイズでなければなりません。

11

''

マトリックス転置。 A 'はAの線形代数転置です。 複素行列の場合、これは複素共役転置です。

12

.'

配列転置。 A. ' Aの配列転置です。 複雑な行列の場合、これには共役は含まれません。

関係演算子

関係演算子は、スカラーデータと非スカラーデータの両方で機能することもできます。 配列の関係演算子は、2つの配列間で要素ごとの比較を実行し、同じサイズの論理配列を返します。関係がtrueの場合は論理1(true)に設定され、要素は論理0(false)に設定されますありません。

次の表は、MATLABで利用可能な関係演算子を示しています-

link:/matlab/matlab_relational_operators [例を表示]

Sr.No. Operator & Description
1

<

未満

2

より小さいか等しい

3

>

より大きい

4

>=

以上

5

== ==

に等しい

6

~=

等しくない

論理演算子

MATLABは、論理演算子と関数の2種類を提供しています-

  • 要素単位-これらの演算子は、論理配列の対応する要素を操作します。 *短絡-これらの演算子はスカラーおよび論理式で動作します。

要素単位の論理演算子は、論理配列の要素ごとに動作します。 記号&、|、および〜は、論理配列演算子AND、OR、およびNOTです。

短絡論理演算子は、論理演算の短絡を可能にします。 記号&&および||論理短絡演算子ANDおよびORです。

リンク:/matlab/matlab_logical_operators [例を表示]

ビット演算

ビットごとの演算子はビットに対して機能し、ビットごとの操作を実行します。 &、|、および^の真理値表は次のとおりです-

p q p & q p q
p ^ q 0 0 0 0
0 0 1 0 1
1 1 1 1 1
0 1 0 0 1

A = 60であると仮定します。およびB = 13;今バイナリ形式では、次のようになります-

A = 0011 1100

B = 0000 1101

A&B = 0000 1100

A | B = 0011 1101

A ^ B = 0011 0001

〜A = 1100 0011

MATLABは、「ビット単位のand」、「ビット単位のor」、「ビット単位のnot」演算、シフト演算などのビット単位演算用のさまざまな関数を提供します。

次の表は、一般的に使用されるビット演算を示しています-

link:/matlab/matlab_bitwise_operators [例を表示]

[cols="^,",options="header",]
|===
|Function |Purpose |bitand(a, b) |Bit-wise AND of integers _a_ and _b_ |bitcmp(a) |Bit-wise complement of _a_ |bitget(a,pos) |Get bit at specified position _pos_, in the integer array _a_ |bitor(a, b) |Bit-wise OR of integers _a_ and _b_ |bitset(a, pos) |Set bit at specific location _pos_ of _a_ |bitshift(a, k) |Returns _a_ shifted to the left by _k_ bits, equivalent to multiplying by 2^k^. Negative values of k correspond to shifting bits right or dividing by 2^|k|^ and rounding to the nearest integer towards negative infinite. Any overflow bits are truncated. |bitxor(a, b) |Bit-wise XOR of integers _a_ and _b_ |swapbytes |Swap byte ordering
|===

=== セット操作

MATLABは、集合、交差、集合メンバーシップのテストなどの集合演算用のさまざまな関数を提供します。

次の表は、いくつかの一般的に使用されるセット操作を示しています-

link:/matlab/matlab_set_operators [例を表示]

[width="100%",cols="50%,50%",options="header",]
|===
|Sr.No. |Function & Description |1 a|* intersect(A,B)*

2つの配列の共通部分を設定します。 AとBの両方に共通の値を返します。 返される値はソートされた順序です。

|2 a| *intersect(A,B,'rows')*

Aの各行とBの各行を単一のエンティティとして扱い、AとBの両方に共通の行を返します。 返されたマトリックスの行はソートされた順序になります。

|3 a| *ismember(A,B)*

Aと同じサイズの配列を返します。Aの要素がBにある場合は1(true)が含まれます。 それ以外の場合、0(false)を返します。

|4 a| *ismember(A,B,'rows')*

Aの各行とBの各行を単一のエンティティとして扱い、行列Aの行もBの行でもある1(true)を含むベクトルを返します。 それ以外の場合、0(false)を返します。

|5 a| *issorted(A)*

Aの要素が並べ替えられている場合は論理値1(true)を返し、そうでない場合は論理値0(false)を返します。 入力Aは、ベクトル、または文字列のN行1列または1行N列のセル配列です。 *Aは、A* とsort(A)の出力が等しい場合にソートされたと見なされます。

|6 a| *issorted(A, 'rows')*

2次元行列Aの行が並べ替えられている場合は論理値1(true)を返し、そうでない場合は論理値0(false)を返します。 *A* とsortrows(A)の出力が等しい場合、マトリックスAはソートされていると見なされます。

|7 a| *setdiff(A,B)*

2つの配列の差を設定します。 BにないAの値を返します。 返される配列の値は、ソートされた順序になっています。

|8 a| *setdiff(A,B,'rows')*

Aの各行とBの各行を単一のエンティティとして扱い、BにないAの行を返します。 返されたマトリックスの行はソートされた順序になります。

'rows'オプションはセル配列をサポートしません。

|9 a| *setxor*

2つの配列の排他的ORを設定します

|10 a| *union*

2つの配列の和集合を設定します

|11 a| *unique*

配列内の一意の値

|===

MATLAB-意思決定

意思決定構造では、プログラマーは、プログラムが評価またはテストする1つまたは複数の条件を、条件が真であると判断された場合に実行されるステートメント、およびオプションで、条件は偽と判断されます。

以下は、ほとんどのプログラミング言語で見られる典型的な意思決定構造の一般的な形式です-

MATLABの意思決定ステートメント

MATLABは、次のタイプの意思決定ステートメントを提供します。 詳細を確認するには、次のリンクをクリックしてください-

Sr.No. Statement & Description
1

if …​ end statement

  • if …​ endステートメント*は、ブール式とそれに続く1つ以上のステートメントで構成されます。
2

if…​else…​end statement

  • ifステートメント*の後にオプションの* elseステートメント*を続けることができます。これはブール式がfalseの場合に実行されます。
3

If…​ elseif…​elseif…​else…​end statements

  • if* ステートメントの後に、1つ(または複数)のオプションの *elseif ...* と *else* ステートメントを続けることができます。これは、さまざまな条件をテストするのに非常に役立ちます。
4

nested if statements

1つの if または elseif ステートメントを別の if または elseif ステートメント内で使用できます。

5

switch statement

  • switch* ステートメントを使用すると、変数を値のリストと等しいかどうかをテストできます。
6

nested switch statements

1つの switch ステートメントを別の switch ステートメント内で使用できます。

MATLAB-ループタイプ

コードのブロックを数回実行する必要がある場合があります。 一般に、ステートメントは順番に実行されます。 関数の最初のステートメントが最初に実行され、次に2番目のステートメントが実行されます。

プログラミング言語は、より複雑な実行パスを可能にするさまざまな制御構造を提供します。

ループステートメントを使用すると、ステートメントまたはステートメントのグループを複数回実行できます。ほとんどのプログラミング言語では、ループステートメントの一般的な形式は次のとおりです-

ループアーキテクチャ

MATLABは、ループ要件を処理するために次のタイプのループを提供します。 詳細を確認するには、次のリンクをクリックしてください-

Sr.No. Loop Type & Description
1

while loop

特定の条件が真の間、ステートメントまたはステートメントのグループを繰り返します。 ループ本体を実行する前に条件をテストします。

2

for loop

一連のステートメントを複数回実行し、ループ変数を管理するコードを短縮します。

3

nested loops

別のループ内で1つ以上のループを使用できます。

ループ制御ステートメント

ループ制御ステートメントは、通常のシーケンスから実行を変更します。 実行がスコープを離れると、そのスコープで作成されたすべての自動オブジェクトが破棄されます。

MATLABは、次の制御ステートメントをサポートしています。 詳細を確認するには、次のリンクをクリックしてください。

Sr.No. Control Statement & Description
1

break statement

  • loop* ステートメントを終了し、ループの直後のステートメントに実行を転送します。
2

continue statement

ループがその本体の残りをスキップし、反復する前にその状態をすぐに再テストします。

MATLAB-ベクトル

ベクトルは、数値の1次元配列です。 MATLABは、2種類のベクトルを作成することができます-

  • 行ベクトル
  • 列ベクトル

行ベクトル

  • 行ベクトル*は、要素のセットを角括弧で囲み、スペースまたはコンマを使用して要素を区切ることによって作成されます。
r = [7 8 9 10 11]

MATLABは上記のステートメントを実行し、次の結果を返します-

r =

   7    8    9   10   11

列ベクトル

  • 列ベクトル*は、要素を区切るためにセミコロンを使用して、角括弧で要素のセットを囲むことによって作成されます。
c = [7;  8;  9;  10; 11]

MATLABは上記のステートメントを実行し、次の結果を返します-

c =
      7
      8
      9
      10
      11

ベクトルの要素を参照する

ベクトルの1つ以上の要素をいくつかの方法で参照できます。 ベクトルvのi ^ th ^コンポーネントはv(i)と呼ばれます。 たとえば-

v = [ 1; 2; 3; 4; 5; 6];    % creating a column vector of 6 elements
v(3)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =  3

v(:)などのコロンでベクターを参照すると、ベクターのすべてのコンポーネントがリストされます。

v = [ 1; 2; 3; 4; 5; 6];    % creating a column vector of 6 elements
v(:)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
     1
     2
     3
     4
     5
     6

MATLABでは、ベクトルから要素の範囲を選択できます。

たとえば、9つの要素からなる行ベクトル_rv_を作成し、 _ rv(3:7)_ と記述することで要素3から7を参照し、_sub_rv_という名前の新しいベクトルを作成します。

rv = [1 2 3 4 5 6 7 8 9];
sub_rv = rv(3:7)

MATLABは上記のステートメントを実行し、次の結果を返します-

sub_rv =

   3   4   5   6   7

ベクトル演算

このセクションでは、次のベクトル演算について説明します-

  • link:/matlab/matlab_vector_add_subtract [ベクトルの加算と減算]
  • リンク:/matlab/matlab_vector_scalar_multiplication [ベクトルのスカラー乗算]
  • link:/matlab/matlab_vector_transpose [ベクターの転置]
  • link:/matlab/matlab_vector_appending [ベクターの追加]
  • link:/matlab/matlab_vector_magnitude [ベクターの大きさ]
  • リンク:/matlab/matlab_vector_dot_product [Vector Dot Product]
  • リンク:/matlab/matlab_vector_uniformly_spaced [均一に間隔を置いて配置された要素を持つベクトル]

MATLAB-マトリックス

マトリックスは、数値の2次元配列です。

MATLABでは、各行に要素をコンマまたはスペース区切りの数値として入力し、セミコロンを使用して各行の終わりをマークすることにより、行列を作成します。

たとえば、4行5列の行列_a_を作成します-

a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8]

MATLABは上記のステートメントを実行し、次の結果を返します-

a =
      1     2     3     4     5
      2     3     4     5     6
      3     4     5     6     7
      4     5     6     7     8

マトリックスの要素を参照する

行列_mx_のm ^ th ^行とn ^ th ^列の要素を参照するには、次のように記述します-

mx(m, n);

たとえば、最後のセクションで作成されたマトリックス_a_の2 ^ nd ^行と5 ^ th ^列の要素を参照するには、次のように入力します-

a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8];
a(2,5)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =  6

m ^ th ^列のすべての要素を参照するには、A(:、m)と入力します。

行列aの4 ^ th ^行の要素から列ベクトルvを作成しましょう−

a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8];
v = a(:,4)

MATLABは上記のステートメントを実行し、次の結果を返します-

v =
      4
      5
      6
      7

また、m ^ th ^列からn ^ th ^列の要素を選択することもできます。

a(:,m:n)

私たちは2番目と3番目の列から要素を取り、より小さい行列を作成しましょう-

a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8];
a(:, 2:3)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
      2     3
      3     4
      4     5
      5     6

同様に、マトリックスのサブパートをとるサブマトリックスを作成できます。

a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8];
a(:, 2:3)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
      2     3
      3     4
      4     5
      5     6

同様に、マトリックスのサブパートをとるサブマトリックスを作成できます。

たとえば、サブマトリックス_sa_を作成して、aの内部サブパートを取得します-

3     4     5
4     5     6

これを行うには、書き込み-

a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8];
sa = a(2:3,2:4)

MATLABは上記のステートメントを実行し、次の結果を返します-

sa =
      3     4     5
      4     5     6

マトリックス内の行または列の削除

マトリックスの行または列全体を削除するには、空の角カッコ[]のセットをその行または列に割り当てます。 基本的に、[]は空の配列を示します。

たとえば、aの4行目を削除しましょう-

a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8];
a( 4 , : ) = []

MATLABは上記のステートメントを実行し、次の結果を返します-

a =
      1     2     3     4     5
      2     3     4     5     6
      3     4     5     6     7

次に、aの5列目を削除しましょう-

a = [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8];
a(: , 5)=[]

MATLABは上記のステートメントを実行し、次の結果を返します-

a =
      1     2     3     4
      2     3     4     5
      3     4     5     6
      4     5     6     7

この例では、3行3列の行列mを作成し、この行列の2行目と3行目を2回コピーして4行3列の行列を作成します。

次のコードでスクリプトファイルを作成します-

a = [ 1 2 3 ; 4 5 6; 7 8 9];
new_mat = a([2,3,2,3],:)

あなたがファイルを実行すると、次の結果が表示されます-

new_mat =
      4     5     6
      7     8     9
      4     5     6
      7     8     9

行列演算

このセクションでは、次の基本的で一般的に使用される行列演算について説明します-

  • link:/matlab/matlab_matrix_add_subtract [行列の加算と減算]
  • リンク:/matlab/matlab_matrix_division [行列の分割]
  • リンク:/matlab/matlab_matrix_scalar_operation [行列のスカラー演算]
  • リンク:/matlab/matlab_matrix_transpose [行列の転置]
  • リンク:/matlab/matlab_matrix_concatenation [行列の連結]
  • リンク:/matlab/matlab_matrix_multiplication [行列乗算]
  • リンク:/matlab/matlab_matrix_determinant [行列の行列式]
  • リンク:/matlab/matlab_matrix_inverse [逆行列]

MATLAB-配列

MATLABのすべてのデータ型のすべての変数は多次元配列です。 ベクトルは1次元配列であり、マトリックスは2次元配列です。

ベクトルと行列についてはすでに説明しました。 この章では、多次元配列について説明します。 ただし、その前に、特別な種類の配列について説明します。

MATLABの特別な配列

このセクションでは、特別な配列を作成する関数について説明します。 これらのすべての関数では、1つの引数で正方配列が作成され、2つの引数で長方形配列が作成されます。

  • zeros()*関数は、すべてゼロの配列を作成します-

たとえば-

zeros(5)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
      0     0     0     0     0
      0     0     0     0     0
      0     0     0     0     0
      0     0     0     0     0
      0     0     0     0     0
  • ones()*関数はすべて1の配列を作成します-

たとえば-

ones(4,3)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
      1     1     1
      1     1     1
      1     1     1
      1     1     1
  • eye()*関数は単位行列を作成します。

たとえば-

eye(4)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
      1     0     0     0
      0     1     0     0
      0     0     1     0
      0     0     0     1
  • rand()*関数は、(0,1)に一様に分布した乱数の配列を作成します−

たとえば-

rand(3, 5)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
   0.8147    0.9134    0.2785    0.9649    0.9572
   0.9058    0.6324    0.5469    0.1576    0.4854
   0.1270    0.0975    0.9575    0.9706    0.8003

魔方陣

  • 魔方陣*は、要素が行方向、列方向、または斜めに追加されたときに同じ合計を生成する正方形です。
  • magic()*関数は、魔方陣配列を作成します。 それは、正方形のサイズを与える特異な引数を取ります。 引数は3以上のスカラーでなければなりません。
magic(4)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
   16     2     3    13
   5    11    10     8
   9     7     6    12
   4    14    15     1

多次元配列

2次元を超える配列は、MATLABでは多次元配列と呼ばれます。 MATLABの多次元配列は、通常の2次元行列の拡張です。

一般に、多次元配列を生成するには、まず2次元配列を作成して拡張します。

たとえば、2次元配列aを作成しましょう。

a = [7 9 5; 6 1 9; 4 3 2]

MATLABは上記のステートメントを実行し、次の結果を返します-

a =
   7     9     5
   6     1     9
   4     3     2

配列_a_は3行3列の配列です。次のような値を提供することで、_a_に3番目の次元を追加できます-

a(:, :, 2)= [ 1 2 3; 4 5 6; 7 8 9]

MATLABは上記のステートメントを実行し、次の結果を返します-

a =

ans(:,:,1) =

   0   0   0
   0   0   0
   0   0   0

ans(:,:,2) =

   1   2   3
   4   5   6
   7   8   9

ones()、zeros()、またはrand()関数を使用して多次元配列を作成することもできます。

例えば、

b = rand(4,3,2)

MATLABは上記のステートメントを実行し、次の結果を返します-

b(:,:,1) =
   0.0344    0.7952    0.6463
   0.4387    0.1869    0.7094
   0.3816    0.4898    0.7547
   0.7655    0.4456    0.2760

b(:,:,2) =
   0.6797    0.4984    0.2238
   0.6551    0.9597    0.7513
   0.1626    0.3404    0.2551
   0.1190    0.5853    0.5060
  • cat()*関数を使用して多次元配列を作成することもできます。 指定された次元に沿って配列のリストを連結します-

cat()関数の構文は-

B = cat(dim, A1, A2...)

どこで、

  • _B_は作成された新しい配列です
  • A1 _、 A2 _、…​ 連結される配列です
  • _dim_は、配列を連結する次元です

スクリプトファイルを作成し、それに次のコードを入力します-

a = [9 8 7; 6 5 4; 3 2 1];
b = [1 2 3; 4 5 6; 7 8 9];
c = cat(3, a, b, [ 2 3 1; 4 7 8; 3 9 0])

あなたがファイルを実行すると、それが表示されます-

c(:,:,1) =
      9     8     7
      6     5     4
      3     2     1
c(:,:,2) =
      1     2     3
      4     5     6
      7     8     9
c(:,:,3) =
      2     3     1
      4     7     8
      3     9     0

配列関数

MATLABは、配列の内容を並べ替え、回転、並べ替え、形状変更、またはシフトするための次の関数を提供します。

Function Purpose
length Length of vector or largest array dimension
ndims Number of array dimensions
numel Number of array elements
size Array dimensions
iscolumn Determines whether input is column vector
isempty Determines whether array is empty
ismatrix Determines whether input is matrix
isrow Determines whether input is row vector
isscalar Determines whether input is scalar
isvector Determines whether input is vector
blkdiag Constructs block diagonal matrix from input arguments
circshift Shifts array circularly
ctranspose Complex conjugate transpose
diag Diagonal matrices and diagonals of matrix
flipdim Flips array along specified dimension
fliplr Flips matrix from left to right
flipud Flips matrix up to down
ipermute Inverses permute dimensions of N-D array
permute Rearranges dimensions of N-D array
repmat Replicates and tile array
reshape Reshapes array
rot90 Rotates matrix 90 degrees
shiftdim Shifts dimensions
issorted Determines whether set elements are in sorted order
sort Sorts array elements in ascending or descending order
sortrows Sorts rows in ascending order
squeeze Removes singleton dimensions
transpose Transpose
vectorize Vectorizes expression

次の例は、上記の機能の一部を示しています。

長さ、寸法、要素数-

スクリプトファイルを作成し、それに次のコードを入力します-

x = [7.1, 3.4, 7.2, 28/4, 3.6, 17, 9.4, 8.9];
length(x)      % length of x vector
y = rand(3, 4, 5, 2);
ndims(y)       % no of dimensions in array y
s = ['Zara', 'Nuha', 'Shamim', 'Riz', 'Shadab'];
numel(s)       % no of elements in s

あなたがファイルを実行すると、次の結果が表示されます-

ans =  8
ans =  4
ans =  23

配列要素の循環シフト-

スクリプトファイルを作成し、それに次のコードを入力します-

a = [1 2 3; 4 5 6; 7 8 9]  % the original array a
b = circshift(a,1)         %  circular shift first dimension values down by 1.
c = circshift(a,[1 -1])    % circular shift first dimension values % down by 1
                           % and second dimension values to the left % by 1.

あなたがファイルを実行すると、次の結果が表示されます-

a =
   1     2     3
   4     5     6
   7     8     9

b =
   7     8     9
   1     2     3
   4     5     6

c =
   8     9     7
   2     3     1
   5     6     4

配列の並べ替え

スクリプトファイルを作成し、それに次のコードを入力します-

v = [ 23 45 12 9 5 0 19 17]  % horizontal vector
sort(v)                      % sorting v
m = [2 6 4; 5 3 9; 2 0 1]    % two dimensional array
sort(m, 1)                   % sorting m along the row
sort(m, 2)                   % sorting m along the column

あなたがファイルを実行すると、次の結果が表示されます-

v =
   23    45    12     9     5     0    19    17
ans =
   0     5     9    12    17    19    23    45
m =
   2     6     4
   5     3     9
   2     0     1
ans =
   2     0     1
   2     3     4
   5     6     9
ans =
   2     4     6
   3     5     9
   0     1     2

セル配列

セル配列は、各セルが異なる次元とデータ型の配列を格納できるインデックス付きセルの配列です。

*cell* 関数は、セル配列の作成に使用されます。 セル関数の構文は-
C = cell(dim)
C = cell(dim1,...,dimN)
D = cell(obj)

どこで、

  • _C_はセル配列です。
  • _dim_は、セル配列Cの次元を指定するスカラー整数または整数のベクトルです。
  • _dim1、…​ 、dimN_はCの次元を指定するスカラー整数です。
  • _obj_は次のいずれかです-
  • Java配列またはオブジェクト
  • System.StringまたはSystem.Object型の.NET配列

スクリプトファイルを作成し、それに次のコードを入力します-

c = cell(2, 5);
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}

あなたがファイルを実行すると、次の結果が表示されます-

c =
{
   [1,1] = Red
   [2,1] =  1
   [1,2] = Blue
   [2,2] =  2
   [1,3] = Green
   [2,3] =  3
   [1,4] = Yellow
   [2,4] =  4
   [1,5] = White
   [2,5] =  5
}

セル配列のデータへのアクセス

セル配列の要素を参照するには2つの方法があります-

  • セルのセットを参照するために、インデックスを最初のブラケット()で囲む
  • インデックスを中括弧\ {}で囲み、個々のセル内のデータを参照します

インデックスを最初の括弧で囲むと、セルのセットを参照します。

滑らかな括弧内のセル配列インデックスは、セルのセットを指します。

たとえば-

c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
c(1:2,1:2)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
{
   [1,1] = Red
   [2,1] =  1
   [1,2] = Blue
   [2,2] =  2
}

中括弧でインデックスを作成することにより、セルのコンテンツにアクセスすることもできます。

たとえば-

c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
c{1, 2:4}

MATLABは上記のステートメントを実行し、次の結果を返します-

ans = Blue
ans = Green
ans = Yellow

MATLAB-コロン表記

  • colon(:)*は、MATLABで最も有用な演算子の1つです。 これは、ベクトル、添え字配列を作成し、*反復を指定*するために使用されます。

あなたは1から10までの整数を含む行ベクトルを作成したい場合は、書き込みます-

1:10

MATLABは、ステートメントを実行し、1から10までの整数を含む行ベクトルを返します-

ans =

   1    2    3    4    5    6    7    8    9   10

あなたは、例えば、1以外の増分値を指定したい場合-

100: -5: 50

MATLABはステートメントを実行し、次の結果を返します-

ans =
   100    95    90    85    80    75    70    65    60    55    50

別の例を見てみましょう-

0:pi/8:pi

MATLABはステートメントを実行し、次の結果を返します-

ans =
   Columns 1 through 7
      0    0.3927    0.7854    1.1781    1.5708    1.9635    2.3562
   Columns 8 through 9
      2.7489    3.1416

コロン演算子を使用して、インデックスのベクトルを作成し、配列の行、列、または要素を選択できます。

次の表は、この目的のためのその使用法を説明しています(マトリックスAを持ってみましょう)-

Format Purpose
A(:,j) is the jth column of A.
A(i,:) is the ith row of A.
A(:,:) is the equivalent two-dimensional array. For matrices this is the same as A.
A(j:k) is A(j), A(j+1),…​,A(k).
A(:,j:k) is A(:,j), A(:,j+1),…​,A(:,k).
A(:,:,k) is the kth page of three-dimensional array A.
A(i,j,k,:) is a vector in four-dimensional array A. The vector includes A(i,j,k,1), A(i,j,k,2), A(i,j,k,3), and so on.
A(:) is all the elements of A, regarded as a single column. On the left side of an assignment statement, A(:) fills A, preserving its shape from before. In this case, the right side must contain the same number of elements as A.

スクリプトファイルを作成し、その中に次のコードを入力します-

A = [1 2 3 4; 4 5 6 7; 7 8 9 10]
A(:,2)      % second column of A
A(:,2:3)    % second and third column of A
A(2:3,2:3)  % second and third rows and second and third columns

あなたがファイルを実行すると、次の結果が表示されます-

A =
      1     2     3     4
      4     5     6     7
      7     8     9    10

ans =
      2
      5
      8

ans =
      2     3
      5     6
      8     9

ans =
      5     6
      8     9

MATLAB-数値

MATLABは、符号付きおよび符号なし整数、単精度および倍精度の浮動小数点数を含むさまざまな数値クラスをサポートしています。 デフォルトでは、MATLABはすべての数値を倍精度浮動小数点数として保存します。

任意の数または数の配列を整数または単精度数として保存することを選択できます。

すべての数値型は、基本的な配列演算と数学演算をサポートしています。

さまざまな数値データ型への変換

MATLABは、さまざまな数値データ型に変換するために次の関数を提供します-

Function Purpose
double Converts to double precision number
single Converts to single precision number
int8 Converts to 8-bit signed integer
int16 Converts to 16-bit signed integer
int32 Converts to 32-bit signed integer
int64 Converts to 64-bit signed integer
uint8 Converts to 8-bit unsigned integer
uint16 Converts to 16-bit unsigned integer
uint32 Converts to 32-bit unsigned integer
uint64 Converts to 64-bit unsigned integer

スクリプトファイルを作成し、次のコードを入力します-

x = single([5.32 3.47 6.28]) .* 7.5
x = double([5.32 3.47 6.28]) .* 7.5
x = int8([5.32 3.47 6.28]) .* 7.5
x = int16([5.32 3.47 6.28]) .* 7.5
x = int32([5.32 3.47 6.28]) .* 7.5
x = int64([5.32 3.47 6.28]) .* 7.5

ファイルを実行すると、次の結果が表示されます-

x =

   39.900   26.025   47.100

x =

   39.900   26.025   47.100

x =

   38  23  45

x =

   38  23  45

x =

   38  23  45

x =

   38  23  45

前の例をもう少し拡張しましょう。 スクリプトファイルを作成し、次のコードを入力します-

x = int32([5.32 3.47 6.28]) .* 7.5
x = int64([5.32 3.47 6.28]) .* 7.5
x = num2cell(x)

ファイルを実行すると、次の結果が表示されます-

x =

   38  23  45

x =

   38  23  45

x =
{
   [1,1] = 38
   [1,2] = 23
   [1,3] = 45
}

最小および最大の整数

関数* intmax()および intmin()*は、すべてのタイプの整数で表現できる最大値と最小値を返します。

どちらの関数も、intmax(int8)やintmin(int64)などの整数データ型を引数として受け取り、整数データ型で表すことができる最大値と最小値を返します。

次の例は、整数の最小値と最大値を取得する方法を示しています。 スクリプトファイルを作成し、その中に次のコードを書きます-

% displaying the smallest and largest signed integer data
str = 'The range for int8 is:\n\t%d to %d ';
sprintf(str, intmin('int8'), intmax('int8'))

str = 'The range for int16 is:\n\t%d to %d ';
sprintf(str, intmin('int16'), intmax('int16'))

str = 'The range for int32 is:\n\t%d to %d ';
sprintf(str, intmin('int32'), intmax('int32'))

str = 'The range for int64 is:\n\t%d to %d ';
sprintf(str, intmin('int64'), intmax('int64'))

% displaying the smallest and largest unsigned integer data
str = 'The range for uint8 is:\n\t%d to %d ';
sprintf(str, intmin('uint8'), intmax('uint8'))

str = 'The range for uint16 is:\n\t%d to %d ';
sprintf(str, intmin('uint16'), intmax('uint16'))

str = 'The range for uint32 is:\n\t%d to %d ';
sprintf(str, intmin('uint32'), intmax('uint32'))

str = 'The range for uint64 is:\n\t%d to %d ';
sprintf(str, intmin('uint64'), intmax('uint64'))

ファイルを実行すると、次の結果が表示されます-

ans = The range for int8 is:
    -128 to 127
ans = The range for int16 is:
    -32768 to 32767
ans = The range for int32 is:
    -2147483648 to 2147483647
ans = The range for int64 is:
    0 to 0
ans = The range for uint8 is:
    0 to 255
ans = The range for uint16 is:
    0 to 65535
ans = The range for uint32 is:
    0 to -1
ans = The range for uint64 is:
    0 to 18446744073709551616

最小および最大の浮動小数点数

関数* realmax()および realmin()*は、浮動小数点数で表現できる最大値と最小値を返します。

両方の関数は、引数 'single’で呼び出されると、単精度データ型で表現できる最大値と最小値を返し、引数 'double’で呼び出されると、表現できる最大値と最小値を返します。倍精度データ型。

次の例は、最小および最大の浮動小数点数を取得する方法を示しています。 スクリプトファイルを作成し、その中に次のコードを書きます-

% displaying the smallest and largest single-precision
% floating point number
str = 'The range for single is:\n\t%g to %g and\n\t %g to  %g';
sprintf(str, -realmax('single'), -realmin('single'), ...
   realmin('single'), realmax('single'))

% displaying the smallest and largest double-precision
% floating point number
str = 'The range for double is:\n\t%g to %g and\n\t %g to  %g';
sprintf(str, -realmax('double'), -realmin('double'), ...
   realmin('double'), realmax('double'))

あなたがファイルを実行すると、次の結果が表示されます-

ans = The range for single is:
        -3.40282e+38 to -1.17549e-38 and
         1.17549e-38 to  3.40282e+38
ans = The range for double is:
        -1.79769e+308 to -2.22507e-308 and
         2.22507e-308 to  1.79769e+308

MATLAB-文字列

MATLABでは、文字列の作成は非常に簡単です。 実際、何度も使用しています。 たとえば、コマンドプロンプトで次を入力します-

my_string = 'Tutorials Point'

MATLABは上記のステートメントを実行し、次の結果を返します-

my_string = Tutorials Point

MATLABはすべての変数を配列と見なし、文字列は文字配列と見なされます。 whos コマンドを使用して、上記で作成した変数を確認しましょう-

whos

MATLABは上記のステートメントを実行し、次の結果を返します-

Name           Size            Bytes  Class    Attributes
my_string      1x16               32  char

興味深いことに、 uint8uint16 などの数値変換関数を使用して、文字列内の文字を数値コードに変換できます。 char 関数は、整数ベクトルを文字に変換して戻します-

スクリプトファイルを作成し、それに次のコードを入力します-

my_string = 'Tutorial''s Point';
str_ascii = uint8(my_string)        % 8-bit ascii values
str_back_to_char= char(str_ascii)
str_16bit = uint16(my_string)       % 16-bit ascii values
str_back_to_char = char(str_16bit)

あなたがファイルを実行すると、次の結果が表示されます-

str_ascii =

   84  117  116  111  114  105   97  108   39  115   32   80  111  105  110  116

str_back_to_char = Tutorial's Point
str_16bit =

   84  117  116  111  114  105   97  108   39  115   32   80  111  105  110  116

str_back_to_char = Tutorial's Point

長方形の文字配列

これまでに説明した文字列は、1次元の文字配列です。ただし、それ以上を保存する必要があります。 プログラムにもっと次元のテキストデータを保存する必要があります。 これは、長方形の文字配列を作成することにより実現されます。

長方形の文字配列を作成する最も簡単な方法は、2つ以上の1次元文字配列を、必要に応じて垂直または水平に連結することです。

あなたは、次のいずれかの方法で文字列を垂直に組み合わせることができます-

  • MATLAB連結演算子 [] を使用し、各行をセミコロン(;)で区切ります。 このメソッドでは、各行に同じ数の文字が含まれている必要があることに注意してください。 異なる長さの文字列の場合、必要に応じてスペース文字を埋め込む必要があります。
  • char 関数を使用します。 文字列の長さが異なる場合、charは短い文字列の末尾に空白を埋め込み、各行の文字数が同じになるようにします。

スクリプトファイルを作成し、それに次のコードを入力します-

doc_profile = ['Zara Ali                             '; ...
               'Sr. Surgeon                          '; ...
               'R N Tagore Cardiology Research Center']
doc_profile = char('Zara Ali', 'Sr. Surgeon', ...
                  'RN Tagore Cardiology Research Center')

あなたがファイルを実行すると、次の結果が表示されます-

doc_profile =
Zara Ali
Sr. Surgeon
R N Tagore Cardiology Research Center
doc_profile =
Zara Ali
Sr. Surgeon
RN Tagore Cardiology Research Center

あなたは、次のいずれかの方法で文字列を水平方向に組み合わせることができます-

  • MATLAB連結演算子 [] を使用して、入力文字列をコンマまたはスペースで区切ります。 このメソッドは、入力配列の末尾のスペースを保持します。
  • 文字列連結関数 strcat を使用します。 このメソッドは、入力の末尾のスペースを削除します。

スクリプトファイルを作成し、それに次のコードを入力します-

name =     'Zara Ali                             ';
position = 'Sr. Surgeon                          ';
worksAt =  'R N Tagore Cardiology Research Center';
profile = [name ', ' position ', ' worksAt]
profile = strcat(name, ', ', position, ', ', worksAt)

あなたがファイルを実行すると、次の結果が表示されます-

profile = Zara Ali      , Sr. Surgeon      , R N Tagore Cardiology Research Center
profile = Zara Ali,Sr. Surgeon,R N Tagore Cardiology Research Center

文字列をセル配列に結合

前回の説明から、配列内のすべての文字列は同じ長さでなければならないため、異なる長さの文字列を結合するのは面倒なことは明らかです。 文字列の末尾に空白スペースを使用して、文字列の長さを均等にしました。

ただし、文字列を結合するより効率的な方法は、結果の配列をセル配列に変換することです。

MATLABセル配列は、異なるサイズとタイプのデータを配列に保持できます。 セル配列は、さまざまな長さの文字列を格納するためのより柔軟な方法を提供します。

*cellstr* 関数は、文字配列を文字列のセル配列に変換します。

スクリプトファイルを作成し、それに次のコードを入力します-

name =     'Zara Ali                             ';
position = 'Sr. Surgeon                          ';
worksAt =  'R N Tagore Cardiology Research Center';
profile = char(name, position, worksAt);
profile = cellstr(profile);
disp(profile)

あなたがファイルを実行すると、次の結果が表示されます-

{
   [1,1] = Zara Ali
   [2,1] = Sr. Surgeon
   [3,1] = R N Tagore Cardiology Research Center
}

MATLABの文字列関数

MATLABは、文字列を作成、結合、解析、比較、操作する多数の文字列関数を提供します。

次の表は、MATLABの文字列関数の簡単な説明を提供します-

関数

目的

テキストを文字配列に格納したり、文字配列を結合したりするための関数。

空白

空白文字の文字列を作成します

cellstr

文字配列から文字列のセル配列を作成

char

文字配列に変換(文字列)

iscellstr

入力が文字列のセル配列かどうかを判別

イシャール

アイテムが文字配列かどうかを判別

sprintf

データを文字列にフォーマットする

strcat

文字列を水平に連結する

strjoin

セル配列内の文字列を単一の文字列に結合します

文字列の一部を識別し、部分文字列を見つけて置換するための関数

イシャール

アイテムが文字配列かどうかを判別

アルファベットの配列要素

isspace

スペース文字である配列要素

isstrprop

文字列が指定されたカテゴリのものかどうかを判別

sscanf

文字列からフォーマットされたデータを読み取る

strfind

別の文字列内で1つの文字列を見つける

strrep

部分文字列を検索して置換

strsplit

指定された区切り文字で文字列を分割

strtok

文字列の選択された部分

検証する

テキスト文字列の有効性を確認する

シンバル

式のシンボリック変数を決定する

正規表現

正規表現に一致(大文字と小文字を区別)

正規表現

正規表現に一致(大文字と小文字を区別しない)

正規表現

正規表現を使用して文字列を置換

正規表現

文字列を正規表現に変換します

文字列比較のための関数

strcmp

文字列の比較(大文字と小文字を区別)

strcmpi

文字列の比較(大文字と小文字は区別されません)

strncmp

文字列の最初のn文字を比較(大文字と小文字を区別)

strncmpi

文字列の最初のn文字を比較します(大文字と小文字は区別されません)

文字列を大文字または小文字に変更し、空白を作成または削除するための関数

空白

文字列の末尾から末尾の空白を削除します

strtrim

文字列から先頭と末尾の空白を削除します

文字列を小文字に変換します

アッパー

文字列を大文字に変換

ジャスト

文字配列を揃える

次の例は、上記の文字列関数の一部を示しています-

文字列のフォーマット

スクリプトファイルを作成し、それに次のコードを入力します-

A = pi*1000*ones(1,5);
sprintf(' %f \n %.2f \n %+.2f \n %12.2f \n %012.2f \n', A)

あなたがファイルを実行すると、次の結果が表示されます-

ans =  3141.592654
   3141.59
   +3141.59
      3141.59
   000003141.59

文字列の結合

スクリプトファイルを作成し、それに次のコードを入力します-

%cell array of strings
str_array = {'red','blue','green', 'yellow', 'orange'};

% Join strings in cell array into single string
str1 = strjoin(str_array, "-")
str2 = strjoin(str_array, ",")

あなたがファイルを実行すると、次の結果が表示されます-

str1 = red-blue-green-yellow-orange
str2 = red,blue,green,yellow,orange

文字列の検索と置換

スクリプトファイルを作成し、それに次のコードを入力します-

students = {'Zara Ali', 'Neha Bhatnagar', ...
            'Monica Malik', 'Madhu Gautam', ...
            'Madhu Sharma', 'Bhawna Sharma',...
            'Nuha Ali', 'Reva Dutta', ...
            'Sunaina Ali', 'Sofia Kabir'};

% The strrep function searches and replaces sub-string.
new_student = strrep(students(8), 'Reva', 'Poulomi')
% Display first names
first_names = strtok(students)

あなたがファイルを実行すると、次の結果が表示されます-

new_student =
{
   [1,1] = Poulomi Dutta
}
first_names =
{
   [1,1] = Zara
   [1,2] = Neha
   [1,3] = Monica
   [1,4] = Madhu
   [1,5] = Madhu
   [1,6] = Bhawna
   [1,7] = Nuha
   [1,8] = Reva
   [1,9] = Sunaina
   [1,10] = Sofia
}

文字列の比較

スクリプトファイルを作成し、それに次のコードを入力します-

str1 = 'This is test'
str2 = 'This is text'
if (strcmp(str1, str2))
   sprintf('%s and %s are equal', str1, str2)
else
   sprintf('%s and %s are not equal', str1, str2)
end

あなたがファイルを実行すると、次の結果が表示されます-

str1 = This is test
str2 = This is text
ans = This is test and This is text are not equal

MATLAB-関数

関数は、一緒にタスクを実行するステートメントのグループです。 MATLABでは、関数は個別のファイルで定義されます。 ファイルと関数の名前は同じでなければなりません。

関数は、*ベースワークスペース*と呼ばれるMATLABコマンドプロンプトでアクセスするワークスペースとは別に、*ローカルワークスペース*とも呼ばれる独自のワークスペース内の変数を操作します。

関数は複数の入力引数を受け入れることができ、複数の出力引数を返す場合があります。

関数ステートメントの構文は-

function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)

_mymax_という名前の次の関数は、_mymax.m_という名前のファイルに書き込む必要があります。 引数として5つの数値を取り、その数値の最大値を返します。

mymax.mという名前の関数ファイルを作成し、その中に次のコードを入力します-

function max = mymax(n1, n2, n3, n4, n5)

%This function calculates the maximum of the
% five numbers given as input
max =  n1;
if(n2 > max)
   max = n2;
end
if(n3 > max)
   max = n3;
end
if(n4 > max)
   max = n4;
end
if(n5 > max)
   max = n5;
end

関数の最初の行は、キーワード function で始まります。 関数の名前と引数の順序を示します。 この例では、_mymax_関数には5つの入力引数と1つの出力引数があります。

関数ステートメントの直後にあるコメント行は、ヘルプテキストを提供します。 あなたが入力すると、これらの行が印刷されます-

help mymax

MATLABは上記のステートメントを実行し、次の結果を返します-

This function calculates the maximum of the
   five numbers given as input

次のように関数を呼び出すことができます-

mymax(34, 78, 89, 23, 11)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans = 89

無名関数

無名関数は、単一のMATLABステートメント内で定義される従来のプログラミング言語のインライン関数のようなものです。 これは、単一のMATLAB式と任意の数の入力および出力引数で構成されます。

MATLABコマンドラインまたは関数またはスクリプト内で、匿名関数を直接定義できます。

これにより、ファイルを作成せずに簡単な関数を作成できます。

式から匿名関数を作成するための構文は次のとおりです。

f = @(arglist)expression

この例では、powerという名前の匿名関数を作成します。これは、入力として2つの数値を取り、最初の数値を2番目の数値の累乗で返します。

スクリプトファイルを作成し、その中に次のコードを入力します-

power = @(x, n) x.^n;
result1 = power(7, 3)
result2 = power(49, 0.5)
result3 = power(10, -10)
result4 = power (4.5, 1.5)

あなたがファイルを実行すると、それが表示されます-

result1 =  343
result2 =  7
result3 =  1.0000e-10
result4 =  9.5459

プライマリおよびサブ機能

無名関数以外の関数は、ファイル内で定義する必要があります。 各関数ファイルには、最初に表示される必須のプライマリ関数と、プライマリ関数の後に続き使用される任意の数のオプションのサブ関数が含まれています。

プライマリ関数は、それらを定義するファイルの外部から、コマンドラインまたは他の関数から呼び出すことができますが、サブ関数は、関数ファイルの外部のコマンドラインまたはその他の関数から呼び出すことはできません。

サブ関数は、それらを定義する関数ファイル内のプライマリ関数と他のサブ関数にのみ表示されます。

二次方程式の根を計算する二次関数を作成してみましょう。 この関数は、2次係数、線形係数、および定数項の3つの入力を取ります。 根を返します。

関数ファイルquadratic.mには、判別関数を計算するプライマリ関数_quadratic_とサブ関数_disc_が含まれます。

関数ファイル_quadratic.m_を作成し、その中に次のコードを入力します-

function [x1,x2] = quadratic(a,b,c)

%this function returns the roots of
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficients of x2, x and the
%constant term
% It returns the roots
d = disc(a,b,c);
x1 = (-b + d)/(2*a);
x2 = (-b - d)/(2*a);
end   % end of quadratic

function dis = disc(a,b,c)
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end   % end of sub-function

あなたはコマンドプロンプトから上記の機能を呼び出すことができます-

quadratic(2,4,-4)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans = 0.7321

入れ子関数

別の関数の本体内で関数を定義できます。 これらはネストされた関数と呼ばれます。 ネストされた関数には、他の関数の一部またはすべてのコンポーネントが含まれます。

ネストされた関数は、別の関数のスコープ内で定義され、含まれる関数のワークスペースへのアクセスを共有します。

ネストされた関数は、次の構文に従います-

function x = A(p1, p2)
...
B(p2)
   function y = B(p3)
   ...
   end
...
end

前の例の関数quadratic_を書き換えましょう。ただし、今回はディスク関数はネストされた関数になります。

関数ファイル_quadratic2.m_を作成し、その中に次のコードを入力します-

function [x1,x2] = quadratic2(a,b,c)
function disc  % nested function
d = sqrt(b^2 - 4*a*c);
end   % end of function disc

disc;
x1 = (-b + d)/(2*a);
x2 = (-b - d)/(2*a);
end   % end of function quadratic2

あなたはコマンドプロンプトから上記の機能を呼び出すことができます-

quadratic2(2,4,-4)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =  0.73205

プライベート機能

プライベート関数は、他の関数の限られたグループにのみ表示される主要な関数です。 関数の実装を公開したくない場合は、プライベート関数として作成できます。

プライベート関数は、特別な名前 private で*サブフォルダー*にあります。

それらは、親フォルダー内の関数にのみ表示されます。

_quadratic_関数を書き直しましょう。 ただし、今回は、判別式を計算する_disc_関数はプライベート関数になります。

作業ディレクトリにprivateという名前のサブフォルダーを作成します。 次の関数ファイル_disc.m_を保存します-

function dis = disc(a,b,c)
%function calculates the discriminant
dis = sqrt(b^2 - 4*a*c);
end      % end of sub-function

作業ディレクトリに関数quadratic3.mを作成し、次のコードを入力します-

function [x1,x2] = quadratic3(a,b,c)

%this function returns the roots of
% a quadratic equation.
% It takes 3 input arguments
% which are the co-efficient of x2, x and the
%constant term
% It returns the roots
d = disc(a,b,c);

x1 = (-b + d)/(2*a);
x2 = (-b - d)/(2*a);
end      % end of quadratic3

あなたはコマンドプロンプトから上記の機能を呼び出すことができます-

quadratic3(2,4,-4)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =  0.73205

グローバル変数

グローバル変数は複数の関数で共有できます。 このためには、すべての関数で変数をグローバルとして宣言する必要があります。

ベースワークスペースからその変数にアクセスする場合は、コマンドラインで変数を宣言します。

グローバル宣言は、変数が関数で実際に使用される前に発生する必要があります。 グローバル変数を他の変数と区別するために、グローバル変数の名前に大文字を使用することをお勧めします。

私たちはaverage.mという名前の関数ファイルを作成し、その中に次のコードを入力してみましょう-

function avg = average(nums)
global TOTAL
avg = sum(nums)/TOTAL;
end

スクリプトファイルを作成し、その中に次のコードを入力します-

global TOTAL;
TOTAL = 10;
n = [34, 45, 25, 45, 33, 19, 40, 34, 38, 42];
av = average(n)

ファイルを実行すると、次の結果が表示されます-

av =  35.500

MATLAB-データのインポート

MATLABでデータをインポートすると、外部ファイルからデータが読み込まれます。 importdata 関数を使用すると、さまざまな形式のさまざまなデータファイルをロードできます。 次の5つの形式があります-

Sr.No. Function & Description
1

A = importdata(filename)

_filename_で示されるファイルから配列Aにデータをロードします。

2

A = importdata('-pastespecial')

ファイルからではなく、システムのクリップボードからデータをロードします。

3

A = importdata(_, delimiterIn)

ASCIIファイル、ファイル名、またはクリップボードデータの列区切り文字として_delimiterIn_を解釈します。 上記の構文の任意の入力引数で_delimiterIn_を使用できます。

4

A = importdata(_, delimiterIn, headerlinesIn)

ASCIIファイル、ファイル名、またはクリップボードからデータを読み込み、_headerlinesIn + 1_行から始まる数値データを読み取ります。

5

[A, delimiterOut, headerlinesOut] = importdata(_)

前の構文の入力引数のいずれかを使用して、_delimiterOut_の入力ASCIIファイルの検出された区切り文字と_headerlinesOut_のヘッダー行の検出された数を返します。

'_デフォルトでは、Octaveは_importdata()_関数をサポートしていないため、このパッケージを検索してインストールし、Octaveのインストールで次の例を機能させる必要があります。_

例1

画像ファイルをロードして表示しましょう。 スクリプトファイルを作成し、その中に次のコードを入力します-

filename = 'smile.jpg';
A = importdata(filename);
image(A);

ファイルを実行すると、MATLABはイメージファイルを表示します。 ただし、現在のディレクトリに保存する必要があります。

Imangeファイルのインポート

例2

この例では、テキストファイルをインポートし、DelimiterとColumn Headerを指定します。 _weeklydata.txt_という名前の、列ヘッダー付きのスペース区切りASCIIファイルを作成してみましょう。

テキストファイルweeklydata.txtは次のようになります-

SunDay  MonDay  TuesDay  WednesDay  ThursDay  FriDay  SaturDay
95.01   76.21   61.54    40.57       55.79    70.28   81.53
73.11   45.65   79.19    93.55       75.29    69.87   74.68
60.68   41.85   92.18    91.69       81.32    90.38   74.51
48.60   82.14   73.82    41.03       0.99     67.22   93.18
89.13   44.47   57.63    89.36       13.89    19.88   46.60

スクリプトファイルを作成し、その中に次のコードを入力します-

filename = 'weeklydata.txt';
delimiterIn = ' ';
headerlinesIn = 1;
A = importdata(filename,delimiterIn,headerlinesIn);

% View data
for k = [1:7]
   disp(A.colheaders{1, k})
   disp(A.data(:, k))
   disp(' ')
end

あなたがファイルを実行すると、次の結果が表示されます-

SunDay
   95.0100
   73.1100
   60.6800
   48.6000
   89.1300

MonDay
   76.2100
   45.6500
   41.8500
   82.1400
   44.4700

TuesDay
   61.5400
   79.1900
   92.1800
   73.8200
   57.6300

WednesDay
   40.5700
   93.5500
   91.6900
   41.0300
   89.3600

ThursDay
   55.7900
   75.2900
   81.3200
   0.9900
   13.8900

FriDay
   70.2800
   69.8700
   90.3800
   67.2200
   19.8800

SaturDay
   81.5300
   74.6800
   74.5100
   93.1800
   46.6000

実施例3

この例では、クリップボードからデータをインポートします。

次の行をクリップボードにコピーします-

数学は簡単です

スクリプトファイルを作成し、次のコードを入力します-

A = importdata('-pastespecial')

あなたがファイルを実行すると、次の結果が表示されます-

A =
   'Mathematics is simple'

低レベルのファイルI/O

_importdata_関数は高レベルの関数です。 MATLABの低レベルファイルI/O関数を使用すると、ファイルへのデータの読み取りまたは書き込みを最大限に制御できます。 ただし、これらの関数を効率的に機能させるには、ファイルに関するより詳細な情報が必要です。

MATLABは、バイトまたは文字レベルでの読み取りおよび書き込み操作のために次の機能を提供します-

Function Description
fclose Close one or all open files
feof Test for end-of-file
ferror Information about file I/O errors
fgetl Read line from file, removing newline characters
fgets Read line from file, keeping newline characters
fopen Open file, or obtain information about open files
fprintf Write data to text file
fread Read data from binary file
frewind Move file position indicator to beginning of open file
fscanf Read data from text file
fseek Move to specified position in file
ftell Position in open file
fwrite Write data to binary file

低レベルI/Oでテキストデータファイルをインポートする

MATLABは、テキストデータファイルの低レベルのインポートのために次の機能を提供します-

  • fscanf 関数は、フォーマットされたデータをテキストファイルまたはASCIIファイルで読み取ります。
  • fgetl および fgets 関数は、一度に1行のファイルを読み取ります。改行文字は各行を区切ります。
  • fread 関数は、バイトまたはビットレベルでデータのストリームを読み取ります。

作業ディレクトリに保存されたテキストデータファイル「myfile.txt」があります。 ファイルには3か月間の降雨データが保存されます。 2012年の6月、7月、8月。

myfile.txtのデータには、5つの場所での時間、月、降雨量の測定値の繰り返しセットが含まれています。 ヘッダーデータには月数Mが格納されます。 Mセットの測定値があります。

ファイルは次のようになります-

Rainfall Data
Months: June, July, August

M = 3
12:00:00
June-2012
17.21  28.52  39.78  16.55 23.67
19.15  0.35   17.57  NaN   12.01
17.92  28.49  17.40  17.06 11.09
9.59   9.33   NaN    0.31  0.23
10.46  13.17  NaN    14.89 19.33
20.97  19.50  17.65  14.45 14.00
18.23  10.34  17.95  16.46 19.34
09:10:02
July-2012
12.76  16.94  14.38  11.86 16.89
20.46  23.17  NaN    24.89 19.33
30.97  49.50  47.65  24.45 34.00
18.23  30.34  27.95  16.46 19.34
30.46  33.17  NaN    34.89  29.33
30.97  49.50  47.65  24.45 34.00
28.67  30.34  27.95  36.46 29.34
15:03:40
August-2012
17.09  16.55  19.59  17.25 19.22
17.54  11.45  13.48  22.55 24.01
NaN    21.19  25.85  25.05 27.21
26.79  24.98  12.23  16.99 18.67
17.54  11.45  13.48  22.55 24.01
NaN    21.19  25.85  25.05 27.21
26.79  24.98  12.23  16.99 18.67

このファイルからデータをインポートし、このデータを表示します。 次の手順を実行します-

  • fopen 関数でファイルを開き、ファイル識別子を取得します。
  • 文字列の「%s *」、整数の「%d 」、浮動小数点数の「%f *」など、*フォーマット指定子*を使用してファイル内のデータを記述します。
  • ファイル内のリテラル文字をスキップするには、フォーマットの説明にそれらを含めます。 データフィールドをスキップするには、指定子でアスタリスク( '*')を使用します。 たとえば、ヘッダーを読み取ってMの単一の値を返すには、次のように記述します-
M = fscanf(fid, '%*s %*s\n%*s %*s %*s %*s\nM=%d\n\n', 1);
  • デフォルトでは、 fscanf は、データに一致するものが見つからないか、ファイルの最後に到達するまで、フォーマットの説明に従ってデータを読み取ります。 ここでは、3組のデータを読み取るためにforループを使用し、そのたびに7行5列を読み取ります。
  • ワークスペースに_mydata_という名前の構造体を作成して、ファイルから読み取ったデータを保存します。 この構造には、time _、 month_、および_raindata_配列の3つのフィールドがあります。

スクリプトファイルを作成し、その中に次のコードを入力します-

filename = '/data/myfile.txt';
rows = 7;
cols = 5;

% open the file
fid = fopen(filename);

% read the file headers, find M (number of months)
M = fscanf(fid, '%*s %*s\n%*s %*s %*s %*s\nM=%d\n\n', 1);

% read each set of measurements
for n = 1:M
   mydata(n).time = fscanf(fid, '%s', 1);
   mydata(n).month = fscanf(fid, '%s', 1);

   % fscanf fills the array in column order,
   % so transpose the results
   mydata(n).raindata  = ...
      fscanf(fid, '%f', [rows, cols]);
end
for n = 1:M
   disp(mydata(n).time), disp(mydata(n).month)
   disp(mydata(n).raindata)
end

% close the file
fclose(fid);

あなたがファイルを実行すると、次の結果が表示されます-

12:00:00
June-2012
   17.2100   17.5700   11.0900   13.1700   14.4500
   28.5200       NaN    9.5900       NaN   14.0000
   39.7800   12.0100    9.3300   14.8900   18.2300
   16.5500   17.9200       NaN   19.3300   10.3400
   23.6700   28.4900    0.3100   20.9700   17.9500
   19.1500   17.4000    0.2300   19.5000   16.4600
   0.3500   17.0600   10.4600   17.6500   19.3400

09:10:02
July-2012
   12.7600       NaN   34.0000   33.1700   24.4500
   16.9400   24.8900   18.2300       NaN   34.0000
   14.3800   19.3300   30.3400   34.8900   28.6700
   11.8600   30.9700   27.9500   29.3300   30.3400
   16.8900   49.5000   16.4600   30.9700   27.9500
   20.4600   47.6500   19.3400   49.5000   36.4600
   23.1700   24.4500   30.4600   47.6500   29.3400

15:03:40
August-2012
   17.0900   13.4800   27.2100   11.4500   25.0500
   16.5500   22.5500   26.7900   13.4800   27.2100
   19.5900   24.0100   24.9800   22.5500   26.7900
   17.2500       NaN   12.2300   24.0100   24.9800
   19.2200   21.1900   16.9900       NaN   12.2300
   17.5400   25.8500   18.6700   21.1900   16.9900
   11.4500   25.0500   17.5400   25.8500   18.6700

MATLAB-データ出力

MATLABのデータエクスポート(または出力)は、ファイルに書き込むことを意味します。 MATLABでは、ASCIIファイルを読み取る別のアプリケーションでデータを使用できます。 このために、MATLABはいくつかのデータエクスポートオプションを提供します。

次のタイプのファイルを作成できます-

  • 配列からの長方形の区切りASCIIデータファイル。
  • キーストロークと結果のテキスト出力の日記(またはログ)ファイル。
  • fprintfなどの低レベル関数を使用する特殊なASCIIファイル。
  • 特定のテキストファイル形式に書き込むC/C ++またはFortranルーチンにアクセスするためのMEXファイル。

これとは別に、データをスプレッドシートにエクスポートすることもできます。

区切り記号付きASCIIデータファイルとして数値配列をエクスポートするには、2つの方法があります-

  • save 関数を使用して、*-ascii *修飾子を指定する
  • dlmwrite 関数を使用する

保存機能を使用するための構文は-

save my_data.out num_array -ascii

ここで、_my_data.out_は作成された区切りASCIIデータファイル、_num_array_は数値配列、*-ascii *は指定子です。

*dlmwrite* 関数を使用するための構文は-
dlmwrite('my_data.out', num_array, 'dlm_char')

ここで、_my_data.out_は作成された区切りASCIIデータファイル、_num_array_は数値配列、_dlm_char_は区切り文字です。

次の例は、概念を示しています。 スクリプトファイルを作成し、次のコードを入力します-

num_array = [ 1 2 3 4 ; 4 5 6 7; 7 8 9 0];
save array_data1.out num_array -ascii;
type array_data1.out
dlmwrite('array_data2.out', num_array, ' ');
type array_data2.out

あなたがファイルを実行すると、次の結果が表示されます-

   1.0000000e+00   2.0000000e+00   3.0000000e+00   4.0000000e+00
   4.0000000e+00   5.0000000e+00   6.0000000e+00   7.0000000e+00
   7.0000000e+00   8.0000000e+00   9.0000000e+00   0.0000000e+00

1 2 3 4
4 5 6 7
7 8 9 0

save -asciiコマンドとdlmwrite関数は、セル配列を入力としては機能しないことに注意してください。 セル配列のコンテンツから区切りASCIIファイルを作成するには、次のようにします。

  • または、 cell2mat 関数を使用してセル配列を行列に変換します

  • または、低レベルのファイルI/O関数を使用してセル配列をエクスポートします。

    *save* 関数を使用して文字配列をASCIIファイルに書き込む場合、ASCIIに相当する文字がファイルに書き込まれます。

たとえば、「hello」という単語をファイルに書き込みましょう-

h = 'hello';
save textdata.out h -ascii
type textdata.out

MATLABは上記のステートメントを実行し、次の結果を表示します。 これは、8桁のASCII形式の文字列「hello」の文字です。

1.0400000e+02   1.0100000e+02   1.0800000e+02   1.0800000e+02   1.1100000e+02

日記ファイルへの書き込み

日記ファイルは、MATLABセッションのアクティビティログです。 日記機能は、グラフィックスを除くディスクファイルにセッションの正確なコピーを作成します。

日記機能をオンにするには、次のように入力します-

diary

オプションで、あなたは言うログファイルの名前を与えることができます-

diary logdata.out

日記機能をオフにするには-

diary off

テキストエディタで日記ファイルを開くことができます。

低レベルI/Oを使用したテキストデータファイルへのデータのエクスポート

これまで、数値配列をエクスポートしました。 ただし、数値データと文字データの組み合わせ、非矩形の出力ファイル、またはASCII以外のエンコードスキームのファイルなど、他のテキストファイルを作成する必要がある場合があります。 これらの目的のために、MATLABは低レベルの fprintf 関数を提供します。

低レベルのI/Oファイルアクティビティの場合と同様に、エクスポートする前に、 fopen 関数を使用してファイルを開くか作成し、ファイル識別子を取得する必要があります。 既定では、fopenは読み取り専用アクセス用にファイルを開きます。 「w」や「a」など、書き込みまたは追加の許可を指定する必要があります。

ファイルを処理した後、* fclose(fid)*関数でファイルを閉じる必要があります。

次の例は、概念を示しています-

スクリプトファイルを作成し、その中に次のコードを入力します-

% create a matrix y, with two rows
x = 0:10:100;
y = [x; log(x)];

% open a file for writing
fid = fopen('logtable.txt', 'w');

% Table Header
fprintf(fid, 'Log     Function\n\n');

% print values in column order
% two values appear on each row of the file
fprintf(fid, '%f    %f\n', y);
fclose(fid);

% display the file created
type logtable.txt

あなたがファイルを実行すると、次の結果が表示されます-

Log         Function

0.000000    -Inf
10.000000    2.302585
20.000000    2.995732
30.000000    3.401197
40.000000    3.688879
50.000000    3.912023
60.000000    4.094345
70.000000    4.248495
80.000000    4.382027
90.000000    4.499810
100.000000    4.605170

MATLAB-プロット

関数のグラフをプロットするには、次の手順を実行する必要があります-

  • 関数がプロットされる変数 x に*値の範囲*を指定して、 x を定義します。
  • 関数を定義します、* y = f(x)*
  • * plot(x、y)として、 *plot コマンドを呼び出します。

次の例で概念を示します。 0から100までのxの値の範囲に対して、増分5で単純関数 y = x をプロットしてみましょう。

スクリプトファイルを作成し、次のコードを入力します-

x = [0:5:100];
y = x;
plot(x, y)

ファイルを実行すると、MATLABは次のプロットを表示します-

plotting1

関数y = x ^ 2 ^をプロットするもう1つの例を見てみましょう。 この例では、同じ関数を使用して2つのグラフを描画しますが、2回目にはincrementの値を減らします。 増分を減らすと、グラフがより滑らかになることに注意してください。

スクリプトファイルを作成し、次のコードを入力します-

x = [1 2 3 4 5 6 7 8 9 10];
x = [-100:20:100];
y = x.^2;
plot(x, y)

ファイルを実行すると、MATLABは次のプロットを表示します-

plotting2

コードファイルを少し変更し、増分を5に減らします-

x = [-100:5:100];
y = x.^2;
plot(x, y)

MATLABは、より滑らかなグラフを描きます-

plotting3

グラフにタイトル、ラベル、グリッド線、スケーリングを追加する

MATLABでは、タイトル、x軸とy軸に沿ったラベル、グリッド線を追加したり、軸を調整してグラフを整えたりすることができます。

  • xlabel および ylabel コマンドは、x軸とy軸に沿ってラベルを生成します。
  • title コマンドを使用すると、グラフにタイトルを付けることができます。
  • grid on コマンドを使用すると、グラフにグリッド線を配置できます。
  • axis equal コマンドを使用すると、同じスケール係数と両方の軸上のスペースを使用してプロットを生成できます。
  • axis square コマンドは、正方形のプロットを生成します。

スクリプトファイルを作成し、次のコードを入力します-

x = [0:0.01:10];
y = sin(x);
plot(x, y), xlabel('x'), ylabel('Sin(x)'), title('Sin(x) Graph'),
grid on, axis equal

MATLABは、次のグラフを生成します-

グラフをきれいにする

同じグラフに複数の関数を描く

同じプロット上に複数のグラフを描くことができます。 次の例は、概念を示しています-

スクリプトファイルを作成し、次のコードを入力します-

x = [0 : 0.01: 10];
y = sin(x);
g = cos(x);
plot(x, y, x, g, '.-'), legend('Sin(x)', 'Cos(x)')

MATLABは、次のグラフを生成します-

同じグラフ上の複数の関数

グラフの色を設定する

MATLABは、グラフを描画するための8つの基本的な色オプションを提供します。 次の表は、色とそのコードを示しています-

Code Color
w White
k Black
b Blue
r Red
c Cyan
g Green
m Magenta
y Yellow

2つの多項式のグラフを描きましょう

  • f(x)= 3x ^ 4 ^ + 2x ^ 3 ^ + 7x ^ 2 ^ + 2x + 9および
  • g(x)= 5x ^ 3 ^ + 9x + 2

スクリプトファイルを作成し、次のコードを入力します-

x = [-10 : 0.01: 10];
y = 3*x.^4 + 2 *x.^3 + 7* x.^2 + 2 *x + 9;
g = 5* x.^3 + 9 * x + 2;
plot(x, y, 'r', x, g, 'g')

あなたがファイルを実行すると、MATLABは次のグラフを生成します-

グラフの色

軸スケールの設定

*axis* コマンドを使用すると、軸のスケールを設定できます。 あなたは、次の方法で軸コマンドを使用してX軸とY軸の最小値と最大値を提供することができます-
axis ( [xmin xmax ymin ymax] )

次の例はこれを示しています-

スクリプトファイルを作成し、次のコードを入力します-

x = [0 : 0.01: 10];
y = exp(-x).* sin(2*x + 3);
plot(x, y), axis([0 10 -1 1])

あなたがファイルを実行すると、MATLABは次のグラフを生成します-

軸スケールの設定

サブプロットの生成

同じ図にプロットの配列を作成する場合、これらの各プロットはサブプロットと呼ばれます。 subplot コマンドは、サブプロットの作成に使用されます。

コマンドの構文は-

subplot(m, n, p)

ここで、_m_と_n_はプロット配列の行と列の数であり、_p_は特定のプロットを配置する場所を指定します。

subplotコマンドで作成された各プロットは、独自の特性を持つことができます。 次の例は、概念を示しています-

私たちは2つのプロットを生成しましょう-

y = e ^ −1.5x ^ sin(10x)

y = e ^ −2x ^ sin(10x)

スクリプトファイルを作成し、次のコードを入力します-

x = [0:0.01:5];
y = exp(-1.5*x).*sin(10*x);
subplot(1,2,1)
plot(x,y), xlabel('x'),ylabel('exp(–1.5x)*sin(10x)'),axis([0 5 -1 1])
y = exp(-2*x).*sin(10*x);
subplot(1,2,2)
plot(x,y),xlabel('x'),ylabel('exp(–2x)*sin(10x)'),axis([0 5 -1 1])

あなたがファイルを実行すると、MATLABは次のグラフを生成します-

サブプロットの生成

MATLAB-グラフィックス

この章では、MATLABのプロット機能とグラフィックス機能について引き続き説明します。 私たちは議論します-

  • 棒グラフの描画
  • 輪郭の描画
  • 三次元プロット

棒グラフの描画

*bar* コマンドは、2次元の棒グラフを描画します。 アイデアを示すために例を取り上げましょう。

想像上の教室に10人の生徒がいるとします。 これらの学生が取得したマークの割合は、75、58、90、87、50、85、92、75、60、および95です。 このデータの棒グラフを描画します。

スクリプトファイルを作成し、次のコードを入力します-

x = [1:10];
y = [75, 58, 90, 87, 50, 85, 92, 75, 60, 95];
bar(x,y), xlabel('Student'),ylabel('Score'),
title('First Sem:')
print -deps graph.eps

ファイルを実行すると、MATLABは次の棒グラフを表示します-

棒グラフの描画

輪郭の描画

2つの変数の関数の等高線は、関数が一定の値を持つ曲線です。 等高線は、平均海面など、指定されたレベル以上の同じ標高のポイントを結合して等高線マップを作成するために使用されます。

MATLABは、等高線図を描画するための contour 関数を提供します。

与えられた関数g = f(x、y)の等高線を示す等高線図を生成しましょう。 この関数には2つの変数があります。 そのため、2つの独立変数、つまり2つのデータセットxとyを生成する必要があります。 これは、 meshgrid コマンドを呼び出すことで実行されます。

*meshgrid* コマンドは、xとyの範囲とそれぞれの増分の指定を与える要素の行列を生成するために使用されます。

関数g = f(x、y)をプロットします。ここで、-5≤x≤5、-3≤y≤3です。 両方の値に対して0.1の増分を取りましょう。 変数は次のように設定されます-

[x,y] = meshgrid(–5:0.1:5, –3:0.1:3);

最後に、関数を割り当てる必要があります。 関数をx ^ 2 ^ + y ^ 2 ^とします

スクリプトファイルを作成し、次のコードを入力します-

[x,y] = meshgrid(-5:0.1:5,-3:0.1:3);   %independent variables
g = x.^2 + y.^2;                       % our function
contour(x,y,g)                         % call the contour function
print -deps graph.eps

あなたがファイルを実行すると、MATLABは次の等高線図を表示します-

Matlabの等高線図

コードを少し変更して、マップを整えます

[x,y] = meshgrid(-5:0.1:5,-3:0.1:3);   %independent variables
g = x.^2 + y.^2;                       % our function
[C, h] = contour(x,y,g);               % call the contour function
set(h,'ShowText','on','TextStep',get(h,'LevelStep')*2)
print -deps graph.eps

あなたがファイルを実行すると、MATLABは次の等高線図を表示します-

見栄えの良い等高線図

3次元プロット

3次元プロットは、基本的に2つの変数g = f(x、y)の関数で定義された表面を表示します。

前と同様に、gを定義するために、 meshgrid コマンドを使用して、関数のドメイン上に(x、y)ポイントのセットを最初に作成します。 次に、関数自体を割り当てます。 最後に、 surf コマンドを使用して表面プロットを作成します。

次の例は、概念を示しています-

関数g = xe ^-(x ^ 2 ^ + y ^ 2 の3D表面マップを作成しましょう

スクリプトファイルを作成し、次のコードを入力します-

[x,y] = meshgrid(-2:.2:2);
g = x .* exp(-x.^2 - y.^2);
surf(x, y, g)
print -deps graph.eps

ファイルを実行すると、MATLABは次の3Dマップを表示します-

Matlabの3Dマップ

*mesh* コマンドを使用して、3次元の表面を生成することもできます。 ただし、 *surf* コマンドは、接続線とサーフェスの面の両方をカラーで表示しますが、 *mesh* コマンドは、定義点を接続する色付きの線でワイヤフレームサーフェスを作成します。

MATLAB-代数

これまでのところ、すべての例がMATLABとGNU(別名Octave)で動作することを確認しました。 しかし、基本的な代数方程式を解くために、MATLABとOctaveの両方が少し異なるため、MATLABとOctaveを別々のセクションでカバーするようにします。

また、代数的表現の因数分解と単純化についても説明します。

MATLABで基本的な代数方程式を解く

*solve* 関数は代数方程式を解くために使用されます。 最も簡単な形式では、solve関数は引数として引用符で囲まれた方程式を取ります。

たとえば、方程式x-5 = 0でxを解こう

solve('x-5=0')

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
   5

また、として解決関数を呼び出すことができます-

y = solve('x-5 = 0')

MATLABは上記のステートメントを実行し、次の結果を返します-

y =
   5

あなたは式の右辺を含めることさえできません-

solve('x-5')

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
   5

方程式が複数の記号を含む場合、MATLABはデフォルトでxを解いていると仮定しますが、解関数は別の形式を持っています-

solve(equation, variable)

ここで、変数に言及することもできます。

たとえば、vについて方程式v – u – 3t ^ 2 ^ = 0を解きましょう。 この場合、私たちは書く必要があります-

solve('v-u-3*t^2=0', 'v')

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
   3*t^2 + u

オクターブで基本的な代数方程式を解く

  • 根*関数は、オクターブで代数方程式を解くために使用され、次のように上記の例を書くことができます-

たとえば、方程式x-5 = 0でxを解こう

roots([1, -5])

Octaveは上記のステートメントを実行し、次の結果を返します-

ans = 5

また、として解決関数を呼び出すことができます-

y = roots([1, -5])

Octaveは上記のステートメントを実行し、次の結果を返します-

y = 5

MATLABで2次方程式を解く

*solve* 関数は、高次方程式も解くことができます。 二次方程式を解くためによく使用されます。 この関数は、配列の方程式の根を返します。

次の例では、二次方程式x ^ 2 ^ -7x +12 = 0を解きます。 スクリプトファイルを作成し、次のコードを入力します-

eq = 'x^2 -7*x + 12 = 0';
s = solve(eq);
disp('The first root is: '), disp(s(1));
disp('The second root is: '), disp(s(2));

あなたがファイルを実行すると、次の結果が表示されます-

The first root is:
   3
The second root is:
   4

オクターブで二次方程式を解く

次の例では、オクターブで2次方程式x ^ 2 ^ -7x +12 = 0を解きます。 スクリプトファイルを作成し、次のコードを入力します-

s = roots([1, -7, 12]);

disp('The first root is: '), disp(s(1));
disp('The second root is: '), disp(s(2));

あなたがファイルを実行すると、次の結果が表示されます-

The first root is:
   4
The second root is:
   3

MATLABで高次方程式を解く

*solve* 関数は、高次方程式も解くことができます。 たとえば、(x-3)^ 2 ^(x-7)= 0のように3次方程式を解こう
solve('(x-3)^2*(x-7)=0')

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
   3
   3
   7

高次方程式の場合、根は多くの項を含む長いです。 そのような根の数値を取得するには、それらをdoubleに変換します。 次の例は、4次方程式x ^ 4 ^ − 7x ^ 3 ^ + 3x ^ 2 ^ − 5x + 9 = 0を解きます。

スクリプトファイルを作成し、次のコードを入力します-

eq = 'x^4 - 7*x^3 + 3*x^2 - 5*x + 9 = 0';
s = solve(eq);
disp('The first root is: '), disp(s(1));
disp('The second root is: '), disp(s(2));
disp('The third root is: '), disp(s(3));
disp('The fourth root is: '), disp(s(4));

% converting the roots to double type
disp('Numeric value of first root'), disp(double(s(1)));
disp('Numeric value of second root'), disp(double(s(2)));
disp('Numeric value of third root'), disp(double(s(3)));
disp('Numeric value of fourth root'), disp(double(s(4)));

あなたがファイルを実行すると、次の結果が返されます-

The first root is:
6.630396332390718431485053218985
 The second root is:
1.0597804633025896291682772499885
 The third root is:
- 0.34508839784665403032666523448675 - 1.0778362954630176596831109269793*i
 The fourth root is:
- 0.34508839784665403032666523448675 + 1.0778362954630176596831109269793*i
Numeric value of first root
   6.6304
Numeric value of second root
   1.0598
Numeric value of third root
   -0.3451 - 1.0778i
Numeric value of fourth root
   -0.3451 + 1.0778i

最後の2つのルートは複素数であることに注意してください。

Octaveで高次方程式を解く

次の例は、4次方程式x ^ 4 ^ − 7x ^ 3 ^ + 3x ^ 2 ^ − 5x + 9 = 0を解きます。

スクリプトファイルを作成し、次のコードを入力します-

v = [1, -7,  3, -5, 9];
s = roots(v);

% converting the roots to double type
disp('Numeric value of first root'), disp(double(s(1)));
disp('Numeric value of second root'), disp(double(s(2)));
disp('Numeric value of third root'), disp(double(s(3)));
disp('Numeric value of fourth root'), disp(double(s(4)));

あなたがファイルを実行すると、次の結果が返されます-

Numeric value of first root
 6.6304
Numeric value of second root
-0.34509 + 1.07784i
Numeric value of third root
-0.34509 - 1.07784i
Numeric value of fourth root
 1.0598

MATLABで方程式系を解く

*solve* 関数を使用して、複数の変数を含む連立方程式の解を生成することもできます。 この使用法を示すために簡単な例を取り上げましょう。

方程式を解きましょう-

5x + 9y = 5

3x – 6y = 4

スクリプトファイルを作成し、次のコードを入力します-

s = solve('5*x + 9*y = 5','3*x - 6*y = 4');
s.x
s.y

あなたがファイルを実行すると、次の結果が表示されます-

ans =
   22/19
ans =
   -5/57

同様に、より大きな線形システムを解くことができます。 次の方程式のセットを考慮してください-

x + 3y -2z = 5

3x + 5y + 6z = 7

2x + 4y + 3z = 8

オクターブの方程式の解法

「n」個の未知数の「n」個の線形方程式を解くには、少し異なるアプローチがあります。 この使用法を示すために簡単な例を取り上げましょう。

方程式を解きましょう-

5x + 9y = 5

3x – 6y = 4

このような線形方程式系は、単一行列方程式Ax = bとして記述できます。ここで、Aは係数行列、bは線形方程式の右辺を含む列ベクトル、xは解を表す列ベクトルです。以下のプログラムに示されています-

スクリプトファイルを作成し、次のコードを入力します-

A = [5, 9; 3, -6];
b = [5;4];
A \ b

あなたがファイルを実行すると、次の結果が表示されます-

ans =

   1.157895
  -0.087719

同様に、以下のように大きな線形システムを解くことができます-

x + 3y -2z = 5

3x + 5y + 6z = 7

2x + 4y + 3z = 8

MATLABでの方程式の展開と収集

*expand* および *collect* 関数は、それぞれ方程式を展開および収集します。 次の例は、概念を示しています-

多くのシンボリック関数を使用する場合、変数がシンボリックであることを宣言する必要があります。

スクリプトファイルを作成し、次のコードを入力します-

syms x   %symbolic variable x
syms y   %symbolic variable x
% expanding equations
expand((x-5)*(x+9))
expand((x+2)*(x-3)*(x-5)*(x+7))
expand(sin(2*x))
expand(cos(x+y))

% collecting equations
collect(x^3 *(x-7))
collect(x^4*(x-3)*(x-5))

あなたがファイルを実行すると、次の結果が表示されます-

ans =
   x^2 + 4*x - 45
ans =
   x^4 + x^3 - 43*x^2 + 23*x + 210
ans =
   2*cos(x)*sin(x)
ans =
   cos(x)*cos(y) - sin(x)*sin(y)
ans =
   x^4 - 7*x^3
ans =
   x^6 - 8*x^5 + 15*x^4

Octaveでの方程式の展開と収集

方程式を展開および収集する expand および collect 関数をそれぞれ提供する symbolic パッケージが必要です。 次の例は、概念を示しています-

多くのシンボリック関数を使用する場合、変数はシンボリックであると宣言する必要がありますが、Octaveにはシンボリック変数を定義するための異なるアプローチがあります。 シンボリックパッケージでも定義されている Sin および Cos の使用に注意してください。

スクリプトファイルを作成し、次のコードを入力します-

% first of all load the package, make sure its installed.
pkg load symbolic

% make symbols module available
symbols

% define symbolic variables
x = sym ('x');
y = sym ('y');
z = sym ('z');

% expanding equations
expand((x-5)*(x+9))
expand((x+2)*(x-3)*(x-5)*(x+7))
expand(Sin(2*x))
expand(Cos(x+y))

% collecting equations
collect(x^3 *(x-7), z)
collect(x^4*(x-3)*(x-5), z)

あなたがファイルを実行すると、次の結果が表示されます-

ans =

-45.0+x^2+(4.0)*x
ans =

210.0+x^4-(43.0)*x^2+x^3+(23.0)*x
ans =

sin((2.0)*x)
ans =

cos(y+x)
ans =

x^(3.0)*(-7.0+x)
ans =

(-3.0+x)*x^(4.0)*(-5.0+x)

代数的表現の因数分解と単純化

*factor* 関数は式を因数分解し、 *simplify* 関数は式を単純化します。 次の例は、概念を示しています-

スクリプトファイルを作成し、次のコードを入力します-

syms x
syms y
factor(x^3 - y^3)
factor([x^2-y^2,x^3+y^3])
simplify((x^4-16)/(x^2-4))

あなたがファイルを実行すると、次の結果が表示されます-

ans =
   (x - y)*(x^2 + x*y + y^2)
ans =
   [ (x - y)*(x + y), (x + y)*(x^2 - x*y + y^2)]
ans =
   x^2 + 4

MATLAB-微積分

MATLABは、微分および積分計算の問題を解くためのさまざまな方法を提供し、任意の次数の微分方程式を解き、限界を計算します。 何よりも、元の関数とその導関数を解くことにより、複雑な関数のグラフを簡単にプロットし、グラフ上の最大値、最小値、その他のひな形ポイントを確認できます。

この章では、微積分の問題を扱います。 この章では、計算前の概念、つまり関数の制限の計算と制限のプロパティの検証について説明します。

次の章_Differential_では、式の導関数を計算し、グラフ上の極大値と極小値を見つけます。 また、微分方程式の解法についても説明します。

最後に、_Integration_の章で、積分計算について説明します。

制限の計算

MATLABは、制限を計算するための limit 関数を提供します。 最も基本的な形式では、 limit 関数は引数として式を取り、独立変数がゼロになるときに式の制限を見つけます。

たとえば、xがゼロになる傾向があるため、関数f(x)=(x ^ 3 ^ + 5)/(x ^ 4 ^ + 7)の制限を計算します。

syms x
limit((x^3 + 5)/(x^4 + 7))

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
   5/7

制限関数は、シンボリックコンピューティングの領域に属します。 syms 関数を使用して、使用しているシンボリック変数をMATLABに伝える必要があります。 変数はゼロ以外の数になる傾向があるため、関数の制限を計算することもできます。 lim〜x→ a〜(f(x))を計算するには、引数付きのlimitコマンドを使用します。 最初は式であり、2番目は_x_が近づく番号です。ここでは_a_です。

たとえば、関数f(x)=(x-3)/(x-1)の限界を計算してみましょう。xは1になる傾向があります。

limit((x - 3)/(x-1),1)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
   NaN

別の例を見てみましょう。

limit(x^2 + 5, 3)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
   14

Octaveを使用した制限の計算

以下は、 symbolic パッケージを使用した上記の例のOctaveバージョンです。実行して結果を比較します-

pkg load symbolic
symbols

x = sym("x");
subs((x^3+5)/(x^4+7),x,0)

Octaveは上記のステートメントを実行し、次の結果を返します-

ans =
   0.7142857142857142857

制限の基本的なプロパティの検証

代数的制限定理は、制限のいくつかの基本的な特性を提供します。 これらは次のとおりです-

制限の基本プロパティ

私たちは2つの機能を考えてみましょう-

  • f(x)=(3x + 5)/(x-3)
  • g(x)= x ^ 2 ^ + 1。

xが両方の関数の5になる傾向にある関数の限界を計算し、これら2つの関数とMATLABを使用して限界の基本的な特性を検証します。

スクリプトファイルを作成し、それに次のコードを入力します-

syms x
f = (3*x + 5)/(x-3);
g = x^2 + 1;
l1 = limit(f, 4)
l2 = limit (g, 4)
lAdd = limit(f + g, 4)
lSub = limit(f - g, 4)
lMult = limit(f*g, 4)
lDiv = limit (f/g, 4)

あなたがファイルを実行すると、それが表示されます-

l1 =
   17

l2 =
   17

lAdd =
   34

lSub =
   0

lMult =
   289

lDiv =
   1

Octaveを使用した制限の基本プロパティの検証

以下は、 symbolic パッケージを使用した上記の例のOctaveバージョンです。実行して結果を比較します-

pkg load symbolic
symbols

x = sym("x");
f = (3*x + 5)/(x-3);
g = x^2 + 1;

l1 = subs(f, x, 4)
l2 = subs (g, x, 4)
lAdd = subs (f+g, x, 4)
lSub = subs (f-g, x, 4)
lMult = subs (f*g, x, 4)
lDiv = subs (f/g, x, 4)

Octaveは上記のステートメントを実行し、次の結果を返します-

l1 =
   17.0
l2 =
   17.0
lAdd =
   34.0
lSub =
   0.0
lMult =
   289.0
lDiv =
   1.0

左右の制限

関数に変数の特定の値の不連続性がある場合、その時点で制限は存在しません。 つまり、関数f(x)の制限は、xが左側からxに近づくにつれてlimitの値がxが右側から近づくにつれて制限の値と等しくないときに、x = aで不連続性を持ちます。

これは、左利きと右利きの制限の概念につながります。 左利きの制限は、x <> aの値に対して、左からx→ aの制限として定義されます。 右利きの制限は、x> aの値について、右からx→ aの制限、つまりxがaに近づく制限として定義されます。 左利きの制限と右利きの制限が等しくない場合、制限は存在しません。

関数を考えてみましょう-

*f(x)=(x-3)/| x-3 |*

lim〜x→ 3〜f(x)が存在しないことを示します。 MATLABは、2つの方法でこの事実を確立するのに役立ちます-

  • 関数のグラフをプロットし、不連続性を表示する。
  • 制限を計算し、両方が異なることを示すことにより。

左利きおよび右利きの制限は、文字列「left」および「right」を最後の引数としてlimitコマンドに渡すことによって計算されます。

スクリプトファイルを作成し、それに次のコードを入力します-

f = (x - 3)/abs(x-3);
ezplot(f,[-1,5])
l = limit(f,x,3,'left')
r = limit(f,x,3,'right')

ファイルを実行すると、MATLABは次のプロットを描画します

関数の不連続性

この後、次の出力が表示されます-

l =
   -1

r =
   1

MATLAB-差分

MATLABは、シンボリック導関数を計算するための diff コマンドを提供します。 最も単純な形式では、微分する関数を引数としてdiffコマンドに渡します。

たとえば、関数f(t)= 3t ^ 2 ^ + 2t ^ -2 ^の導関数を計算してみましょう

スクリプトファイルを作成し、それに次のコードを入力します-

syms t
f = 3*t^2 + 2*t^(-2);
diff(f)

上記のコードをコンパイルして実行すると、次の結果が生成されます-

ans =
6*t - 4/t^3

以下は、上記の計算と同等のオクターブです-

pkg load symbolic
symbols

t = sym("t");
f = 3*t^2 + 2*t^(-2);
differentiate(f,t)

Octaveはコードを実行し、次の結果を返します-

ans =
   -(4.0)*t^(-3.0)+(6.0)*t

差別化の基本ルールの検証

関数を区別するためのさまざまな方程式または規則を簡単に説明し、これらの規則を検証しましょう。 この目的のために、一次導関数に対してf '(x)を、二次導関数に対してf "(x)を記述します。

差別化のルールは次のとおりです-

ルール1

関数fとgおよび実数aとbについては、関数の導関数です-

  • h(x)= af(x)+ bg(x)*はxに関して-
  • h '(x)= af'(x)+ bg '(x)*

ルール2

*sum* および *subtraction* ルールは、fとgが2つの関数である場合、f 'とg'はそれぞれそれらの導関数であると述べています。

(* f + g) '= f' + g '*

(f-g) '= f'-g '

ルール3

*product* ルールは、fとgが2つの関数である場合、f 'とg'はそれぞれそれらの導関数であると述べています。
  • (f.g) '= f'.g + g'.f *

ルール4

*quotient* ルールは、fとgが2つの関数である場合、f 'とg'はそれぞれそれらの導関数であると述べています。
  • (f/g) '=(f'.g-g'.f)/g ^ 2 ^ *

ルール5

多項式*または初等指数では、 *y = f(x)= x ^ n ^ の場合、 f '= nであると規定されています。 x (n-1)

この規則の直接的な結果は、任意の定数の導関数がゼロになることです。つまり、 y = k 、任意の定数、

*f '= 0*

ルール6

*chain* ルールは、xに関する関数* h(x)= f(g(x))*の関数の微分は、
  • h '(x)= f'(g(x))。g '(x)*

スクリプトファイルを作成し、それに次のコードを入力します-

syms x
syms t

f = (x + 2)*(x^2 + 3)
der1 = diff(f)

f = (t^2 + 3)*(sqrt(t) + t^3)
der2 = diff(f)

f = (x^2 - 2*x + 1)*(3*x^3 - 5*x^2 + 2)
der3 = diff(f)

f = (2*x^2 + 3*x)/(x^3 + 1)
der4 = diff(f)

f = (x^2 + 1)^17
der5 = diff(f)

f = (t^3 + 3* t^2 + 5*t -9)^(-6)
der6 = diff(f)

あなたがファイルを実行すると、MATLABは次の結果を表示します-

f =
   (x^2 + 3)*(x + 2)

   der1 =
   2*x*(x + 2) + x^2 + 3

f =
   (t^(1/2) + t^3)*(t^2 + 3)

   der2 =
   (t^2 + 3)*(3*t^2 + 1/(2*t^(1/2))) + 2*t*(t^(1/2) + t^3)

f =
   (x^2 - 2*x + 1)*(3*x^3 - 5*x^2 + 2)

der3 =
   (2*x - 2)*(3*x^3 - 5*x^2 + 2) - (- 9*x^2 + 10*x)*(x^2 - 2*x + 1)

f =
   (2*x^2 + 3*x)/(x^3 + 1)

der4 =
   (4*x + 3)/(x^3 + 1) - (3*x^2*(2*x^2 + 3*x))/(x^3 + 1)^2

f =
   (x^2 + 1)^17

der5 =
   34*x*(x^2 + 1)^16

f =
   1/(t^3 + 3*t^2 + 5*t - 9)^6

der6 =
   -(6*(3*t^2 + 6*t + 5))/(t^3 + 3*t^2 + 5*t - 9)^7

以下は、上記の計算と同等のオクターブです-

pkg load symbolic
symbols

x = sym("x");
t = sym("t");

f = (x + 2)*(x^2 + 3)
der1 = differentiate(f,x)

f = (t^2 + 3)*(t^(1/2) + t^3)
der2 = differentiate(f,t)

f = (x^2 - 2*x + 1)*(3*x^3 - 5*x^2 + 2)
der3 = differentiate(f,x)

f = (2*x^2 + 3*x)/(x^3 + 1)
der4 = differentiate(f,x)

f = (x^2 + 1)^17
der5 = differentiate(f,x)

f = (t^3 + 3* t^2 + 5*t -9)^(-6)
der6 = differentiate(f,t)

Octaveはコードを実行し、次の結果を返します-

f =

(2.0+x)*(3.0+x^(2.0))
der1 =

3.0+x^(2.0)+(2.0)*(2.0+x)*x
f =

(t^(3.0)+sqrt(t))*(3.0+t^(2.0))
der2 =

(2.0)*(t^(3.0)+sqrt(t))*t+((3.0)*t^(2.0)+(0.5)*t^(-0.5))*(3.0+t^(2.0))
f =

(1.0+x^(2.0)-(2.0)*x)*(2.0-(5.0)*x^(2.0)+(3.0)*x^(3.0))
der3 =

(-2.0+(2.0)*x)*(2.0-(5.0)*x^(2.0)+(3.0)*x^(3.0))+((9.0)*x^(2.0)-(10.0)*x)*(1.0+x^(2.0)-(2.0)*x)
f =

(1.0+x^(3.0))^(-1)*((2.0)*x^(2.0)+(3.0)*x)
der4 =

(1.0+x^(3.0))^(-1)*(3.0+(4.0)*x)-(3.0)*(1.0+x^(3.0))^(-2)*x^(2.0)*((2.0)*x^(2.0)+(3.0)*x)
f =

(1.0+x^(2.0))^(17.0)
der5 =

(34.0)*(1.0+x^(2.0))^(16.0)*x
f =

(-9.0+(3.0)*t^(2.0)+t^(3.0)+(5.0)*t)^(-6.0)
der6 =

-(6.0)*(-9.0+(3.0)*t^(2.0)+t^(3.0)+(5.0)*t)^(-7.0)*(5.0+(3.0)*t^(2.0)+(6.0)*t)

指数関数、対数関数、および三角関数の微分

次の表は、一般的に使用される指数関数、対数関数、三角関数の導関数を提供します-

Function Derivative
ca.x ca.x.ln c.a (ln is natural logarithm)
ex ex
ln x 1/x
lncx 1/x.ln c
xx xx.(1 + ln x)
sin(x) cos(x)
cos(x) -sin(x)
tan(x) sec2(x), or 1/cos2(x), or 1 + tan2(x)
cot(x) -csc2(x), or -1/sin2(x), or -(1 + cot2(x))
sec(x) sec(x).tan(x)
csc(x) -csc(x).cot(x)

スクリプトファイルを作成し、それに次のコードを入力します-

syms x
y = exp(x)
diff(y)

y = x^9
diff(y)

y = sin(x)
diff(y)

y = tan(x)
diff(y)

y = cos(x)
diff(y)

y = log(x)
diff(y)

y = log10(x)
diff(y)

y = sin(x)^2
diff(y)

y = cos(3*x^2 + 2*x + 1)
diff(y)

y = exp(x)/sin(x)
diff(y)

あなたがファイルを実行すると、MATLABは次の結果を表示します-

y =
   exp(x)
   ans =
   exp(x)

y =
   x^9
   ans =
   9*x^8

y =
   sin(x)
   ans =
   cos(x)

y =
   tan(x)
   ans =
   tan(x)^2 + 1

y =
   cos(x)
   ans =
   -sin(x)

y =
   log(x)
   ans =
   1/x

y =
   log(x)/log(10)
   ans =
   1/(x*log(10))

y =
   sin(x)^2
   ans =
   2*cos(x)*sin(x)

y =
   cos(3*x^2 + 2*x + 1)
   ans =
   -sin(3*x^2 + 2*x + 1)*(6*x + 2)

y =
   exp(x)/sin(x)
   ans =
   exp(x)/sin(x) - (exp(x)*cos(x))/sin(x)^2

以下は、上記の計算と同等のオクターブです-

pkg load symbolic
symbols

x = sym("x");
y = Exp(x)
differentiate(y,x)

y = x^9
differentiate(y,x)

y = Sin(x)
differentiate(y,x)

y = Tan(x)
differentiate(y,x)

y = Cos(x)
differentiate(y,x)

y = Log(x)
differentiate(y,x)

% symbolic packages does not have this support
%y = Log10(x)
%differentiate(y,x)

y = Sin(x)^2
differentiate(y,x)

y = Cos(3*x^2 + 2*x + 1)
differentiate(y,x)

y = Exp(x)/Sin(x)
differentiate(y,x)

Octaveはコードを実行し、次の結果を返します-

y =

exp(x)
ans =

exp(x)
y =

x^(9.0)
ans =

(9.0)*x^(8.0)
y =

sin(x)
ans =

cos(x)
y =

tan(x)
ans =

1+tan(x)^2
y =

cos(x)
ans =

-sin(x)
y =

log(x)
ans =

x^(-1)
y =

sin(x)^(2.0)
ans =

(2.0)*sin(x)*cos(x)
y =

cos(1.0+(2.0)*x+(3.0)*x^(2.0))
ans =

-(2.0+(6.0)*x)*sin(1.0+(2.0)*x+(3.0)*x^(2.0))
y =

sin(x)^(-1)*exp(x)
ans =

sin(x)^(-1)*exp(x)-sin(x)^(-2)*cos(x)*exp(x)

高階微分の計算

関数fの高階微分を計算するには、構文* diff(f、n)*を使用します。

関数y = f(x)= x .e ^ -3x ^の2次導関数を計算しましょう

f = x*exp(-3*x);
diff(f, 2)

MATLABはコードを実行し、次の結果を返します-

ans =
9*x*exp(-3*x) - 6*exp(-3*x)

以下は、上記の計算と同等のオクターブです-

pkg load symbolic
symbols

x = sym("x");
f = x*Exp(-3*x);
differentiate(f, x, 2)

Octaveはコードを実行し、次の結果を返します-

ans =

(9.0)*exp(-(3.0)*x)*x-(6.0)*exp(-(3.0)*x)

この例では、問題を解決しましょう。 関数* y = f(x)= 3 sin(x)+ 7 cos(5x)の場合。 方程式 f "+ f = -5cos(2x)*が成り立つかどうかを調べる必要があります。

スクリプトファイルを作成し、それに次のコードを入力します-

syms x
y = 3*sin(x)+7*cos(5*x);  % defining the function
lhs = diff(y,2)+y;        %evaluting the lhs of the equation
rhs = -5*cos(2*x);        %rhs of the equation
if(isequal(lhs,rhs))
   disp('Yes, the equation holds true');
else
   disp('No, the equation does not hold true');
end
disp('Value of LHS is: '), disp(lhs);

あなたがファイルを実行すると、次の結果が表示されます-

No, the equation does not hold true
Value of LHS is:
-168*cos(5*x)

以下は、上記の計算と同等のオクターブです-

pkg load symbolic
symbols

x = sym("x");
y = 3*Sin(x)+7*Cos(5*x);           % defining the function
lhs = differentiate(y, x, 2) + y;  %evaluting the lhs of the equation
rhs = -5*Cos(2*x);                 %rhs of the equation

if(lhs == rhs)
   disp('Yes, the equation holds true');
else
   disp('No, the equation does not hold true');
end
disp('Value of LHS is: '), disp(lhs);

Octaveはコードを実行し、次の結果を返します-

No, the equation does not hold true
Value of LHS is:
-(168.0)*cos((5.0)*x)

曲線の最大値と最小値を見つける

グラフの極大値と極小値を検索する場合、基本的には特定の局所性での関数のグラフ上の最高点または最低点、または記号変数の特定の範囲の値を探しています。

関数y = f(x)の場合、グラフの勾配がゼロであるグラフ上の点は*静止点*と呼ばれます。 言い換えれば、静止点はf '(x)= 0の場所です。

微分する関数の静止点を見つけるには、導関数をゼロに設定して方程式を解く必要があります。

関数f(x)= 2x ^ 3 ^ + 3x ^ 2 ^ − 12x + 17の静止点を見つけましょう

次の手順を実行します-

まず関数を入力して、グラフをプロットしましょう。

syms x
y = 2*x^3 + 3*x^2 - 12*x + 17;   % defining the function
ezplot(y)

MATLABはコードを実行し、次のプロットを返します-

マキシマとミニマを見つける

ここに上記の例のオクターブ同等のコードがあります-

pkg load symbolic
symbols

x = sym('x');
y = inline("2*x^3 + 3*x^2 - 12*x + 17");

ezplot(y)
print -deps graph.eps

私たちの目的は、グラフ上のいくつかの局所的な最大値と最小値を見つけることです。そのため、グラフ上の区間[-2、2]の局所的な最大値と最小値を見つけましょう。

syms x
y = 2*x^3 + 3*x^2 - 12*x + 17;   % defining the function
ezplot(y, [-2, 2])

MATLABはコードを実行し、次のプロットを返します-

マキシマとミニマを見つける

ここに上記の例のオクターブ同等のコードがあります-

pkg load symbolic
symbols

x = sym('x');
y = inline("2*x^3 + 3*x^2 - 12*x + 17");

ezplot(y, [-2, 2])
print -deps graph.eps

次に、導関数を計算しましょう。

g = diff(y)

MATLABはコードを実行し、次の結果を返します-

g =
   6*x^2 + 6*x - 12

上記の計算と同等のオクターブがあります-

pkg load symbolic
symbols

x = sym("x");
y = 2*x^3 + 3*x^2 - 12*x + 17;
g = differentiate(y,x)

Octaveはコードを実行し、次の結果を返します-

g =
   -12.0+(6.0)*x+(6.0)*x^(2.0)

微分関数gを解いて、ゼロになる値を取得しましょう。

s = solve(g)

MATLABはコードを実行し、次の結果を返します-

s =
   1
   -2

以下は、上記の計算と同等のオクターブです-

pkg load symbolic
symbols

x = sym("x");
y = 2*x^3 + 3*x^2 - 12*x + 17;
g = differentiate(y,x)
roots([6, 6, -12])

Octaveはコードを実行し、次の結果を返します-

g =

-12.0+(6.0)*x^(2.0)+(6.0)*x
ans =

  -2
   1

これはプロットと一致します。 したがって、臨界点x = 1、-2で関数fを評価しましょう。 *subs コマンドを使用して、シンボリック関数の値を置き換えることができます。

subs(y, 1), subs(y, -2)

MATLABはコードを実行し、次の結果を返します-

ans =
   10
ans =
   37

以下は、上記の計算と同等のオクターブです-

pkg load symbolic
symbols

x = sym("x");
y = 2*x^3 + 3*x^2 - 12*x + 17;
g = differentiate(y,x)

roots([6, 6, -12])
subs(y, x, 1), subs(y, x, -2)
ans =
   10.0
ans =
   37.0-4.6734207789940138748E-18*I

したがって、区間[-2,2]での関数f(x)= 2x ^ 3 ^ + 3x ^ 2 ^ − 12x + 17の最小値と最大値は10と37です。

微分方程式を解く

MATLABは、微分方程式を記号的に解くための dsolve コマンドを提供します。

単一の方程式の解を見つけるための dsolve コマンドの最も基本的な形式は次のとおりです。

dsolve('eqn')

ここで、_eqn_は方程式の入力に使用されるテキスト文字列です。

MATLABがC1、C2などにラベル付けする任意の定数のセットを含むシンボリックソリューションを返します。

また、問題の初期条件と境界条件を指定することができます。カンマ区切りのリストとして、次の方程式に従ってください-

dsolve('eqn','cond1', 'cond2',…)

dsolveコマンドを使用するために、*デリバティブはD *で示されます。 たとえば、f '(t)= -2 * f + cost(t)のような方程式は次のように入力されます-

*'Df = -2* f + cos(t)' *

より高い導関数は、導関数の順序でDを続けることによって示されます。

たとえば、式f "(x)+ 2f '(x)= 5sin3xは次のように入力する必要があります-

*'D2y + 2Dy = 5* sin(3 *x)'*

一階微分方程式の簡単な例を取り上げましょう:y '= 5y。

s = dsolve('Dy = 5*y')

MATLABはコードを実行し、次の結果を返します-

s =
   C2*exp(5*t)

二階微分方程式の別の例を取り上げましょう:y "-y = 0、y(0)= -1、y '(0)= 2。

dsolve('D2y - y = 0','y(0) = -1','Dy(0) = 2')

MATLABはコードを実行し、次の結果を返します-

ans =
   exp(t)/2 - (3*exp(-t))/2

MATLAB-統合

統合では、本質的に異なる2つのタイプの問題を扱います。

  • 最初のタイプでは、関数の導関数が与えられ、関数を見つけたいです。 したがって、基本的に差別化のプロセスを逆にします。 この逆プロセスは、反微分、または原始関数の検出、または*不定積分*の検出として知られています。
  • 2番目のタイプの問題は、非常に多数の非常に小さな数量を加算し、数量のサイズがゼロに近づき、項の数が無限になる傾向があるときに制限を取ることです。 このプロセスは、*定積分*の定義につながります。

面積、体積、重心、慣性モーメント、力によって行われた仕事、および他の多くのアプリケーションを見つけるために、定積分が使用されます。

MATLABを使用して不定積分を見つける

定義により、関数f(x)の導関数がf '(x)である場合、xに関するf'(x)の不定積分はf(x)です。 たとえば、x ^ 2 ^の微分(xに対する)は2xであるため、2xの不定積分はx ^ 2 ^であると言えます。

記号で-

*f '(x ^ 2 ^)= 2x* 、したがって、

∫2xdx = x ^ 2 ^。

定数cの値に対するx ^ 2 ^ + cの導関数も2xになるため、不定積分は一意ではありません。

これは次のように記号で表されます-

  • ∫2xdx = x ^ 2 ^ + c *。

ここで、cは「任意の定数」と呼ばれます。

MATLABは、式の積分を計算する int コマンドを提供します。 関数の不定積分の式を導出するには、次のように書きます-

int(f);

たとえば、前の例から-

syms x
int(2*x)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
   x^2

例1

この例では、一般的に使用されるいくつかの式の積分を見つけましょう。 スクリプトファイルを作成し、その中に次のコードを入力します-

syms x n

int(sym(x^n))
f = 'sin(n*t)'
int(sym(f))
syms a t
int(a*cos(pi*t))
int(a^x)

あなたがファイルを実行すると、次の結果が表示されます-

ans =
   piecewise([n == -1, log(x)], [n ~= -1, x^(n + 1)/(n + 1)])
f =
sin(n*t)
ans =
   -cos(n*t)/n
   ans =
   (a*sin(pi*t))/pi
   ans =
   a^x/log(a)

例2

スクリプトファイルを作成し、その中に次のコードを入力します-

syms x n
int(cos(x))
int(exp(x))
int(log(x))
int(x^-1)
int(x^5*cos(5*x))
pretty(int(x^5*cos(5*x)))

int(x^-5)
int(sec(x)^2)
pretty(int(1 - 10*x + 9 * x^2))

int((3 + 5*x -6*x^2 - 7*x^3)/2*x^2)
pretty(int((3 + 5*x -6*x^2 - 7*x^3)/2*x^2))
*pretty* 関数は、より読みやすい形式で式を返すことに注意してください。

あなたがファイルを実行すると、次の結果が表示されます-

ans =
   sin(x)

ans =
   exp(x)

ans =
   x*(log(x) - 1)

ans =
   log(x)

ans =
(24*cos(5*x))/3125 + (24*x*sin(5*x))/625 - (12*x^2*cos(5*x))/125 + (x^4*cos(5*x))/5 - (4*x^3*sin(5*x))/25 + (x^5*sin(5*x))/5
                                    2             4
   24 cos(5 x)   24 x sin(5 x)   12 x  cos(5 x)   x  cos(5 x)
   ----------- + ------------- - -------------- + ------------
      3125            625             125              5

        3             5

   4 x  sin(5 x)   x  sin(5 x)
   ------------- + -----------
         25              5

ans =
-1/(4*x^4)

ans =
tan(x)
        2
  x (3 x  - 5 x + 1)

ans =
- (7*x^6)/12 - (3*x^5)/5 + (5*x^4)/8 + x^3/2

      6      5      4    3
    7 x    3 x    5 x    x
  - ---- - ---- + ---- + --
     12     5      8     2

MATLABを使用した定積分の検索

定義により、定積分は基本的に合計の限界です。 定積分を使用して、曲線とx軸の間の領域や2つの曲線の間の領域などの領域を見つけます。 必要な量を合計の限界として表すことができる他の状況でも、定積分を使用できます。

*int* 関数は、積分を計算する範囲を渡すことにより、明確な積分に使用できます。

計算する

定積分

私たちは書く、

int(x, a, b)

たとえば、Exampleの値を計算するには、次のように記述します-

int(x, 4, 9)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
   65/2

以下は、上記の計算と同等のオクターブです-

pkg load symbolic
symbols

x = sym("x");
f = x;
c = [1, 0];
integral = polyint(c);

a = polyval(integral, 9) - polyval(integral, 4);
display('Area: '), disp(double(a));

Octaveはコードを実行し、次の結果を返します-

Area:

   32.500

代替ソリューションは、次のようにオクターブが提供するquad()関数を使用して与えることができます-

pkg load symbolic
symbols

f = inline("x");
[a, ierror, nfneval] = quad(f, 4, 9);

display('Area: '), disp(double(a));

Octaveはコードを実行し、次の結果を返します-

Area:
   32.500

例1

x軸と曲線y = x ^ 3 ^ −2x + 5と縦座標x = 1およびx = 2で囲まれた面積を計算してみましょう。

必要な領域は次のように与えられます-

面積計算

スクリプトファイルを作成し、次のコードを入力します-

f = x^3 - 2*x +5;
a = int(f, 1, 2)
display('Area: '), disp(double(a));

あなたがファイルを実行すると、次の結果が表示されます-

a =
23/4
Area:
   5.7500

以下は、上記の計算と同等のオクターブです-

pkg load symbolic
symbols

x = sym("x");
f = x^3 - 2*x +5;
c = [1, 0, -2, 5];
integral = polyint(c);

a = polyval(integral, 2) - polyval(integral, 1);
display('Area: '), disp(double(a));

Octaveはコードを実行し、次の結果を返します-

Area:

   5.7500

代替ソリューションは、次のようにオクターブが提供するquad()関数を使用して与えることができます-

pkg load symbolic
symbols

x = sym("x");
f = inline("x^3 - 2*x +5");

[a, ierror, nfneval] = quad(f, 1, 2);
display('Area: '), disp(double(a));

Octaveはコードを実行し、次の結果を返します-

Area:
   5.7500

例2

曲線下の領域を見つけます。f(x)= x ^ 2 ^ cos(x)for -4≤x≤9

スクリプトファイルを作成し、次のコードを記述します-

f = x^2*cos(x);
ezplot(f, [-4,9])
a = int(f, -4, 9)
disp('Area: '), disp(double(a));

あなたがファイルを実行すると、MATLABはグラフをプロットします-

定積分

出力は以下のとおりです-

a =
8*cos(4) + 18*cos(9) + 14*sin(4) + 79*sin(9)

Area:
   0.3326

以下は、上記の計算と同等のオクターブです-

pkg load symbolic
symbols

x = sym("x");
f = inline("x^2*cos(x)");

ezplot(f, [-4,9])
print -deps graph.eps

[a, ierror, nfneval] = quad(f, -4, 9);
display('Area: '), disp(double(a));

MATLAB-多項式

MATLABは、降べき順に並べられた係数を含む行ベクトルとして多項式を表します。 たとえば、方程式P(x)= x ^ 4 ^ + 7x ^ 3 ^-5x + 9は次のように表すことができます-

p = [1 7 0 -5 9];

多項式の評価

*polyval* 関数は、指定された値で多項式を評価するために使用されます。 たとえば、x = 4で以前の多項式 *p* を評価するには、次のように入力します-
p = [1 7 0  -5 9];
polyval(p,4)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans = 693

MATLABは、行列多項式を評価するための polyvalm 関数も提供します。 行列多項式は、変数として行列を持つ*多項式*です。

たとえば、正方行列Xを作成し、Xで多項式pを評価します-

p = [1 7 0  -5 9];
X = [1 2 -3 4; 2 -5 6 3; 3 1 0 2; 5 -7 3 8];
polyvalm(p, X)

MATLABは上記のステートメントを実行し、次の結果を返します-

ans =
      2307       -1769        -939        4499
      2314       -2376        -249        4695
      2256       -1892        -549        4310
      4570       -4532       -1062        9269

多項式の根を見つける

*roots* 関数は、多項式の根を計算します。 たとえば、多項式pの根を計算するには、次のように入力します-
p = [1 7 0  -5 9];
r = roots(p)

MATLABは上記のステートメントを実行し、次の結果を返します-

r =
   -6.8661 + 0.0000i
   -1.4247 + 0.0000i
   0.6454 + 0.7095i
   0.6454 - 0.7095i

関数 poly は、根関数の逆関数であり、多項式係数に戻ります。 たとえば-

p2 = poly(r)

MATLABは上記のステートメントを実行し、次の結果を返します-

p2 =

   Columns 1 through 3:

      1.00000 + 0.00000i   7.00000 + 0.00000i   0.00000 + 0.00000i

   Columns 4 and 5:

      -5.00000 - 0.00000i   9.00000 + 0.00000i

多項式曲線近似

*polyfit* 関数は、最小二乗の意味でデータのセットに適合する多項式の係数を見つけます。 xとyがn次多項式に当てはまるxとyデータを含む2つのベクトルである場合、次のように書き込むことによりデータに当てはまる多項式を取得します-
p = polyfit(x,y,n)

スクリプトファイルを作成し、次のコードを入力します-

x = [1 2 3 4 5 6]; y = [5.5 43.1 128 290.7 498.4 978.67];   %data
p = polyfit(x,y,4)   %get the polynomial

% Compute the values of the polyfit estimate over a finer range,
% and plot the estimate over the real data values for comparison:
x2 = 1:.1:6;
y2 = polyval(p,x2);
plot(x,y,'o',x2,y2)
grid on

あなたがファイルを実行すると、MATLABは次の結果を表示します-

p =
   4.1056  -47.9607  222.2598 -362.7453  191.1250

そして、次のグラフをプロットします-

多項式曲線近似

MATLAB-変換

MATLABは、ラプラス変換やフーリエ変換などの変換を操作するためのコマンドを提供します。 変換は、分析を簡素化し、別の角度からデータを見るためのツールとして、科学および工学で使用されます。

たとえば、フーリエ変換を使用すると、時間の関数として表される信号を周波数の関数に変換できます。 ラプラス変換により、微分方程式を代数方程式に変換できます。

MATLABは、ラプラス、フーリエ、および高速フーリエ変換で動作する laplacefourier 、および fft コマンドを提供します。

ラプラス変換

時間f(t)の関数のラプラス変換は、次の積分によって与えられます-

ラプラス変換

ラプラス変換は、f(t)からF(s)への変換とも呼ばれます。 この変換または統合プロセスは、シンボリック変数tの関数f(t)を、別の変数sを持つ別の関数F(s)に変換することがわかります。

ラプラス変換は、微分方程式を代数方程式に変換します。 関数f(t)のラプラス変換を計算するには、

laplace(f(t))

この例では、一般的に使用されるいくつかの関数のラプラス変換を計算します。

スクリプトファイルを作成し、次のコードを入力します-

syms s t a b w

laplace(a)
laplace(t^2)
laplace(t^9)
laplace(exp(-b*t))
laplace(sin(w*t))
laplace(cos(w*t))

あなたがファイルを実行すると、次の結果が表示されます-

ans =
   1/s^2

ans =
   2/s^3

ans =
   362880/s^10

ans =
   1/(b + s)

ans =
   w/(s^2 + w^2)

ans =
   s/(s^2 + w^2)

逆ラプラス変換

MATLABでは、コマンド ilaplace を使用して逆ラプラス変換を計算できます。

例えば、

ilaplace(1/s^3)

MATLABは上記のステートメントを実行し、結果を表示します-

ans =
   t^2/2

スクリプトファイルを作成し、次のコードを入力します-

syms s t a b w

ilaplace(1/s^7)
ilaplace(2/(w+s))
ilaplace(s/(s^2+4))
ilaplace(exp(-b*t))
ilaplace(w/(s^2 + w^2))
ilaplace(s/(s^2 + w^2))

あなたがファイルを実行すると、次の結果が表示されます-

ans =
   t^6/720

ans =
   2*exp(-t*w)

ans =
   cos(2*t)

ans =
   ilaplace(exp(-b*t), t, x)

ans =
   sin(t*w)

ans =
   cos(t*w)

フーリエ変換

フーリエ変換は、一般に、時間の数学関数f(t)を新しい関数に変換します。この関数は、またはFで示される場合があり、その引数はサイクル/秒(ヘルツ)またはラジアン/秒の単位の周波数です。 新しい関数は、フーリエ変換および/または関数fの周波数スペクトルとして知られています。

スクリプトファイルを作成し、その中に次のコードを入力します-

syms x
f = exp(-2*x^2);     %our function
ezplot(f,[-2,2])     % plot of our function
FT = fourier(f)      % Fourier transform

ファイルを実行すると、MATLABは次のグラフをプロットします-

フーリエ変換

次の結果が表示されます-

FT =
   (2^(1/2)*pi^(1/2)*exp(-w^2/8))/2

としてフーリエ変換をプロット-

ezplot(FT)

次のグラフを与えます-

フーリエ変換のプロット

逆フーリエ変換

MATLABは、関数の逆フーリエ変換を計算するための ifourier コマンドを提供します。 例えば、

f = ifourier(-2*exp(-abs(w)))

MATLABは上記のステートメントを実行し、結果を表示します-

f =
   -2/(pi*(x^2 + 1))

MATLAB-GNU Octaveチュートリアル

GNU Octaveは、MATLABのような高レベルのプログラミング言語であり、MATLABとほとんど互換性があります。 また、数値計算にも使用されます。

Octaveは、MATLABで次の共通機能を備えています-

  • 行列は基本的なデータ型です
  • 複素数の組み込みサポートがあります
  • 数学関数とライブラリが組み込まれています
  • ユーザー定義関数をサポートします

GNU Octaveも自由に再配布可能なソフトウェアです。 Free Software Foundationによって公開されているGNU General Public License(GPL)の条件に基づいて、再配布および/または変更することができます。

MATLAB vsオクターブ

ほとんどのMATLABプログラムはOctaveで実行されますが、OctaveではMATLABではできない構文が許可されているため、Octaveプログラムの一部はMATLABで実行されない場合があります。

たとえば、MATLABは一重引用符のみをサポートしていますが、Octaveは文字列を定義するための一重引用符と二重引用符の両方をサポートしています。 Octaveのチュートリアルをお探しの場合は、MATLABとOctaveの両方をカバーするこのチュートリアルを最初からお読みください。

適合例

このチュートリアルで扱うほとんどすべての例は、MATLABおよびOctaveと互換性があります。 構文を変更せずに同じ結果を生成するMATLABとOctaveの例を試してみましょう-

この例では、関数g = xe ^-(x ^ 2 ^ + y ^ 2 の3D表面マップを作成します。 スクリプトファイルを作成し、次のコードを入力します-

[x,y] = meshgrid(-2:.2:2);
g = x .* exp(-x.^2 - y.^2);
surf(x, y, g)
print -deps graph.eps

ファイルを実行すると、MATLABは次の3Dマップを表示します-

Matlabの3Dマップ

互換性のない例

MATLABのすべてのコア機能はOctaveで使用できますが、たとえば、微分および積分計算など、両方の言語で完全に一致しない機能がいくつかあります。 このチュートリアルでは、構文が異なる両方のタイプの例を提供しようとしました。

MATLABとOctaveが異なる関数を使用して曲線の面積を取得する次の例を考えてみましょう:f(x)= x ^ 2 ^ cos(x)for -4≤x≤9 以下はコードのMATLABバージョンです-

f = x^2*cos(x);
ezplot(f, [-4,9])
a = int(f, -4, 9)
disp('Area: '), disp(double(a));

あなたがファイルを実行すると、MATLABはグラフをプロットします-

定積分

次の結果が表示されます

a =
8*cos(4) + 18*cos(9) + 14*sin(4) + 79*sin(9)

Area:
   0.3326

しかし、オクターブで同じ曲線の面積を与えるために、次のように*記号*パッケージを使用する必要があります-

pkg load symbolic
symbols

x = sym("x");
f = inline("x^2*cos(x)");

ezplot(f, [-4,9])
print -deps graph.eps

[a, ierror, nfneval] = quad(f, -4, 9);
display('Area: '), disp(double(a));

MATLAB-Simulink

Simulinkは、MATLABと統合された動的および組み込みシステム向けのシミュレーションおよびモデルベースの設計環境です。 これもMathWorksが開発したSimulinkは、マルチドメイン動的システムのモデリング、シミュレーション、分析を行うデータフローグラフィカルプログラミング言語ツールです。 基本的には、カスタマイズ可能なブロックライブラリのセットを備えたグラフィカルブロック図作成ツールです。

これにより、MATLABアルゴリズムをモデルに組み込み、シミュレーション結果をMATLABにエクスポートして、さらに分析することができます。

Simulinkのサポート-

  • システムレベルの設計
  • シミュレーション
  • 自動コード生成
  • 組み込みシステムのテストと検証

MathWorksが提供するその他のアドオン製品と、Simulinkで使用できるサードパーティのハードウェアおよびソフトウェア製品がいくつかあります。

次のリストはそれらのいくつかの簡単な説明を与えます-

  • Stateflow では、ステートマシンとフローチャートを開発できます。
  • Simulink Coder を使用すると、システムをリアルタイムで自動的に実装するためのCソースコードを生成できます。
  • xPC Target と* x86ベースのリアルタイムシステム*は、物理システム上でSimulinkおよびStateflowモデルをリアルタイムでシミュレーションおよびテストする環境を提供します。
  • Embedded Coder は特定の埋め込みターゲットをサポートします。
  • HDL Coder を使用すると、合成可能なVHDLおよびVerilogを自動的に生成できます。
  • SimEvents は、キューイングシステムをモデリングするためのグラフィカルビルディングブロックのライブラリを提供します。

Simulinkは、モデリングスタイルのチェック、要件のトレーサビリティ、モデルカバレッジ分析により、モデルの体系的な検証と検証が可能です。

Simulink Design Verifierを使用すると、設計エラーを特定し、モデルチェック用のテストケースシナリオを生成できます。

Simulinkを使用する

Simulinkを開くには、MATLABワークスペースに入力します-

simulink

Simulinkが Library Browser で開きます。 ライブラリブラウザーは、シミュレーションモデルの構築に使用されます。

Simulinkライブラリブラウザー、scaledwidth = 100.0%

左側のウィンドウペインには、さまざまなシステムに基づいて分類されたいくつかのライブラリがあり、各ライブラリをクリックすると、右側のウィンドウペインにデザインブロックが表示されます。

モデルの構築

新しいモデルを作成するには、ライブラリブラウザーのツールバーの[新規]ボタンをクリックします。 これにより、新しい無題のモデルウィンドウが開きます。

Simulink New Model Window、scaledwidth = 100.0%

Simulinkモデルはブロック線図です。

モデル要素を追加するには、ライブラリブラウザーから適切な要素を選択し、モデルウィンドウにドラッグします。

または、モデル要素をコピーして、モデルウィンドウに貼り付けることもできます。

Simulinkライブラリからアイテムをドラッグアンドドロップして、プロジェクトを作成します。

この例の目的のために、2つのブロックがシミュレーションに使用されます-ソース(信号)および*シンク*(スコープ)。 信号発生器(ソース)がアナログ信号を生成し、スコープ(シンク)によってグラフィカルに視覚化されます。

ソースとシンク、scaledwidth = 100.0%

ライブラリからプロジェクトウィンドウに必要なブロックをドラッグすることから始めます。 次に、ブロックを接続します。これは、あるブロックの接続ポイントから別のブロックの接続ポイントにコネクタをドラッグすることで実行できます。

「Sine Wave」ブロックをモデルにドラッグしてみましょう。

正弦波ブロック

ライブラリから「シンク」を選択し、「スコープ」ブロックをモデルにドラッグします。

Scopeブロック、scaledwidth = 100.0%

Sine Waveブロックの出力からScopeブロックの入力に信号線をドラッグします。

ブロックは接続されていません、scaledwidth = 100.0%

ブロックは接続されています、scaledwidth = 100.0%

Run 」ボタンを押してシミュレーションを実行し、すべてのパラメーターをデフォルトのままにします(シミュレーションメニューから変更できます)

スコープから以下のグラフを取得する必要があります。

シミュレーション