PC言語いろいろ比較したメモ(JavaScript, C++, Python, Excel VBA, Matlab/Octave, Stata, R, Gretl, Mathematica)

(c)角田 保(大東文化大学 経済学部)


気づくと10言語以上触っていて,流石に困ることが多くなってきました.
いちいち検索しないで済むように, ある程度メモしておいたので,それを少しまとめて公開します.
このHP画面は,横幅1920pxで見るとちょうど良いはずです.
このように偏りあれど,講義でも使える資料にもなって,個人的にはそれなりに満足しています.


C++については19以降のものを使っています.また, C++のヘッダに以下が記述されているとします.

#include <iostream>
#include <fstream>
#include <string>
#include <vector>         
using namespace std;
        
この最終行があるので,以下のC++のコードでは,std::を省略して記述しています.

目次



[1-1]ループ処理(1)・・・indexを繰り返す基本のfor loop: 0から9までの和

JavaScript
let S = 0;
let n = 10;
for(let i = 0; i < n; i++){
    S += i;
}

            
行末に要セミコロン 以後,説明省略
C++
int S = 0;
int n = 10;
int i;
for(i = 0; i < n; i++){
    S += i;
}
                
行末に要セミコロン 以後,説明省略
Python
S = 0
n = 10
for i in range(n):
    S += i
                
基本というより (2)の形式と同じ
Excel VBA
dim S, i, n
S = 0
n = 10
for i = 0 to n-1
    S = S + i
next
                
VBAをエディターに打ち込むと, キーワードは 大文字に変更 (以下も同じ).
Matlab/Octave
S = 0;
for i = 0: n-1
    S += i;
end
                
loop内では セミコロンを. ないと画面に 全表示.
Octaveはendfor でもOK
Stata
scalar S = 0
scalar n = 10
forvalues i = 0/(n-1) {
    S = S + i
}
            
R
S = 0
n = 10
for (i in 0:(n-1)) {
    S = S + i
}
                
0:n-1と書くと, 0:nを先に計算し, その後全成分に-1
Matlab/Octaveとは計算順序が異なる.
Gretl
S = 0
n = 10
loop i = 0 .. n-1
    S += i
endloop
                
Stata同様に,
scalar S=0
が正式
Mathematica
S = 0
n = 10
For[i = 0, i < 10, i++, S += i]
S
            
最後のSの後で Shift+Enter
ForのFは大文字

[1-2] ループ処理(2)・・・リストなどの中を読み出す形

JavaScript
let S = 0;
let ary = [0,2,3,10];
for(let elm of ary){
    S += elm;
}

                
for内のofは, inにしない.
C++
int ary[4] = {0,2,3,10};
int S = 0;
for(int elm : ary){
    S += elm;
}
            
Python
ary = [0,2,3,10]
S = 0
for  elm in ary:
    S += elm
                
Excel VBA
Dim ary(), elm, S    
ary = Array(0,2,3,10)
S = 0
for each elm in ary
    S = S + elm
next
                
Matlab/Octave
ary = [0,2,3,10];
S = 0;
for elm = ary
    S += elm;
end
                
Stata
foreach v of var x1 x2 x3 {
    reg y `v' 
}
                
Stataのforeachは このように, 変数名で利用すること が多い(Gretlも同様)
このcodeは,変数yを x1,x2,x3それぞれ 単回帰する様子.
varはvarlistの略 「`」は, 日本語キーボードで, @マークと同じ場所にある.
R
ary = c(0,2,3,10);
S = 0;
for (elm in ary){
    S = S + elm;
}
                
S = 0 ではなく, S <-0 が本来のコード. が,Rのみそうするのは面倒.
S+=elm はエラーとなる.
Gretl
list xlist = x1 x2 x3
loop foreach i xlist
    ols y const $i
endloop
                
Gretlのforeach は行列ではなく, このような 変数リストで使う.
xlistの前に何も書かないのと,要$マーク が,他言語とかなり異なる.
Mathematica
見当たらない

[1-3] ループ処理(3)・・・indexと中身の両方を読み出す形

JavaScript
let ary = [10,20,30];
for(let [i, x] of ary.entries()){
    console.log(i, x);
}
                
entriesの後ろに() を忘れない.
of にする. inだと違う答が出ることあり.
C++
見当たらない
Python
ary = [10,20,30];
for i, x in enumerate(ary):
    print(i, x)
                
JavaScriptとは違い in.
Excel VBA
見当たらない
Matlab/Octave
見当たらない
Stata
見当たらない
R
見当たらない
Gretl
見当たらない
Mathematica
見当たらない

[2-1] ifブロック(剰余を例に)

JavaScript
let S = 0;
let i = 5;
if(i % 3 === 0 ){
    S = 1;
}else if(i % 3 === 1){
    S = 10;
}else{
    S = -1;
}
                
最近だと等号評価を===と 3つで表す場合も多し
C++
int S = 0;
int i = 5;
if(i % 3 == 0 ){
    S = 1;
}else if(i % 3 == 1){
    S = 10;
}else{
    S = -1;
}
                
Python
S = 0
i = 5
if i % 3 == 0:
    S = 1
elif i % 3 == 1:
    S = 10
else:
    S = -1
                
Excel VBA
dim S, i
S = 0
i = 5
if i mod 3 = 0 then
    S = 1
elseif i mod 3 = 1 then
    S = 10
else
    S = -1
end if
                
Matlab/Octave
dim S, i
S = 0
i = 5
if mod(i, 3)  == 0
    S = 1
elseif mod(i, 3) == 1
    S = 10
else
    S = -1
end
                
このendはendifも可 rem関数もある 除数や非除数が0以下 のときに,modと異なる.
Stata
scalar S = 0
scalar i = 5
if i % 3 == 0{
    S = 1
}else if i % 3 == 1{
    S = 10
}else{
    S = -1
}
end
                
R
S = 0;
i = 5;
if(i %% 3 == 0 ){
    S = 1;
}else if(i %% 3 == 1){
    S = 10;
}else{
    S = -1;
}
                
Rの剰余は.%%
と2つ繰り返すのが, 他の言語と異なる.
Gretl
S = 0
i = 5
if i % 3 == 0
    S = 1
elif i % 3 == 1
    S = 10
else
    S = -1
endif
                
elifは GretlとPythonのみ
Mathematica
見当たらない
次の三項演算子を利用する.

[2-2] 三項演算子の基本形

JavaScript
let i = 5;
let S = (i % 2 == 0)? 10: 1;
                
C++
int i = 5;
int S = (i % 2 == 0)? 10: 1;
                
JavaScriptと全く同じ
Python
i = 5
S = 10 if i % 2 == 0 else 1
                
Mathematica
i = 5;
S = If[i % 2 == 0, 10, 100]
                
最後の式でShift+enter 1行目に;があるので, iの値は画面には非表示.

[3-1] n成分全てに数字0が入った一元リスト(もしくは配列やベクトル)

JavaScript
let n = 3;
let ary = Array(n).fill(0);
                
C++
int n = 3;
vector<double> ary(n, 0);
                
配列・リスト形式では 最近はこの動的配列vector しか使っていない. malloc不要で可変にするのが簡単. その他の関数でもかなり便利.
Python (生)
n = 3
ary = [0] * n
                
Python (numpy)
import numpy as np
n = 3
ary = np.zeros(n)
                
一元配列. 整数ではなく0.0
Excel VBA
Dim ary() As Long
Dim n As Integer
n = 3
ReDim ary(0 To n - 1)
                
As Longや As Integerで宣言 しておけば, 初期値は整数0 で満たされる. dim ary()だけどVariant型 になり,それは 初期値は0にはならない.
R
n = 3
ary = numeric(n)
                
Mathematica
n = 3         
ary = Array[0&, n]
                

[3-2] m×nの2重リスト(ベクトル)Aに全て0

JavaScript
let m = 3;
let n = 2;
let A = Array(m).fill([]).map(x => Array(n).fill(0));
                
fill([])を忘れないように
C++
int m = 3;
int n = 2;
vector<vector<double> > A(m, vector<double>(n), 0.0);
                
0.0なのはdoubleだから. int なら0で初期化
Python(生)
m = 3
n = 2
A = [[0] * n for i in range(m)]
                
リスト内包表記の利用 iは変数.よってj,kなどでもOK

[3-3] m行n列の行列A(もしくは二元配列)に全て0

Python(numpy)
import numpy as np
m = 3
n = 2
A = np.zeros((m,n))
                
((m,n))のように カッコを2重にするのを 忘れないように
Excel VBA
dim A() As Long
redim A(0 to m - 1, 0 to n - 1)
                
Matlab/Octave
A = zeros(m, n)
                
Stata
A = J(m, n, 0)
                
Jは大文字
R
A = matrix(0, nrow = m, ncol = n)
                
Gretl
A = zeros(m, n)
                
Mathematica
Array[0 &, {m, n}]
                

[4-1] 2×3の2重リスト {{1,2,3},{4,5,6}}の書き方と,アクセス

JavaScript
let A = [[1, 2, 3], [4, 5, 6]]
console.log(A[1][2])
                
indexは0スタート
C++
vector<vector<double> > A = {{1, 2, 3},{4, 5, 6}};
cout << A[0][2] << endl
                
indexは0スタート
Python(生)
A = [[1, 2, 3], [4, 5, 6]]
print(A[0][2])
                
indexは0スタート
Excel VBA
dim A() as variant                
A = Array(Array(1, 2, 3), Array(4, 5, 6))
MsgBox A(0)(2)
                
このように書けるが,Excelでは使いづらい.
Excel VBAからのシート上のセルの呼び出しは,
cells(i,j) という二元配列の形.
よって,VBAで多重リストを扱うのはやや不適.

[4-2] {{1,2,3},{4,5,7}}形式の2行3列の行列や2元配列の作り方と,この行列へのアクセス例(数字の4の部分へ)

Python(numpy)
import numpy as np
A=np.array([[1, 2, 3], [4, 5, 7]])
A[1, 0]
                
上の(生)の二重リストとは書き方が違う.
行列として処理できる.
Excel VBA
Sheet1のA1:B2セルに値があるなら,
Sub test()
  dim A
  sheets("sheet1").select
  A = range("A1:B2").value
  msgbox A(2, 1)
End Sub
                
を実行すれば二元配列Aで値が得られる.
indexは1スタート.
このようにシートの利用が便利.
dim Aの代わりにdim A()でもOK.
variant型だから数値の精度は落ちる.しかし,
range(cells(10, 1), cells(11, 2))=A
                
と一気にSheetに出力できるのが利点.
上記のようにRangeの形式については,
・読み込み時はA1形式で,
・書き込み時はcells(i,j)形式で
と使い分けると便利.
Matlab/Octave
A=[1, 2, 3; 4, 5, 7]
A(2, 1)
                
indexは1スタート
Stata
matrix input A=(1, 2, 3\ 4, 5, 7)
display A[2,1]
                
indexは1スタート
R
A=matrix(c(1, 2, 3, 4, 5, 7), nrow=2, ncol=2)
A[2,1]
                
indexは1スタート
Gretl
A={1, 2, 3; 4, 5, 7}
print A[2,1]
                
indexは1スタート
Mathematica
A={{1, 2, 3}, {4, 5, 7}}
Part(A, 2, 1)
A[[2, 1]]
a[[2]][[1]]
                
Partが私の好み.

[5-1] 一元リスト(もしくは配列やベクトル)のソート

JavaScript
let ary = [10, 1, 2];
ary.sort((a, b) => a - b)
                
ary.sort()だけだと,文字列でのソートとなってしまう.
よってary.sort()だと,aryは[1,10,2]となる.
C++
vector<int> ary = {10, 1, 2}; 
sort(ary.begin(), ary.end())
                
最初のr個だけソートしたければ,
sort(ary.begin(), ary.begin() + r)
                
で可能.
このように一部のみのソートが可.
Python (生)
let ary = [10, 1, 2];
ary.sort()
            
Python (numpy)
import numpy as np
ary = np.array([10, 1, 2])
sorted = np.sort(ary)
                
R
ary = c(10, 1, 2)
sorted = sort(ary)
                
Mathematica
ary = {10, 1, 2}
sorted = Sort[ary]
                

[5-2] 一元リスト(もしくは配列やベクトル)の和

C++
vector<int> ary{10, 1, 2}; 
int S = accumulate(ary.begin(), ary.end());
            
Python (numpy)
import numpy as np
ary = np.array([10, 1, 2])
S = np.sum(ary)
                
R
ary = c(10, 1, 2)
S = sum(ary)
                
Mathematica
ary = {10, 1, 2};
S = Total[ary]
                

[5-3] 一元リスト(もしくは配列やベクトル)の関数: 各成分の2乗+1を返す例

JavaScript
u = [1, 2, 3];
console.log(u.map(x => x ** 2 + 1));
                
mapは便利
Python(生)
u = [1, 2, 3];
list(map(lambda x: x ** 2 + 1, u));
                
mapは,map(関数名,リスト)の形.
今回は関数について,lambda(ラムダ式,無名関数) を利用.
JavaScriptと似ていることを確認.
Python (numpy)
import numpy as np
u = np.array([1, 2, 3])
u * u + 1
                
numpyだと,Matlab/Ocatve系の形で表記できる.
R
u = c(1, 2, 3)
u * u + 1
                
Rの場合,1元配列も行列も,
* は成分ごとの積を表す.要注意.
2行目は,u^2+1でも可
Mathematica
u = {1, 2, 3}
Map[Function[x, x^2 + 1], u]
                

[5-4] 一元リスト(や行ベクトル)の変動(tss)を返す例.mは平均値

JavaScript
u = [1, 2, 3];
m = u.reduce((s, x) => s + x) / u.length; 
tss = u.reduce((s, x) => s + (s - m) ** 2);
                
reduceも便利
Python(生)
u = [1, 2, 3]
m = sum(u)/ len(u)
tss = sum(map(lambda x: (x - m) ** 2, u))
                
mean関数は,生のPythonでは存在しない.
sum関数を駆使する.
Python (numpy)
import numpy as np
u = np.array([1, 2, 3])
m = np.mean(u)
tss = np.sum((u - m) ** 2)
                
numpyだと,mean関数もある.
Matlab系と同様
R
u = c(1, 2, 3)
m = mean(u)
tss = sum((u - m) ^ 2)
                
Matlab系と同様
Matlab/Octave
u = [1, 2, 3];
m = mean(u)
tss = sum((u - m) .^ 2)
                
Gretl
u = {1, 2, 3}
tss = sst(u)
                
組み込み関数sstの利用.

[5-5] 一元リスト(や行ベクトル)の不偏分散・不偏標準偏差を返す関数

Python (numpy)
import numpy as np
u = np.array([1, 2, 3])
np.var(u, ddof = 1)
np.std(u, ddof = 1)
                
ddof = 1を入れる.
入れないと不偏にならない.(n割り)
R
u = c(1, 2, 3)
var(u)
sd(u)
                
Matlab/Octave
u = [1, 2, 3];
var(u)
std(u)
                
Gretl
u = {1, 2, 3}
var(u)
sd(u)
                
Rと同じ

[5-6] 一元リスト(もしくは配列やベクトル)の内積

C++
vector<int> u{1, 2, 3}; 
vector<int> v{1, 10, 100}; 
int S = inner_product(u.begin(), u.end(), v.begin());
cout << S << endl
                
Python (numpy)
import numpy as np
u = np.array([1, 2, 3])
v = np.array([1, 10, 100])
np.inner(u, v)
                
R
u = c(1, 2, 3)
v = c(1, 10, 100)
u %*% v
                
%*% は本来行列の積.
が,一元配列の場合は内積となる.
一元配列だからsum(u*v)で代用可能.

[6-1] 行列の関数: 各成分の2乗+1を返す例

Python (numpy)
import numpy as np
A = np.array([[1, 2]; [3, 4]])
A * A + 1
                
上と同様
Matlab/Octave
A = [1, 2; 3, 4];
A .^ 2 + 1
                
.*や.^など .をつけると成分ごとの計算.
R
A = matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)
A * A+1
                
上と同様

[6-2] 行列の縦方向でのそれぞれの和・平均

Python (numpy)
import numpy as np
A = np.array([[10, 1, 2], [1, -1, -10]])
sumS = np.sum(A, axis=0)
meanS = np.mean(A, axis=0)
                
sumS, meanSとも一元配列となるので注意.
行ごとならaxis=1に変更
Matlab/Octave
A = [10, 1, 2;1, -1, -10];
sumS = sum(A, 1)
meanS = mean(A, 1)
                
行ごとなら1を2に変更
R
A = matrix(c(10, 1, 2, 1, -1, -10), nrow = 2, ncol = 3)
sumS = apply(A, 1, sum)
meanS = apply(A, 1, mean)
                
apply関数は非常に便利.
行ごとなら1を2に変更
Gretl
A = {10, 1, 2;1, -1, -10};
sumS = sumc(A, 1)
meanS = meanc(A, 1)
                
行ごとなら,sumrとmeanr

[6-3] 行列の縦方向でそれぞれソート

Python (numpy)
import numpy as np
A = np.array([[10, 1, 2], [1, -1, -10]])
B = np.sort(A, axis=0)
                
Matlab/Octave
A = [10, 1, 2;1, -1, -10];
B = sort(A, 1)
                
行ごとならsort(A,2)
R
A = matrix(c(10, 1, 2, 1, -1, -10), nrow = 2, ncol = 3)
B = apply(A, 1, sort)
                
apply関数は非常に便利.
行ごとならapply(A,2,sort)

[6-4] 行列のスライス.3×3の行列Aを所与とし,左上2×2と,右下2×2,両端4つを取り出した行列

Python (numpy)
import numpy as np
A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
B = A[0:2, 0:2] 
C = A[1:, 1:] 
D = A[[0, 2], :][:, [0, 2]]
                
JavaScript・Python系のスライスは,以上・未満の表現
B=A(:1,:1)でもOK
Dの右辺は,A[[0,2],:] でAの0行目と2行目取り出した2×3の行列を作り,
その行列について次に[:,[0,2]]として,
0列目と2列目を取り出している.
Matlab系と同じようにD = A[[0,2],[0,2]]と書くとハマる.
Matlab/Octave
A = [1, 2, 3; 4, 5, 6; 7, 8, 9];
B = A(1:2, 1:2)
C = A(2:end, 2:end)
D = A([1, 3], [1, 3])
                
Matlab系のスライスは,以上・以下の表現.
また最後を表すのはendキーワード.
R
A = matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), nrow = 3, ncol = 3)
B = A[1:2, 1:2]
C = A[2:3, 2:3]
D = A[c(1, 3), c(1, 3)]
                
スライスとしてはmatlabと同じ形.endキーワードは使えないが.

[7-1] 文字列の結合と,数値から文字列

JavaScript
"ab" + String(3)
                
C++
"ab" + to_string(3)
                
Python
"ab" + str(3)
                
Excel VBA
"ab" + cstr(3)
                
Matlab/Octave
strcat("ab", num2str(3))
                
Stata
"ab" + tostring(3)
                
R
paste("ab", 3, sep="")
                
Gretl
x = 3
sprintf("ab%d", x)
                
C言語形式.
Mathematica
"ab" <>  ToString[11]
                
TとSは大文字に.
StringJoin["ab",ToString[3]]
と同じ.

[8-1]txtとcsvファイルを,リストまたは行列として読み込む.空白区切り数値データ(test.txt)やコンマ区切り数値データ(test.csv)

C++
vector<double> A;
double a;
ifstream fin("test.txt");
while(!fin.fail()){
    fin >> a;
    A.push_back(a);
}
                
CSVのときは,ファイル名を"test.csv"にすればよい
一元配列として読み込んでいる.
pushを使っているので遅い.
Python(numpy)
import numpy as np
A = np.loadtxt('test.txt')
                
CSVは区切り文字を以下のように指定する
import numpy as np
A = np.loadtxt('test.csv', delimiter = ',')
                
データファイルが1列または1行しかないならば, Aは一元配列で読み込まれるので注意する.
データファイルが2行2列以上ならば,行列として読み込まれる.
Excel VBA
Sub test()
    Dim i, buf, linedataS, mypath, mydelim
    Sheets.Add
    mypath = "c:\sample\test.txt"
    mydelim = " "
    Open mypath For Input As #1
    i = 1
    Do Until EOF(1)
        Line Input #1, buf
        linedataS = Split(buf, mydelim)
        Range(Cells(i, 1 + LBound(linedataS)), Cells(i, 1 + UBound(linedataS))) = linedataS
        i = i + 1
    Loop
    Close #1
End Sub
                
CSVのときはtest.txtをtest.csvに,mydelimを" "から","に変更すればOK.
mypathはフルパスが好み.
これを実行すると,新しいシートにA1セルからデータが読み込まれる.
2021年のときは,Excel VBAはutf8形式のテキストファイル読み書きできなかったんだけど,今はできる感じ.
Matlab/Octave
A = load('test.txt');
            

[8-2] リストまたは行列を,テキストファイルに出力する(test.outへ)

C++
vector<int> A = {1, 2, 3};
ofstream fout("test.out");
if (fout.fail()) {  // エラーチェック
    cout << "出力ファイルをオープンできない" << endl;
    return 1;
}
for(int elm : A){
    fout << elm << endl;
}
                
Python(numpy)
import numpy as np
A = np.array([1, 2, 3])
np.savetxt('test.out', A)
                
Excel VBA
選択範囲のセルを1列に出力したいなら
Sub test()
    Dim ecell, mypath
    mypath = "c:\sample\test.out"
    Open mypath For Output As #1
    For Each ecell In Selection.Cells
        Print #1, ecell.Value
    Next
    Close #1
End Sub
                
mypathはフルパスが好み.
UTF8については,上と同様.
Matlab
A = [1, 2, 3];
writematrix(A, 'test.out')
            
Octave
A = [1, 2, 3];
save('test.out', 'A')
            
これだと上側6行にヘッダ情報が付く.
ヘッダなしで出力したい場合は以下
save('-ascii', 'test.out', 'A')
                
R
A = c(1:10);
write(A, 'test.out', ncolumns = 1)
                
ncolumnsは1行あたりのデータ個数.
ベクトルの保存は良いが,
行列を保存する場合は注意.

[8-3] 1行目には変数名が書いてあるような,txtとcsvファイルを,データ形式として読み込む.

R
mydata = read.csv("test.txt", header = TRUE, sep = "")
mydata = read.table("test.txt", header = TRUE, sep = "")
                
の2通り.
CSVファイルのときは,sepを変更すれば良い.
mydata = read.csv("test.csv", header = TRUE, sep = ",")
mydata = read.table("test.csv", header = TRUE, sep = ",")
                
Rのデータフレーム形式に読み込む.
Stata
insheet using test.csv
                
Stataで単純なテキストファイルを読み込むのはやめたほうがよい.
csvがよい.
Stataでは,使用時にログファイル(*.log)をとる設定をしておけば,
GUIでやったことも全て記録される.
Stata終了後にそのログファイルを適当なテキストエディタで見るとよい,
やったこととコードを照らし合わせて,コードを覚えることができる.
Stataのdta形式で読み込む.
Gretl
open test.txt
open test.csv
                
の2通り.GretlはGUIの操作中に自動でログをとっている.
終了時にScriptファイル(*.ini)を 保存するかどうかを聞かれる.
Yesを選んで終了して,その後 適当なテキストエディタでそのiniファイルを見るとよい.
やったこととコードを照らし合わせて,コードを覚えることができる.

[9-1] 正規分布の分布関数などが必要な場合.Φ(3)つまりexp(-x2/2)dx/(2π)1/2の-∞から3までの広義積分を例に

Python(scipy)
from scipy import stats
stats.norm.cdf(3, 0, 1)
                
このようにscipy.statsをロードする.
関数名のバッティングを心配しないなら,以下でもOK.
from scipy.stats import *
norm.cdf(3, 0, 1)
                
C++
#include <cmath>
                
をヘッダに付け加えた後,関数
double Zcdf(double value)
{
    return 0.5 * erfc(-value * sqrt(0.5));
}
double normcdf(double value, double mu, double sigma)
{
    return Zcdf((value - mu) / sigma);
}
                
を誤差関数から定義しておき,
Znorm(3)やnormcdf(3, 0, 1)
などで呼び出せば良い.
C++では乱数発生ならいいけど,
cdf系統の計算は別プログラムに任せたほうがよいと思う.
Matlab/Octave
Octaveだと先に以下でロードしておく
pkg load statistics
                
その後,以下のように.
normcdf(3, 0, 1)
normcdf(3)
                
Stata
normprob(3)
                
R
pnorm(3, 0, 1)
pnorm(3)
                
Gretl
cdf(N, 3)
cdf(Z, 3)
                
Mathematica
CDF[NormalDistribution[0, 1], 3.0]
                
3.0でなく3にすると,erfを使った表現となる.

[9-2] 正規分布の分布関数の逆関数が必要な場合.Φ-1(0.975)≒1.96を例に

Python(scipy)
from scipy import stats
stats.norm.ppf(0.975, 0, 1)
stats.norm.ppf(0.975)
                
上記同様にscipy.statsをロードする.
Matlab/Octave
Octaveだと先に以下でロードしておく
pkg load statistics
                
その後,以下のように.
norminv(0.975, 0, 1)
norminv(0.975)
                
Stata
invnorm(0.975)
                
R
qnorm(0.975, 0, 1)
qnorm(0.975)
                
Gretl
invcdf(N, 0.975)
invcdf(Z, 0.975)
                
Mathematica
InverseCDF[NormalDistribution[0, 1], 0.975]
                

[10-1] 関数の最小化(Nelder–Mead法)

前提: aを所与とする.xがx(1),x(2)の2変数関数,f=x(1)2+ax(2)2の最小化するxを数値計算(近似)したい.xtolは10の-8とする.

Matlab/Octave
ワーキングディレクトリに,f.mというファイルに,以下を書いて保存
function y = f(x,a)
    y = x(1) ^ 2 + a * x(2) ^ 2;
end
                
↑Octaveはendではなくendfunctionとする.
a = 1として実行したいとする.プログラム上で,
a = 1;
myans = fminsearch(@(x) myfun(x, a), [0, 1], optimset('TolX', 1e-8) )
                
と打ち込めば,myansに答が出てくる.両方とも0に近い.
Python(scipy)
indexは0スタートなのでxの添字はx[0],x[1].
(1)scipy.optimizeからfminをインポートし,
(2)fを定義し,
(3)aとargumentを定義して,
(4)fminを実行するという形.
from scipy.optimize import fmin
def f(x, a):
    return x[0] ** 2 + a * x[1] ** 2
a = 1.0
arg = (a, )
fmin(f, [-1, 1.2], args = arg, xtol = 1e-8)