next up previous
Next: 11 数値積分 Up: octave_kiso_out Previous: 9 制御コマンド- for, if,

Subsections


10 関数定義

10.1 関数定義

関数 $f(x) = x^2 -3x +5$を定義し、いろいろな数値を求める。 習うよりなれろで、以下のようなリストを作成しファイルに保存する。

まず、エディターを立ち上げる。

\includegraphics[width=16cm]{/home/nisimiya/Bunsho/Daigaku_and_Jimu/Lesson/Subject/Computer_kisoron/Octave/Fig/octave12.eps}

リストを入力し、保存する。

#######  Program List  ##############
function y = hobutu(x)
y = x^2 - 3*x + 5
endfunction

hobutu(0)
hobutu(2)
hobutu(5)

それでは実行。

[nisimiya@localhost Renshu]$ octave kansu|_1|.m
GNU Octave, version 2.0.16 (i386-vine-linux-gnu).
Copyright (C) 1996, 1997, 1998, 1999, 2000 John W. Eaton.
This is free software with ABSOLUTELY NO WARRANTY.
For details, type `warranty'.

ans = 5
ans = 3
ans = 15
計算結果が表示されましたでしょうか。 一行目の
function y = hobutu(x) と言うのは、関数宣言部分で、 ``y''と言うのは返り値を表している。 ``end''までが関数の内容そのもの。 もう少し練習してみましょう。

階乗の計算をする関数を定義してみましょう。

############## Program ###############

function y = kaijo(p)    
     k = 1;                ## ==> kの初期値を代入
     for n = 1:1:p         ## ==> p=5 なら、n=[1,2,3,4,5]
     k = k*n;              ## ==> kの値は(1x1=1), (1x2=2), (2x3=6), (6x4=24),
                           ##     (24x5=120)のように推移する。
     end                
     y=k;                  ## ==> 最後のkの値をyに代入。
endfunction
 
kaijo(5)
kaijo(10)
kaijo(20)
######################################
``y''は、関数の返り値です。計算結果の最終値を ``y''に代入しないと、値が 返ってきません。 ここでは、``y=k''としてます。 関数定義には、``返り値が必要だ''と言うことを忘れないようにして下さい。

############## 実行例 ################
[nisimiya]$ octave fun_1.m
GNU Octave, version 2.0.16 (i386-vine-linux-gnu).
Copyright (C) 1996, 1997, 1998, 1999, 2000 John W. Eaton.
This is free software with ABSOLUTELY NO WARRANTY.
For details, type `warranty'.

ans = 120
ans = 3628800
ans =  2.4329e+18

############## ここまで ##############

10.2 変数が2つ以上の関数

引数が2つ以上必要な関数は、どのように定義するか? たとえば、

\begin{displaymath}
g(x,y) = 3 x^2 - 2 y^2 + 5 x + 8
\end{displaymath}

の時、$x,y$に値を代入すると$g$が一つ決まる。 では早速プログラム化してみましょう。

############## Program ###############
function g = kansu(x,y)
  g = 3 * x^2 - 2 * y^2 + 5*x + 8;
endfunction

kansu(2,1)
kansu(0,0)
######################################

つまり、上記のように変数を必要な個数だけ定義すれば良い。
実行例は、以下のようになります。

############## 実行例 ################
[nisimiya]$ octave fun_4.m
GNU Octave, version 2.0.16 (i386-vine-linux-gnu).
Copyright (C) 1996, 1997, 1998, 1999, 2000 John W. Eaton.
This is free software with ABSOLUTELY NO WARRANTY.
For details, type `warranty'.

ans = 28
ans = 8
######################################

10.2.1 演習

  1. 数列の和 $1^2+2^2+3^2 + \cdots + (n-1)^2 + n^2$を求める関数を作れ。
  2. 3つの引数(上底, 下底, 高さ)を入力し、台形の面積を求める関数を作れ。
  3. 半径を入力し、球の表面積、体積を求めるプログラムをつくれ。但し、関 数定義を用いること。

10.3 関数定義の練習

今後、授業等で利用するであろう関数をつくりながら、もう少し関数定義につい てなれて行きましょう。

10.3.1 2つの抵抗の合成抵抗

2つの抵抗$R_1, R_2$を直列につないだときと並列につないだときの合成抵抗を $R$と置くと、それぞれ

\begin{eqnarray*}
R &=& R_1 + R_2\\
\frac{1}{R} &=& \frac{1}{R_1} + \frac{1}{R_2}
\end{eqnarray*}

と表される。それぞれ合成抵抗を計算する関数を定義してみよう。

############## Program ###############
function a = R_line(R1, R2)
      a = R1 + R2;
endfunction

function b = R_para(R1, R2)
      b = 1/( 1/R1 + 1/R2 );
endfunction

 R_line(3, 5)
 R_para(3, 5)

######################################

実行例も示したおきます。

############## 実行例 ################
[nisimiya]$ octave fun_5.m
GNU Octave, version 2.0.16 (i386-vine-linux-gnu).
Copyright (C) 1996, 1997, 1998, 1999, 2000 John W. Eaton.
This is free software with ABSOLUTELY NO WARRANTY.
For details, type `warranty'.

ans = 8
ans = 1.8750

######################################

10.3.2 クーロン力の計算

2つの電荷$q_1$, $q_2$があるときにそれらの電荷にはたらく、クーロン力は
$\displaystyle F$ $\textstyle =$ $\displaystyle \frac{q_1 q_2}{4 \pi \epsilon_0 r^2}$ (6)

となる。ただし、

\begin{displaymath}
\epsilon_0 = 8.854 \times 10^{-12}
\end{displaymath}

$r$は、2つの電荷のきょり。

10.3.3 クーロンポテンシャルの計算

10.3.4 演習

  1. 3つの並列抵抗の合成抵抗を計算する関数をつくれ。
  2. 2つの引数(半径, 高さ)を入力し、円柱の体積を求める関数を作れ。
  3. 2つの電荷と電荷のきょりを与え、クーロン力を求める関数をつくれ。



Nobuo Nishimiya
平成20年6月3日