scilab,scicosを用いた微分方程式の数値計算(数値シ...

64
システム解析講義資料 その4 福祉環境工学科メカトロニクスコース Scilab,Scicos を用いた微分方程式の数値計算(数値シミュレーション) 1.Scilab,Scicos 紹介 Scilab とは http://www.geocities.jp/rui_hirokawa/scilab/ INRIA (フランス国立コンピュータ科学・制御研究所)で作成された高機能な行列演算パッ ケージで,以下の特徴をもつ。 る。 SCILAB は、 UNIX,Mac,MS-Windows(v2.3 から)で動作し、 自由に配布/使用するこ とが可能である。 netlib 等で配布される高度な数値演算ライブラリを使用しており、 行列の固有値計算 のみならず、各種のシミュレーション、 最適化計算、制御系設計、信号処理等に使用 することが可能である。 ・ カスタマイズ性に優れており、ユーザー定義の関数等を簡単に付加できる。 SCICOS により、信号ラインをマウスで結ぶだけでシミュレーションが簡単に 実行可 能である。(MATLAB(tm)Simulink(tm) に似た機能を提供する。) Scilab は、つぎの 3 つの部分から構成されている。 ¾ インタプリタ ¾ 関数ライブラリ(Scilab プロシージャ) ¾ Fortran C のサブルーチンライブラリ INRIAInstitut National de Recherche en Informatique Enautomatique:フランス国立 情報学自動制御研究所) http://ja.wikipedia.org/wiki/INRIA :フランス政府研究省および経済財政産業省が共同管理するフランス国立研究所である。 1979 年に,フランスの 情報・制御分野の中心となる研究機関として設立された。フランス 国内に8ヶ所の研究施設(Aquitaine, Brittany, Lorraine, France-Comete, Ile-de-France, Nord-Pas-de-Calais, Cote d’Azur, Languedoc-Roussilion, Rhone-Alpes)を持ち,3000 以上の職員を抱える大規模な研究所である。 Netlib http://www.netlib.org/ HPCHigh Performance Computing高速数値計算)のためのライブラリを多数配布し ている国際サイト. http://www.scilab.org/ Scilab is a scientific software package for numerical computations providing a powerful open computing environment for engineering and scientific applications. 1

Upload: vunguyet

Post on 23-Mar-2018

229 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

Scilab,Scicos を用いた微分方程式の数値計算(数値シミュレーション)

1.Scilab,Scicos 紹介

Scilab とは http://www.geocities.jp/rui_hirokawa/scilab/ :INRIA (フランス国立コンピュータ科学・制御研究所)で作成された高機能な行列演算パッ

ケージで,以下の特徴をもつ。 る。 ・ SCILAB は、UNIX,Mac,MS-Windows(v2.3 から)で動作し、 自由に配布/使用するこ

とが可能である。 ・ netlib 等で配布される高度な数値演算ライブラリを使用しており、 行列の固有値計算

のみならず、各種のシミュレーション、 最適化計算、制御系設計、信号処理等に使用

することが可能である。 ・ カスタマイズ性に優れており、ユーザー定義の関数等を簡単に付加できる。 ・ SCICOS により、信号ラインをマウスで結ぶだけでシミュレーションが簡単に 実行可

能である。(MATLAB(tm)の Simulink(tm) に似た機能を提供する。) ・ Scilab は、つぎの 3 つの部分から構成されている。

インタプリタ 関数ライブラリ(Scilab プロシージャ) Fortran と C のサブルーチンライブラリ

INRIA(Institut National de Recherche en Informatique Enautomatique:フランス国立

情報学自動制御研究所) http://ja.wikipedia.org/wiki/INRIA :フランス政府研究省および経済財政産業省が共同管理するフランス国立研究所である。

1979 年に,フランスの 情報・制御分野の中心となる研究機関として設立された。フランス

国内に8ヶ所の研究施設(Aquitaine, Brittany, Lorraine, France-Comete, Ile-de-France, Nord-Pas-de-Calais, Cote d’Azur, Languedoc-Roussilion, Rhone-Alpes)を持ち,3000 人

以上の職員を抱える大規模な研究所である。 Netlib http://www.netlib.org/ :HPC(High Performance Computing,高速数値計算)のためのライブラリを多数配布し

ている国際サイト. http://www.scilab.org/

• Scilab is a scientific software package for numerical computations providing a powerful open computing environment for engineering and scientific applications.

1

Page 2: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

(Scilab は科学技術への応用に対して強力な計算環境を提供する数値計算ソフトウ

ェアパッケージである。) Scilab is an open source software. Since 1994 it has been distributed freely along with the source code via the Internet. It is currently used in educational and industrial environments around the world. Scilab is now the responsibility of the Scilab Consortium, launched in May 2003. There are currently 25 members in Scilab Consortium. (Scilab はオープンソースソフトウェアである。1994 年以来,インターネットでソ

ースコードを無料で配布してきている。現在では,世界中の教育と工業界で使われ

ている。Scilab は,現在,2003 年 5 月に設立された Scilab コンソーシアム(協会))

が責任機関となっており,このコンソーシアムには,25 会員が所属している。) Scilab includes hundreds of mathematical functions with the possibility to add interactively programs from various languages (C, C++, Fortran…). It has sophisticated data structures (including lists, polynomials, rational functions, linear systems...), an interpreter and a high level programming language. (ScilabはC,C++,Fortranなどの多様な言語から対話的にプログラムを追加できる

機能をもつ数百の数学関数を含んでいる。Scilab は,洗練されたデータ構造(リス

ト,多項式,有理関数,線形システムなど),インタプリタ,高レベルプログラミン

グ言語を有している。) Scilab has been designed to be an open system where the user can define new data types and operations on these data types by using overloading. (Scilab はユーザが新しいデータ型と多重定義(オーバローディング:引数情報に

より演算を多重に定義すること)によるこれらのデータ型上での演算を定義できる

オープンシステムとして設計されている。) A number of toolboxes are available with the system(つぎのような多くのツール

ボックスが使用可能): o 2-D and 3-D graphics, animation(2D,3D グラフィクス,アニメーション) o Linear algebra, sparse matrices(線形代数,スパース行列) o Polynomials and rational functions(多項式,有理関数) o Interpolation, approximation(内挿,近似) o Simulation: ODE solver and DAE solver(シミュレーション,常微分方程

式ソルバ,微分代数方程式ソルバ) o Scicos: a hybrid dynamic systems modeler and simulator(Sicos:ハイブ

リッド動的モデラおよびシミュレータ) o Classic and robust control, LMI optimization(古典,ロバスト制御,LM

I最適化)

2

Page 3: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

o Differentiable and non-differentiable optimization(微分可能,微分不可

能最適化) o Signal processing(信号処理) o Metanet: graphs and networks(Metanet,グラフとネットワーク) o Parallel Scilab(並列 Scilab) o Statistics(統計) o Interface with Computer Algebra: Maple package for Scilab code

generation (コンピュータ代数のインターフェース:Scilab コード生成の

ための Maple パッケージ) o Interface with Fortran, Tcl/Tk, C, C++, Java, LabVIEW(Fortran, Tcl/Tk,

C, C++, Java, LabVIEW のインターフェース)

Scicos とは: http://www.scicos.org/ Scicos is a graphical dynamical system modeler and simulator toolbox included in the Scilab ® engineering and scientific computation software.

3

Page 4: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

(Scicos は Scilab科学技術計算ソフトウェアに含まれるグラフィカルな動的システムの

モデラ兼シミュレータである。)

With Scicos you can create block diagrams to model and simulate the dynamics of hybrid dynamical systems and compile your models into executable code. (Scicos を用いると,モデルに対するブロック線図を作り,ハイブリッド動的システムの

動特性をシミュレーションし,演算可能なコードにモデルをコンパイルできる。)

動的システム:微分方程式系(1つあるいは複数の微分方程式からなる系)

ハイブリッド動的システム:微分方程式と差分方程式の混在する系

動特性:微分方程式や差分方程式の時間的振舞(解の挙動)

Scicos is used for signal processing, systems control, queuing systems, and to study physical and biological systems. (Scicos は信号処理,システム制御,待ち行列や物理や生物システムを研究するために用

いる。)

With Scicos you can: (Scicos を用いると,以下のことが可能である。) ・ Graphically model, compile, and simulate dynamical systems

(図的に動的システムをモデル化,コンパイル,シミュレーションする。) ・ Combine continuous and discrete-time behaviors in the same model

(同じモデル内で連続時間および離散時間の挙動を結合する。) ・ Select model elements from Palettes of standard blocks

(標準ブロックのパレットからモデル要素を選択する。) ・ Program new blocks in C, Fortran, or Scilab Language

(C,Fortan あるいは Scilab 言語で新しいブロックをプログラムする。) ・ Run simulations in batch mode from Scilab environment

(Scilab 環境からバッチモードでシミュレーションを実行する。) ・ Generate C code from Scicos model using a Code Generator

(コード生成器を用いて Scicos モデルから C コードを生成する。) ・ Run simulations in real time with real devices using Scicos-HIL

(Scicos-HIL を用いて,実際の装置を用いて,リアルタイムにシミュレーションを実

行する。) ・ Generate hard real-time control executables with Scicos-RTAI

(Scicos-RTAI を用いて,ハードウェアのリアルタイム制御実行プログラムを生成す

る。) ・ Simulate digital communications systems with Scicos-ModNum

(Scicos-ModNum を用いて,ディジタル通信システムをシミュレーションする。) ・ Use implicit blocks developed in the Modelica language.

(Modelica 言語(http://www.modelica.org/)により作られた暗黙ブロックを用いる。)

4

Page 5: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

2.Scilab を用いた微分方程式の解法

Scilab の文法については,Scilab マニュアルを参考にしてもらうとして,ここでは,微

分方程式の解法に限定して,その使用法について説明する。 2.1 Scilab のインストール

http://www.scilab.org/ より,インストーラをダウンロードする。現在,ver.4.1.1 がダ

ウンロード可能。 2.2 Scilab の起動

アイコンをダブルクリックすると,Scilab が起動し,以下のウィンドウが開く。

2.3 Scilab の機能の簡単な説明 文献5)を参照。

● コマンドラインの利用(インタプリタ的使い方) ウィンドウ(コマンドウィンドウ)内の --> がコマンドプロンプトであり,この後にキー

ボードから命令を打つ込み,Enter キーを押すことにより,命令が実行できる。Scilab はこ

の結果をエコーとして,コマンドウィンドウ内に表示する。 例題1:スカラーの場合 --> 2*3

--> 2**10

--> 2^10

--> 2*%pi %pi は円周率を表す定数

5

Page 6: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

--> 1.5*2e-2 e-2 は,10-2

--> (%i)**2 %i は虚数単位

--> 2+%i + 3+%i*2 複素数の計算

例題2:ベクトルの場合(一度入力した変数は記憶保持される) --> a=[1 2 3 ] 行ベクトルの定義1

--> b=[1, 2, 3] 行ベクトルの定義2

--> c=[1;2;3] 列ベクトルの定義1

--> d=[1 列ベクトルの定義2

--> 2 (各行は Enter キーで改行)

--> 3]

--> f=a*c ベクトル同士の演算1 --> g=c*a ベクトル同士の演算1

6

Page 7: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

--> a(2) アドレッシング(要素指定) --> a([1 2]) アドレッシング(要素指定) --> c([1 3]) アドレッシング(要素指定) --> a(1:3) アドレッシング(要素指定) --> a(2:3) アドレッシング(要素指定) --> d = 0:0.5:2 ベクトルの生成(初期値 0,最終値 2,きざみ 0.5)

[ ] は,空ベクトル

7

Page 8: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

--> x = linspace(1,2,5) 1 から 2までを 10 等分する。

--> y = logspace(1,2,5) 101から 102までを対数軸で 10 等分する。

--> z = x’ x の転置行列を zとする。

--> w0 = [1+%i*2 -1+%i*3] 複素ベクトル(行ベクトル)

--> w1 = w0.’ 複素ベクトルの転置(列ベクトル)

--> w2 = w0’ 複素ベクトルの共役転置(列ベクトル)

--> w3=w0*w0' 複素ベクトルの絶対値(大きさ)

8

Page 9: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

例題3:行列の場合1 --> A = [1 2 3; 4 5 6; 7 8 0] 3×3 行列の定義

--> B = [1 0 1 3×3 行列の定義のもうひつの定義

-->0 1 0

-->1 1 1]

--> C = A+B

--> D = A-B

--> E = A*B

--> F = A\B F = A-1B の計算

9

Page 10: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

例題4:行列の場合2:行列の生成 --> A = zeros(2,3) 2×3 ゼロ行列の生成

--> B = ones(3,3) 3×3 成分がすべて1の行列の生成

--> C = eye(3,3) 3×3 単位行列の生成

--> D = diag([1,2,3]) 対角成分が[1,2,3]の行列の生成

--> E = rand(2,3) 2×3 一様乱数行列の生成

--> F = rand(2,3,'normal') 2×3 正規乱数行列の生成

階数の出力

10

Page 11: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

例題5:行列の場合3:行列に関する演算 --> A = [1 2 5; 0 2 1; 0 0 3]

--> B = det(A) A の行列式

--> C = inv(A) A の逆行列

--> x = spec(A) A の固有値

--> [D,X]=bdiag(A) A の固有値を対角成分とする行列 D

固有ベクトルからなる正方行列 X

11

Page 12: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

例題6:組み込まれている定数 特殊な定数は予め,文字定数の形で定義されている。

--> %i 虚数単位

--> %pi 円周率

--> %inf 無限大(infinity)

--> %nan 非数値(not a number)

--> %t 論理値(真)

--> %f 論理値(偽)

--> %eps マシンイプシロン(1+ε>1 となる最小の値)

--> format(‘v’,15) 数値の表示 15 桁

--> format(‘e’,6) 数値の表示,指数形式で全 6桁(仮数部と指数部あわせて)

12

Page 13: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

例題7:組み込み関数 大抵の関数は,スカラーだけでなく,ベクトル・行列に対して演算を行なうことができ

る。また,実数だけでなく複素数に対しても演算を行うことができる。 関数名 機能 関数名 機能

abs 絶対値 sqrt 平方根

real 複素数の実数部 imag 複素数の虚数部

conj 共役複素数 angle 位相角

round 四捨五入 fix 整数化

floor 切り下げ ceil 切り上げ

sign 符号 mod 商

rem 剰余 lcm 最小公倍数

gcm 最大公約数 factor 素因数分解

isprime 素数判定 factorial 階乗

exp 指数関数 log 自然対数

log10 常用対数 log2 底 2 の対数

sin,cos,tan 三角関数(ラジアン) sind,cosd,tand 三角関数(度数)

cot,sec,csc 三角関数(ラジアン) cotd,secd,cscd 三角関数(度数)

asin,acos,atan 逆三角関数(ラジアン) asind,acosd,atand 逆三角関数(度数)

acot,asec,acsc 逆三角関数(ラジアン) acotd,asecd,acscd 逆三角関数(度数)

sinh,cosh,tanh 双曲線関数 asinh,acosh,atanh 逆双曲線関数

coth,sech,csch 双曲線関数 acoth,asech,acsch 逆双曲線関数

atan(y,x) 偏角

*atan(y,x)は, ⎟⎠⎞

⎜⎝⎛−

xy1tan ]を [ ππ ,− の範囲で返す。

--> abs(-1)

--> sqrt(5)

--> sqrt(-2)

--> exp(0)

--> exp(1+%i*2) --> sin(2*%pi)

--> sin(%i)

--> atan(1,1)

13

Page 14: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

deff コマンドを用いると,自分で関数を定義することができる。自分で定義した関数も,ス

カラーだけでなく,ベクトル・行列に対して演算を行なうことができる。ここでは, yxyxfunczxxxfuncy +==−== 2),(2),sin(*)exp()(1

を定義し,スカラー,ベクトル,行列に対して演算するとつぎのようになる。

14

Page 15: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

注意: における.*は,要素ごとの乗算を意味している。)sin(*).exp( xx− x がベクトルの場

合,exp( は,各々同じ大きさのベクトルを値をして返すので,各)sin(), xx− x の要素ごとに

を計算したい場合には,要素ごとの演算をする必要がある。 )sin()exp( xx−

15

Page 16: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

例題8:多項式の表現 Scilab では、1 変数の多項式を扱うことができる。変数は,あらかじめ poly コマンドで宣

言しておく必要がある。 --> x=poly(0,‘x’) x が多項式変数であることを宣言している。

--> p=(x+1)^2

--> p*p

--> a=[1 x;-x^2 x]

--> b=[-2*x 1;x^2-1 x]

--> a+b

--> a*b

16

Page 17: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

--> c = poly([1 2],'s') この命令だけで,根が 1,2 の多項式を定義する。

--> d = poly([1 2 3],'s','c') この命令だけで,係数が 1,2,3(最高次の係数が 3)の

多項式を定義する。

17

Page 18: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

--> c = poly([1 2],'s')

--> d = roots(c) 多項式の根を求める。

行列に対して,poly,degree,coeff を行うと,固有多項式、その次数、その係数(昇べき順)

をそれぞれ求めることができる。

--> A=[1,2;3,4]

--> p=poly(A, 'x')

--> degree(p) --> coeff(p)

多項式行列の逆行列は,つぎのようにして求めることができる。 --> x=poly(0,'x')

--> a=[ x, x^2+1; x x^2-1]

--> 1/a

18

Page 19: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

例題9:論理計算 ‘%t’,’%f’で真,偽を入力できる。行列の全要素に対する AND,OR は,それぞれ and,or

コマンドで行い,行列の各要素に対する AND,OR は,それぞれ"&","|"で行う。また,not は

~で行う。

19

Page 20: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

論理値の EQUAL,NOT EQUAL は,それぞれ= =,~=で行う。判定の対象が行列の場合は,

各要素に対して判定が行われる。

20

Page 21: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

例題10:便利な命令 命令 機能

… 式が 1行に入らないときに,行末につけて,次の行に継続する.

, 文の区切り

改行 文の区切り

; 文の区切り,計算結果をエコー(復唱)しない.

// コメント行

help 関数の説明をヘルプする.

demo デモプログラムを実行する.

clc テキスト画面のクリア

pwd 現在のディレクトリ(フォルダ)を表示する.

cd ディレクトリ(フォルダ)の変更.

dir 現在のディレクトリ内のファイルを一覧する.

what 現在のディレクトリにあるプログラムファイルを表示する.

who 使用している変数(ワークスペース内の大域変数)のリストを表示する.

whos 使用している変数(ワークスペース内の大域変数)の詳細を表示する.

clear 使用している変数(ワークスペース内の大域変数)の記憶を消去する.

type テキストファイルの内容を表示する.

lookfor キーワードの検索

which 指定された関数が存在するディレクトリ(フォルダ)を表示する.

format 表示形式を指定する.

disp 結果をコマンドウィンドウに表示する.

mfprintf データを書式付に変換する.

exec プログラムの実行.

21

Page 22: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

例題11:ヘルプ機能

22

Page 23: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

● ファイルの利用(プログラミング的使い方) コマンドラインでの実行だけでなく,Scilabも通常のプログラミング言語と同じように,

作ったプログラムをファイルに保存し,それを読み出して実行することができる。 手順1:プログラムファイルを格納するためのフォルダ(ディレクトリ)を作る。ここで

は,Cドライブのルートフォルダ内に sci というサブフォルダ(C:¥sci)を作ったとします。 手順2:Scilab のメニューバーの Editor をクリックする。

クリック

エディタウィンドウが開く

23

Page 24: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

手順3:このエディタでプログラムを作成する。

10,,2.0,1.0,0);sin( L== xxy のグラフを表示する。

手順4:作ったプログラムを保存する。拡張子は,sci か sce にする。ここでは,

¥C¥sci¥example1.sce で保存する。Scilab では,.単独で動くスクリプトプログラムを sce ファイルに,関数プログラムを .sci ファイル に格納らしいが,プログラムを1つの関数

とみれば,あまり区別する必要はないかと思われる。

24

Page 25: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

手順5:実行する方法は2通りある。

その1)エディタ内で実行する方法:メニューExecute の Load into Scilab を選択する。

実行結果

25

Page 26: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

その2)コマンドラインから実行する方法

2-1)メニューFile の Change Directory を用いて,現在のフォルダ(ディレクトリ)

をプログラムを保存したフォルダに変更する。これは,命令 cd あるいは chdirを用いても同じことができる。

26

Page 27: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

2-2)コマンドラインから,現在のディレクトリ内にあるファイルを表示して,対

象のファイルがあるかどうか確認したあと,つぎの実行命令を入力する。

--> exec('example1.sce')

この部分は,Scilab がエコーとして返

してくるところ。エコー表示がいやな

ら,最後に ; をつける。

●構造化プログラミング命令

Scilab には,Visual Basic,C,Java 言語のように,処理を繰り返すための for 文,while文,判断によって処理を分岐するための if 文,if-else 文,if-elseif-else 文, select 文(MATLAB

では switch 文に相当),break 文,continue 文などが用意されている。ただし,Scilab で

は,MATLAB と同様に,単純に繰返し処理を行うと,計算速度が低下することがあるので,

用意されているベクトル計算のための組み込み関数を使うことが求められる。

1)比較演算子

条件の評価を行う際に,つぎの比較演算子を用いる。

== 等しい (equal to)

< 小さい (smaller than)

> 大きい (greater than)

<= 小さいか等しい (smaller or equal to)

>= 大きいか等しい (greater or equal to)

<> あるいは ~= 等しくない (not equal to)

27

Page 28: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

2)for 文

文法:for 変数=式,文,・・・,文 end 例題

100,cos,sin1

21

1 =⎟⎠⎞

⎜⎝⎛=⎟

⎠⎞

⎜⎝⎛= ∑∑

==

nnks

nks

n

k

n

kππ を計算せよ。

コード1:単純にforを用いたもの

コード 1の実行結果:

28

Page 29: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

コード2:繰り返し変数をベクトルにしたもの

コード3:組み込み関数のベクトル計算を用いたもの(こちらを推奨)

sum(a):ベクトルあるいは行列の要素のすべての和を求める。

29

Page 30: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

3)

3)for 文のネスト

30

Page 31: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

4)while 文

文法:while 論理式,文,・・・,文 end 例題

100,cos,sin1

21

1 =⎟⎠⎞

⎜⎝⎛=⎟

⎠⎞

⎜⎝⎛= ∑∑

==

nnks

nks

n

k

n

kππ を計算せよ。

31

Page 32: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

5)if 文

文法 1:if 論理式,文,・・・,文 end 文法 1’:if 論理式 then 文,・・・,文 end 文法 2:if 論理式 else 文,・・・,文 end 文法 3:if 論理式 1, 文 elseif 論理式 2,文 else 文 end

32

Page 33: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

6)select 文

end

else 文 case 式 n,文 n ・・・

case 式 1,文 1 文法: select 式

x=初期値:増分値:最終値 x=-1:1:1 と同じで,増分値が 1 の場合

省略することができる。この場合,ベク

トル x は,[-1,0,1] になる。

33

Page 34: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

7)break 文 ループから強制的に抜ける命令

8)continue 文 条件を満たしているとき,ループの最後に飛びループを続ける命令。多

重ループの際には,ループの最後に部分に飛ぶ。

例題:5秒間整数の乱数を発生し続け,もし途中で整数 500 が得られれば,それを表示して

処理を修了する。

toc( ) - Read the stopwatch timer. tic( ) - Start a stopwatch timer.

例題:5000 回乱数を発生し続け,途中で 500 が得られれば表示し,さらに発生させ続ける。

34

Page 35: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

●関数ファイル

Scilab のコード内で、deff コマンドを用いると、簡単な関数は定義できるが、複雑な関

数は,サブプログラム(処理をまかせた下請けプログラムのこと)を用いた方が便利であ

る。Scilab,MATLAB には,関数プログラムが用意されているが,C言語などの関数プログラ

ムと違い,複数の出力引数で値を返すことができるので,FORTAN のサブルーチンに似てい

る。ただ,もっと便利がいいのは,引数の数が違っていても,同じ関数名でプログラミン

グが可能な多重定義機能がある。多重定義機能については,ここでは省略し,簡単な使い

方のみ説明する。Scilab,MATLAB のプログラムファイルは,いままでの例にでてきたような

単独でそのまま実行可能なスクリプトファイル(拡張子は sce)と他のプログラムやコマン

ドから呼び出される関数ファイル(拡張子は sci)がある。

関数ファイルは,つぎの文法に従う。

①出力引数が1つの場合

②出力引数が複数の場合

③出力引数がない場合

endfunction

functionname : 関数の名前 out:出力引数

in1,in2, … : 入力引数

function [out1,out2, …] = functionname(in1,in2,…) 関数の定義(out1,out2, …を in1,in2, …を使って計算) endfunction

functionname : 関数の名前 out1,out2, …:出力引数

in1,in2, … : 入力引数

function functionname(in1,in2,…) 関数の定義 endfunction

関数の定義(out を in1,in2, …を使って計算) function out = functionname(in1,in2,…)

35

Page 36: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

④入力引数がない場合

⑤出力引数も入力引数もない場合

関数の定義 endfunction

function functionname 関数の定義 endfunction

function [out1,out2, …] = functionname( )

注)格納ファイル名は,MATLAB の場合,functionname と同じでなければ

ならないが,Scilab では異なっていても良い。ただし,関数ファイルを呼び出

すスクリプトファイルを実行する前に,組み込み関数 getf を用いて,関数プロ

グラムを予め読み込んでおく必要がある。以下の例は,関数ファイル名 ex_func1.sci を読み込む場合である。

getf(‘ex_func1.sci’) あるいは, getf ex_func1.sci

注)大域変数と局所変数:スクリプトファイルやコマンドプロンプトで定義さ

れる変数は大域変数(グローバル変数)といい,ワークスペースと呼ばれるメ

インプログラムの変数を定義したメモリ領域に格納され,スクリプトファイル

やコマンドプロンプト上で,いつでも呼び出すことができる。これに対して,

関数ファイル内で定義される変数は局所変数(ローカル変数)と呼ばれ,その関

数ファイルの中だけで呼び出しが可能である。ただし,global 命令を用いると,

関数ファイル内の変数もワークスペース内に記憶して大域変数として使用す

ることができる。ただし,global 命令は,スクリプトファイルと関数ファイル

の両方で宣言しておく必要がある。 文法: global 変数 1 変数 2 ・・・

36

Page 37: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

以下の例題は,すべて参考文献14)を参考にしている。

①の例題:複数データをベクトルで定義し,その平均と分散を関数プログラムで求める。

( ) ( ) ∑∑∑∑====

−=+−=−==n

kk

n

kkk

n

kk

N

kk xx

nxxxx

nxx

nvax

nx

1

22

1

22

1

2

1

1211,1

関数ファイルを実行する前に,getf 命令

を実行していないので,エラーが出る。

関数ファイル

スクリプトファイル

37

Page 38: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

getf(‘関数ファイル名’):ワークスペース内で指定

した関数ファイルを呼び出して実行することが

できる。Clear 命令ではクリアされない。

clear all : ワークスペース(メインプログラムの

変数を定義したメモリ領域)のユーザ定義メモリ

のオールクリア。

一度,getf でワークスペース内に読み込んでおくと,コマンドラインからも使用すること

ができる。また,clear 命令ではクリアされない。

38

Page 39: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

②の例題

③の例題

また,Scilab では,関数内で結果の表示はできないので,disp 命令により,強制的

に表示している。

sprintf はC言語と同様に,数値を書式付で文字列に変換する。

39

Page 40: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

関数を再定義しなおして,getf命令を実行すると,

この警告が出るが無視してよい。

④の例題

40

Page 41: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

⑤の例題

41

Page 42: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

●deff コマンドを用いて,関数をスクリプトプログラムに埋め込む方法

42

Page 43: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

2.4 Scilab の微分方程式ソルバー(solver)

Scilab には,微分方程式を数値計算する専用の関数(solver)である ode が用意されて

いる。コマンドラインから,--> help ode とすると,そのソルバーのヘルプが表示され

る。

ode - ordinary differential equation solver

y=ode(y0,t0,t,f) [y,w,iw]=ode([type],y0,t0,t [,rtol [,atol]],f [,jac] [,w,iw]) [y,rd,w,iw]=ode("root",y0,t0,t [,rtol [,atol]],f [,jac],ng,g [,w,iw]) y=ode("discrete",y0,k0,kvect,f)

Parameters

y0 : real vector or matrix (initial conditions). t0 : real scalar (initial time). t : real vector (times at which the solution is computed). f : external (function or character string or list). type : one of the following character string: "adams" "stiff" "rk" "rkf" "fix"

"discrete" "roots"

rtol,atol : real constants or real vectors of the same size as y . jac : external (function or character string or list). w,iw : real vectors.

ng : integer. g : external (function or character string or list). k0 : integer (initial time). kvect : integer vector.

例1 つぎの微分方程式の解を ode ソルバーを用いて計算し,グラフ表示する。

0)0(,1)(5.0)(=+−= xtx

dttdx

ode ソルバーで,微分方程式を定義する外部関数を記述するには,

1)スクリプトプログラム内に関数を定義する方法

1-1)deff コマンドを用いる方法

1-2)function,・・・,endfunction を用いる方法

2)関数プログラムでスクリプトプログラムと別に定義する方法

の2つがある。

43

Page 44: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

1)の方法

t=0:0.1:10 解をもとめる各

時刻を指定する。この場合は,

t=[0,10]の範囲を 0.1 刻みで出

力する。 plot(t,x) 2次元グラフ表示

x0 初期条件 x(0) t0 初期時刻 t0=0

xdot x’を意味する。

注意:以下のように,スクリプトプログラ

ム内に関数プログラムをかきこんでもかま

わない。

2)の方法

44

Page 45: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

例2 つぎの微分方程式の解を ode ソルバーを用いて計算し,グラフ表示する。

1)0(),(5.0)(=−= xtx

dttdx

例3 つぎの微分方程式の解を ode ソルバーを用いて計算し,グラフ表示する。

0)0(,sin)(5.0)(=+−= xttx

dttdx

例4 つぎの微分方程式の解を ode ソルバーを用いて計算し,グラフ表示する。

1)0(,))(()( 2 == xtxdt

tdx

45

Page 46: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

例5 つぎの微分方程式の解を ode ソルバーを用いて計算し,グラフ表示する。

1)0(),()(=−= xttx

dttdx

例6 つぎの微分方程式の解を ode ソルバーを用いて計算し,グラフ表示する。

1)0(,)(

1)(== x

txdttdx

課題:上の例1)から例6)までの厳密解を変数分離法を用いて計算

し,グラフと一致するか確認せよ。ラプラス変換を知っている人は,

用いてもよいが,ラプラス変換で解けないものがあることに注意せよ。

46

Page 47: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

例7 次式の2階常微分方程式を解く方法について説明する。

0)0(,1)0(,0)(2)(3)(2

2

===++dt

dxxtxdt

tdxdt

txd

数値計算に限らず,微分方程式の解析においては,高階微分方程式は,ベクトル型の1

階微分方程式に書き直す。上式の場合,つぎのようになる。まず,ベクトル z を,

⎥⎦

⎤⎢⎣

⎡=⎥

⎤⎢⎣

⎡=

xx

zz

&2

1z

と定義すると,上式の微分方程式は次式のようになる。

⎥⎦

⎤⎢⎣

⎡=

⎥⎦

⎤⎢⎣

⎡=⎥

⎤⎢⎣

⎡⎥⎦

⎤⎢⎣

⎡−−

=⎥⎦

⎤⎢⎣

⎡=

01

)0(

3210

3210

z

zzxx

xx

&&&

&&

47

Page 48: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

例8 次式の2階常微分方程式を解く方法について説明する。

0)0(,1)0(,0)()()(2

2

===++dt

dxxtxdt

tdxdt

txd

例9 次式の2階常微分方程式を解く方法について説明する。

1)0(,1)0(,0)()()(2

2

−===+−dt

dxxtxdt

tdxdt

txd

例10 次式の2階常微分方程式を解く方法について説明する。

0)0(,1)0(,5sin)()()(2

2

===++dt

dxxttxdt

tdxdt

txd

ベクトル z を,例7と同様にと定義すると,上式の微分方程式は次式のようになる。

⎥⎦

⎤⎢⎣

⎡=

⎥⎦

⎤⎢⎣

⎡+⎥

⎤⎢⎣

⎡−−

=⎥⎦

⎤⎢⎣

⎡+⎥

⎤⎢⎣

⎡⎥⎦

⎤⎢⎣

⎡−−

=⎥⎦

⎤⎢⎣

⎡=

01

)0(

5sin10

1110

5sin10

1110

z

zz ttxx

xx

&&&

&&

48

Page 49: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

課題:上の例7)から例10)までの厳密解を計算し,グラフと一致

するか確認せよ。ラプラス変換を知っている人は,用いてもよい。す

べてラプラス変換で解ける。

49

Page 50: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

例11 次式の2階常微分方程式を解く方法について説明する。

0)0(,1)0(,0))(()()( 22

2

===++dt

dxxtxdt

tdxdt

txd

ベクトル z を,例7と同様に定義すると,上式の微分方程式は次式のようになる。

⎥⎦

⎤⎢⎣

⎡=

⎥⎦

⎤⎢⎣

⎡−−

=⎥⎦

⎤⎢⎣

⎡=⎥

⎤⎢⎣

⎡=

01

)0(

221

2

2

1

z

zzz

zxx

zz

&&

&

&

&&

50

Page 51: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

3.Scicos を用いた微分方程式の解法

3.1 Scicos の起動

1)コマンドラインから,以下を入力する。

--> scicos( ) あるいは,Application メニューの Scicos を選択する。

2)このとき,以下の scicos のグラフィカルエディタ(お絵かきエディタ)が起動する。

51

Page 52: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

3)Edit メニュの Pallets を左クリックする。

4)つぎのようなメニューが表示される。

52

Page 53: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

5)それそれのメニューを選択すると,つぎのような道具箱が表示される。この道具箱な

いのアイコンを選択して,グラフィカルエディタ内に,図を描くことができる。

Sources:各種信号の生成

Sinks:各種信号の保存・表示

53

Page 54: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

Linear:線形演算子,線形システムブロック

Non_linear:非線形演算子,非線形システムブロック

54

Page 55: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

55

Page 56: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

6)微分方程式を計算し,結果をグラフ表示するためには,このパレットの中から,グラ

フィックエディタ内につぎのようなものを移動する。

Non_linear より

Linear よりSouces より

Sinksより

例1’ つぎの微分方程式の解を scicos 用いて計算し,グラフ表示する。

0)0(,1)(5.0)(=+−= xtx

dttdx

Linear 内の積分演算子を用いて,式を定義する。Linear 内には微分演算子もあるが,信号

内に時間的変動の速い誤差やノイズがある場合には,微分演算子により増幅されるので,

そのようなことが少ない積分演算子を用いる。

56

Page 57: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

③②

ここの部分が微分方程式の関係を

記述している。

信号同士の足し,引き演算をする。

この場合は,引き算になっている。

オシロスコープ表示させるには,タ

イマーが必要なので,注意すること

各アイコンを右クリックでショートカットメニューを出して操作する。アイコン同時を結

合するには Link,移動させるには,Smart Move を用いる。各種アイコンの設定値はダブ

ルクリックして,設定する。この例の場合,つぎのように設定している。

57

Page 58: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

③ 微分方程式の

初期条件

58

Page 59: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

実行する前に,シミュレーションの設定値を,Simulate メニューの Setup で指定する。

59

Page 60: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

実行するには,Simulate メニューの Run を選択する。

このとき,オシロスコープ⑤の結果表示が次のようにされる。

60

Page 61: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

例10‘ 次式の2階常微分方程式の解を scicos 用いて計算し,グラフ表示する。

0)0(,1)0(,5sin)()()(2

2

===++dt

dxxttxdt

tdxdt

txd

sin5t の指定

61

Page 62: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

左側の積分演算子の初期条件はゼロ

右側の積分演算子の初期条件は1

X軸の表示は 30 秒まで

62

Page 63: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

また,Simulate メニューの Setup は,つぎのように指定している。

シミュレーションは30秒まで

オシロスコープの結果はつぎのとおりである。

63

Page 64: Scilab,Scicosを用いた微分方程式の数値計算(数値シ …onsen-mula.org/wp-content/uploads/2017/04/sysanal_4.pdf · Scilab,Scicosを用いた微分方程式の数値計算(数値シミュレーション)

システム解析講義資料 その4 福祉環境工学科メカトロニクスコース

グラフィック命令については,文献14)などを参照すること。

参考文献:

1)http://www.scilab.org/

2)http://tech.chase-dream.com/matlab/scilab.html

3)http://www.geocities.jp/rui_hirokawa/scilab/

4)http://www.ecl.sys.hiroshima-u.ac.jp/scilab/introscilab/introscilab.html

5)http://f28.aaa.livedoor.jp/~kenpei/scilab/manu.html

6)http://atmori.hp.infoseek.co.jp/scilab/diffeq.htm

7)http://feedback.mech.fukui-u.ac.jp/scilab/scilab0.html

8)http://www.bekkoame.ne.jp/~ponpoko/Math/Scilab.html

9)http://www.mlb.co.jp/linux/science/scilab/index.html

10) http://f42.aaa.livedoor.jp/~hassaku/crswikicrs/?Scilab%C6%FE%CC%E7%B5%AD

11) http://www.oishi.info.waseda.ac.jp/~oishi/signal/signal.htm

12) http://telecom0.eng.niigata-u.ac.jp/index.php?Scilab

13) http://www-ec.denki.numazu-ct.ac.jp/scilab/

14) 上坂吉則:MATLAB;Scilab プログラミング事典,ソフトバンククリエイティブ

(2007)

64