Matlab-quick-guide
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. |
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は、次のタイプの意思決定ステートメントを提供します。 詳細を確認するには、次のリンクをクリックしてください-
Sr.No. | Statement & Description |
---|---|
1 |
|
2 |
|
3 |
If… elseif…elseif…else…end statements
|
4 |
1つの if または elseif ステートメントを別の if または elseif ステートメント内で使用できます。 |
5 |
|
6 |
1つの switch ステートメントを別の switch ステートメント内で使用できます。 |
MATLAB-ループタイプ
コードのブロックを数回実行する必要がある場合があります。 一般に、ステートメントは順番に実行されます。 関数の最初のステートメントが最初に実行され、次に2番目のステートメントが実行されます。
プログラミング言語は、より複雑な実行パスを可能にするさまざまな制御構造を提供します。
ループステートメントを使用すると、ステートメントまたはステートメントのグループを複数回実行できます。ほとんどのプログラミング言語では、ループステートメントの一般的な形式は次のとおりです-
MATLABは、ループ要件を処理するために次のタイプのループを提供します。 詳細を確認するには、次のリンクをクリックしてください-
Sr.No. | Loop Type & Description |
---|---|
1 |
特定の条件が真の間、ステートメントまたはステートメントのグループを繰り返します。 ループ本体を実行する前に条件をテストします。 |
2 |
一連のステートメントを複数回実行し、ループ変数を管理するコードを短縮します。 |
3 |
別のループ内で1つ以上のループを使用できます。 |
ループ制御ステートメント
ループ制御ステートメントは、通常のシーケンスから実行を変更します。 実行がスコープを離れると、そのスコープで作成されたすべての自動オブジェクトが破棄されます。
MATLABは、次の制御ステートメントをサポートしています。 詳細を確認するには、次のリンクをクリックしてください。
Sr.No. | Control Statement & Description |
---|---|
1 |
|
2 |
ループがその本体の残りをスキップし、反復する前にその状態をすぐに再テストします。 |
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
興味深いことに、 uint8 や uint16 などの数値変換関数を使用して、文字列内の文字を数値コードに変換できます。 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はイメージファイルを表示します。 ただし、現在のディレクトリに保存する必要があります。
例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は次のプロットを表示します-
関数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は次のプロットを表示します-
コードファイルを少し変更し、増分を5に減らします-
x = [-100:5:100];
y = x.^2;
plot(x, y)
MATLABは、より滑らかなグラフを描きます-
グラフにタイトル、ラベル、グリッド線、スケーリングを追加する
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は次の等高線図を表示します-
コードを少し変更して、マップを整えます
[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マップを表示します-
*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は、ラプラス、フーリエ、および高速フーリエ変換で動作する laplace 、 fourier 、および 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のすべてのコア機能は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つのブロックがシミュレーションに使用されます-ソース(信号)および*シンク*(スコープ)。 信号発生器(ソース)がアナログ信号を生成し、スコープ(シンク)によってグラフィカルに視覚化されます。
ライブラリからプロジェクトウィンドウに必要なブロックをドラッグすることから始めます。 次に、ブロックを接続します。これは、あるブロックの接続ポイントから別のブロックの接続ポイントにコネクタをドラッグすることで実行できます。
「Sine Wave」ブロックをモデルにドラッグしてみましょう。
ライブラリから「シンク」を選択し、「スコープ」ブロックをモデルにドラッグします。
Scopeブロック、scaledwidth = 100.0%
Sine Waveブロックの出力からScopeブロックの入力に信号線をドラッグします。
ブロックは接続されていません、scaledwidth = 100.0%
ブロックは接続されています、scaledwidth = 100.0%
「 Run 」ボタンを押してシミュレーションを実行し、すべてのパラメーターをデフォルトのままにします(シミュレーションメニューから変更できます)
スコープから以下のグラフを取得する必要があります。