日々鍛錬

日本で一番?わかり易い??システムの落書き帳???を目指し????,日々鍛錬中な元SEさん主婦によるデベロッパとユーザと自分のための雑記帳

複素数の共役を求めるコードをCにて記述する

学生さんからのコード記述における質問にて,
C言語複素共役を求めるコードの記述を行いたい.


色々わかったことがあったので,メモ書き
サンプルコードはこちらのサイトを介して勉強しました.

C言語関数辞典 - conj, conjf, conjl

こちらのコードを利用する.

/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <complex.h>

/* main */
int main(void) {
    double complex z = 3.0 + 2.0 * I;
    double complex conjugate;

    /* 共役複素数を取得 */
    conjugate = conj(z);
    printf("共役複素数: %.1f + %.1fi\n", creal(conjugate), cimag(conjugate));

    return EXIT_SUCCESS;

C言語C++ では,標準ライブラリとして

#include <complex.h>   //C言語
#include <complex>      //C++

が用意されている.

早速, Codeを用意して,コンパイル+実行を!・・・・

Visual studioC言語を行なってみる.
...動作しない.・・・

色々キーワードを調べて評価を行うが,どうしても動作しない
動作しない理由を調査する.


教えて!Ziddyちゃん - C言語の複素数についてです。


もしかすると....と思いまして,Visual studioLinux gcc にて
同codeを確認してみる.

なんと,Visual studio 2013では,動作しなかったが,Linuxgccでは動作しました.
しかし,Visual studio 2013 のC++ではきちんと動作しました...

どうやら,Visula studio 2013では,complex.hに定義されたライブラリ,C言語では動作しないぽい.
なんてこった....

class templateでの定義上での利用になっているのだろうか.
#define complexもダメでございました.

visual studio は2013からC99の大半を実装しているらしいのですが,やはりまだ幾つか機能も実装されてないらしい...
ということは,その実装されてないライブラリのひとつとして,complex.hがあるというのだろうかしら.

VTK6.2+Qt5.10+MSVS2012でVTK環境を構築する

たとえ仕事といえど,何度繰り返し入れまくったかわかりません.
これが私です.


今回は,VTK6.2+Qt5.10+MSVS2012でVTK環境を構築します.
環境は
 Windows 7.
 メモリ 6GB (←若干上がった♪
 IDE   Microsoft Visual studio 2012 SP1


ということで,まずはVTKの最新版をインストールします.


1. VTKのダウンロード
2014/07/16の段階でのGit版で私は頂きました.
まず,コンソールでVTKをインストールしたい場所へ移動します.

cd

:GitによるSourceの最新場所の置き場

ここで,以下のコマンドを行う.

git clone git://vtk.org/VTK.git

しばらく,15分ほどダウンロードを待ちますと,/VTKのディレクトリができます.
このディレクトリがGitによるVTKのソースになるわけです.
ここで,(調子にのって)もう一つ以下のコマンドを打ち込みます.

git clone http://vtk.org/VTKData.git

VTKのサンプルを動作させるとき,これらデータセットで動作させることになります.



2.CMakeによるConfig

CMakeの最新版をインストールしているということを条件とします.
先ほどの/VTK内のCMakeLists.txtをCMakeで開き,以下を設定します.

  • BUILD_SHARED_LIBS チェックオン
  • CMAKE_CONFIGURATION_TYPES Debug; Release
  • VTK_QT_VERSION    5 (5.10をインストールするためです.)
  • Module_vtkGUIsupportQt    Qt チェックオン
  • Module_vtkGUIsupportQtOpenGL Qt チェックオン
  • Module_vtkGUIsupportQtWebkit Qt チェックオン
  • Module_vtkGUIRenderingQt
  • VTK_Group_Qt チェックオン

また,CMake上の「Add Entry」をクリックし,以下を入力してOKを押下します.

Name -> CMAKE_PREFIX_PATH
Type -> PATH
Value-> C:/Program Files (x86)/Windows Kits/8.0/Lib/win8/um/x64 (←自分の環境に合わせる)

これで,Configします.エラーがなければ,Generateを行います.


3. Visual studio 2012でBuild

Debugモードで,All_buildをBuild+INSTALLでBuildを行います.
その後,ReleaseモードでAll_buildをBuild+INSTALLでBuildを行います.

エラーがなければ,PATHをセットして終了.

ITKのインストール その1(一番基本的なインストール)

順調に2ヶ月更新になっていることは気にしないでください.
更新している時間がないので...
#と言っても,,,色々実験ノートの一つとして使ってるので,やはり更新は必要です.


今回はITKのインストールを説明します.
ITKとは,については,後日記載予定(予定は予定であくまで未定)


ITKのインストールと一言で言っても,色んなパターンがあります.
ここでは,以下のように分けたITKのインストール方法を説明します.

  1. 一番基本的なITKのインストール
  2. Pythonなどの言語とのインストール
  3. OpenCV,VTKなどのmoduleオプションとしてインストール

今回は,1. の基本的なITKインストール方法の説明
以下の環境で動作を確認.

また,ITKのインストール環境には以下を用意

  • openCV 2.4.9
  • VTK 6.2
  • ITK Ver 4.5.2
  • CMake 2.8.12


Windows SDKのインストールされたVersionがわからない場合,レジストリで確認できるので,
以下から,たどってみる

1. スタートメニュ―の検索から「regedit」を起動
2. 「HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SDKs\Windows\」をたどる
3.インストールされたリストが提示

あとは,.NETも最新版をあてておくようにしましょう.


1. ITKのダウンロード
以下のサイトからITKのソース一式をダウンロード
ITK Download

ダウンロードされたデータをSouerceとして保存したい場所にてディレクトリを展開.
展開されたディレクトリ(Winならフォルダの意)を今回ITK452srcとした

%MyLibDir%ITK/ITK452/ITK452src/

%MyLibDir%は,自分の環境にインストールする一式を取りまとめたフォルダやディレクトリを指している.

2. CMake でSource とBuild の設定
CMakeを起動し,以下のように指定
起動時,Compilerの設定が求められるので,自分の環境に合せたCompilerを選択する.
#私は,MSVS12, x64を選択

Where is Source code : %MyLibDir%ITK/ITK452/ITK452src/ <先ほどのSourceの指定フォルダ>
Where is Build he binaries : %MyLibDir%ITK/ITK452/ITK452src/Build <先ほどのSourceの指定フォルダにBuildを作成>

Build指定のフォルダがない場合,作る?と聞かれるのでYesを押下
Configureを押下して待つ


3. CMakeのConfigure準備

2. の方法で,一度Configureが終了→真っ赤になる.
Configure準備の準備をととのえる.
今回はStandardなConfigなので,以下を設定

BUILD_DOCUMENTATION チェックなし
BUILD_EXAMPLE チェックなし
BUILD_SHARED_LIBS チェックなし
BUILD_TESTING チェックなし
CMAKE_CONFIGURATION_TYPES: Debug; Release
CMAKE_INSTAL_PREFIX : %MyLibDir%ITK/ITK452/ITK452Bin/stBin
CMAKE_PREFIX_PATH :C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x64 (先のWindowsSDKの場所を指定)
CMAKE_MODULE_PATHC:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x64

BUILD_* について,時間がかかったり,必要なライブラリ,環境が求められる.
また,TESTもものすごい時間がかかる.
だから,チェックをつける必要ありません.
BUILD_SHARED_LIBS については,別のインストール方法で記載します.

上記設定後,先と同様にConfigureを押下
赤の注意が出たら,指示に従って修正するけど,この段階では出ないだろう.
#ただし,INSTALL_PREFIXで指定したフォルダ名が長い時は怒られますので,
#解りやすく区別しやすい表記名で(日本のはもってのほかですが,空白や記号を入れないこと!)

4. インストーラの構成
Configが終了すれば,「Configuring done」と出るので,次に「Generate」ボタンを押下
問題なければ,「Generating done」が表示され,2.で指定したBuildフォルダ内に「ITK.sln」ができる.
このソリューションファイルを開いて,準備が整うのを待つ

5.ALL_BUILD とINSTALLのビルド
ITK.slnの準備が整ったら,まずはDebug と x64の環境下でALL_BUILDのBuildを行う.
問題なく終了したら,INSTALLのBuildを行う

次に,Releaseでx64環境下でALL_BUILDのBuild,INSTALLのBuildを順に行う.
終了後に,INSTALL_PREFIXで指定した場所にてそれぞれ,以下のフォルダ(ディレクトリ)が
作成され,それぞれのファイルができている.

bin/
include/
lib/
share/

これで,ITKのインストールは終了
あとは,環境変数設定と動作確認

6. 環境変数の設定
スタートメニューやエクスプローラ内の「コンピュータ」をクリックすると,エクスプローラのアドレスバー下に「システムのプロパティ」が出現する,

システムの詳細設定を選択し,「詳細設定」→「環境変数」を指定

環境変数内に「新規作成」で以下を設定

変数名 ITKPath (お好きな半角英数字で)
変数値 <CMAK_INSTALL_PREFIXの指定場所>

あとは,すべてOKを押下,システムプロパティをすべて終了

Mac にHomebrew をインストールする

Macports ではSVNなどの設定やら,Proxyの問題がありありです.
ちゃんと設定やらをしたらよいのですが,自宅でやら研究室でやら..の研究を行うのであれば,port updateの度に設定を変えるのは正直めんどくさい.

なら,proxyに依存したくない! そんな私に朗報
#たまたま,環境でhomebrew のproxy が大丈夫だったというオチはありますが...
#proxy認証環境は管理者にお問い合わせが必要です.

「HomeBrew」を使えば良い

Home brew

  • Mac OS 上でのソフトウェア管理を行うソフトウェアのこと
  • Macの中に入っているソフトウェアを尊重して利用するVersion 管理なので,利用しやすい

ということで,インストールする.

インストール方法は以下のとおり
参考サイトはこちら
MacOSX - パッケージ管理システム Homebrew - Qiita

ただし,事前にxcodeをインストールしておくこと.
私は,ver.5.1.1 (2014年4月28日における最新Ver.)で以下を行いました.


1 . Javaのインストール確認とインストール

Javaの確認は以下から

$ java -version

(インストールされているなら,以下のようなメッセージが出力)
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)

インストールされていなければ,インストールするよう,メッセージが出力されるので,
指示に従います.

2. xcode コマンドラインをインストール
実は,こちらが今回,homebrew インストールでは手間取りました.
#あまり手間ではなかったけど....
というのも,xcodeからのcommand Line tool のセットアップでお馴染みの,

『「Xcode」→「Preferences」→「Downloads」→「Components」』

では,できませんでした.

色々調べたら,以下がヒット
MavericksでCommand Line Tools for Xcodeをインストールする - Qiita

こちらの手順に従って,以下に従ってCommand Line Tool をインストール

Xcode->Open Developer Tool->More Developer Tools

こちらから,Command Line Tool を選択し,installを行うには,Apple IDのサイトに移動します.
ここで,Apple IDを入力すると,Command Line Toolがインストール出来る準備ができますので,
サイトからダウンロードし,インストールする.

3. HomeBrew 本体をインストールする

以下のコマンドをTerminal上で行う

 ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)"

本体インストールができたら,success というコメントが出ます.
そのコメントが出力されたなら,早速,homebrew の最新チェックと更新 を以下で行います.

4. システムの整合性確認

$ brew doctor

5. システム更新

$ brew update

これで,色々システムの更新やインストールができます.
MacOpenCVインストールはhomebrewを使うととっても簡単にできます.
次の機会にでも案内します.

Emacs の初期設定

init.elのとりまとめ.
今はダッシュのメモ書きなので,このスペースはinit.elのための落書き帳としてます.

参考にしたサイトは以下のとおり.

両者共にわかりやすいですが,uwabamiさんのサイトは特にわかりやすい.
今度時間があるときにでも,もっとよく読んで理解をしていきます.

ひとまず,私は以下のとおりに設定している.

; -*- Mode: Emacs-Lisp ; Coding: utf-8 -*-
;; ------------------------------------------------------------------------
;; @ load-path

;; load-pathの追加関数
(defun add-to-load-path (&rest paths)
  (let (path)
    (dolist (path paths paths)
      (let ((default-directory (expand-file-name (concat user-emacs-directory path))))
        (add-to-list 'load-path default-directory)
        (if (fboundp 'normal-top-level-add-subdirs-to-load-path)
            (normal-top-level-add-subdirs-to-load-path))))))

;; load-pathに追加するフォルダ
;; 2つ以上フォルダを指定する場合の引数 => (add-to-load-path "elisp" "xxx" "xxx")
;;(add-to-load-path "elisp" "C:\MySystem\MySystem\emacs\lisp")
(add-to-load-path "C:/MySystem/MySystem/emacs/elisp")
(add-to-load-path "elisp")
(add-to-load-path "elpa")
(add-to-load-path "lisp")
(add-to-load-path "site-lisp")
(add-to-load-path ".emacs")
;; ------------------------------------------------------------------------
;; @ general

;; common lisp
(require 'cl)

;; 文字コード
(set-language-environment "Japanese")
(let ((ws window-system))
  (cond ((eq ws 'w32)
         (prefer-coding-system 'utf-8-unix)
         (set-default-coding-systems 'utf-8-unix)
         (setq file-name-coding-system 'sjis)
         (setq locale-coding-system 'utf-8))
        ((eq ws 'ns)
         (require 'ucs-normalize)
         (prefer-coding-system 'utf-8-hfs)
         (setq file-name-coding-system 'utf-8-hfs)
         (setq locale-coding-system 'utf-8-hfs))))


;; Windowsで英数と日本語にMeiryoを指定
;; Macで英数と日本語にRictyを指定
(let ((ws window-system))
  (cond ((eq ws 'w32)
         (set-face-attribute 'default nil
                             :family "Meiryo"  ;; 英数
                             :height 100)
         (set-fontset-font nil 'japanese-jisx0208 (font-spec :family "Meiryo")))  ;; 日本語
        ((eq ws 'ns)
         (set-face-attribute 'default nil
                             :family "Ricty"  ;; 英数
                             :height 140)
         (set-fontset-font nil 'japanese-jisx0208 (font-spec :family "Ricty")))))  ;; 日本語

;=======================================================================
;フレームサイズ・位置・色など
;=======================================================================
(setq default-frame-alist
      (append (list '(foreground-color . "black")
   '(background-color . "LemonChiffon")
   '(background-color . "gray")
   '(border-color . "black")
   '(alpha . (85 40))
   '(mouse-color . "white")
   '(cursor-color . "black")
   '(font . "fontset-メイリオ")
   '(width . 100)   ;文字数
   '(height . 100)   ;文字数
   '(top . 100)     ;pixel値 表示位置
   '(left . 100))
     default-frame-alist))

;; スタートアップ非表示
(setq inhibit-startup-screen t)
;; scratchの初期メッセージ消去
(setq initial-scratch-message "")

;; ツールバー非表示
(tool-bar-mode -1)
;; メニューバーを非表示
;;(menu-bar-mode -1)
;; スクロールバー非表示
(set-scroll-bar-mode nil)

;; タイトルバーにファイルのフルパス表示
(setq frame-title-format
      (format "%%f - Emacs@%s" (system-name)))
;; 行番号表示
(global-linum-mode t)
(set-face-attribute 'linum nil
                    :foreground "#800"
                    :height 0.9)
;; 行番号フォーマット
(setq linum-format "%4d")

;;; 対応する括弧を光らせる。
(show-paren-mode 1)
;;; ウィンドウ内に収まらないときだけ括弧内も光らせる。
(setq show-paren-style 'mixed)
;;; 現在行を目立たせる
(global-hl-line-mode)
;;; カーソルの位置が何文字目かを表示する
(column-number-mode t)
;;; カーソルの位置が何行目かを表示する
(line-number-mode t)

;; 行末の空白を強調表示
(setq-default show-trailing-whitespace t)
(set-face-background 'trailing-whitespace "#b14770")

;; タブをスペースで扱う
(setq-default indent-tabs-mode nil)
;; タブ幅
(custom-set-variables '(tab-width 4))

;; yes or noをy or n
(fset 'yes-or-no-p 'y-or-n-p)
;; ミニバッファの履歴を保存する
(savehist-mode 1)
;; ミニバッファの履歴の保存数を増やす
(setq history-length 3000)

;; 行間
;(setq-default line-spacing 0

;; 1行ずつスクロール
(setq scroll-conservatively 35
      scroll-margin 0
      scroll-step 1)
(setq comint-scroll-show-maximum-output t) ;; shell-mode

;; フレームの透明度
(set-frame-parameter (selected-frame) 'alpha '(0.85))

;; http://www.gentei.org/~yuuji/software/euc/instamp.el
;; 現在時刻挿入
(setq display-time-string-forms
  '(year "/" month "/" day " " dayname " " 24-hours ":" minutes " "
    (if mail " Mail" "")))
(display-time)

;; M-wやC-kでコピーしたものを、他のアプルケーションで貼り付け可能にする
(cond (window-system
       (setq x-select-enable-clipboard t)
))

;;自動スペルチェック
(add-to-list 'exec-path "C:/MySystem/MySystem/emacs/Aspell/bin")
(setq-default ispell-program-name "aspell")
;;プログラムが起動したら,自動でスペルチェックを起動
(eval-after-load "ispell"
 '(add-to-list 'ispell-skip-region-alist '("[^\000-\377]+")))
; flyspell-mode
  (mapc
   (lambda (hook)
     (add-hook hook 'flyspell-prog-mode)) ;;ここではコメントの領域におけるスペルチェック
   '(
     c-mode-common-hook
     emacs-lisp-mode-hook
     ))
  (defun my-flyspell-mode-enable ()
    (flyspell-mode 1))
  (mapc
   (lambda (hook)
     (add-hook hook 'my-flyspell-mode-enable)) ;;ここではファイル全体そのものにスペルチェック   
   '(
     changelog-mode-hook
     debian-control-mode-hook
     tex-mode-hoo
     yatex-mode-hook
     text-mode-hook
     ))

;;auto-complete
;(add-to-list 'load-path "~/.emacs.d/site-lisp")
;(require 'auto-complete-config)
;(add-to-list 'ac-dictionary-directories "~/.emacs.d/site-lisp/ac-dict")
;(ac-config-default)
;;
;;



;; ------------------------------------------------------------------------
;; @ modeline

;; モードラインの割合表示を総行数表示
(defvar my-lines-page-mode t)
(defvar my-mode-line-format)

(when my-lines-page-mode
  (setq my-mode-line-format "%d")
  (if size-indication-mode
      (setq my-mode-line-format (concat my-mode-line-format " of %%I")))
  (cond ((and (eq line-number-mode t) (eq column-number-mode t))
         (setq my-mode-line-format (concat my-mode-line-format " (%%l,%%c)")))
        ((eq line-number-mode t)
         (setq my-mode-line-format (concat my-mode-line-format " L%%l")))
        ((eq column-number-mode t)
         (setq my-mode-line-format (concat my-mode-line-format " C%%c"))))

  (setq mode-line-position
        '(:eval (format my-mode-line-format
                        (count-lines (point-max) (point-min))))))
;; モードラインに行番号表示
;(line-number-mode t)
;; モードラインに列番号表示
;(column-number-mode t)


;;;;;;;;;;;;;;;;;Lispの設定;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;auto-install
(add-to-list 'load-path (expand-file-name "~/.emacs.d/auto-install/"))
(require 'auto-install)
(auto-install-update-emacswiki-package-name t)
(auto-install-compatibility-setup)

;; ------------------------------------------------------------------------
;; @ menu-tree.el
;; メニューバー日本語化
;; http://www11.atwiki.jp/s-irie/pages/13.html
(if (and (= emacs-major-version 22)
         (eq window-system 'x))
    (setq menu-tree-coding-system 'utf-8))
(require 'menu-tree nil t)


;;;;;;;;;;;;;;;;;;;;;;;;

;;======================================================================
;; TeX
;;======================================================================
; YaTeX-mode
(setq auto-mode-alist  (cons (cons "\\.tex$" 'yatex-mode) auto-mode-alist))
(autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t)
(setq load-path (cons "~/.emacs.d/yatex" load-path))         ;;ココにyatexのパス書く
(setq tex-command "platex")
(setq dvi2-command "C:/MySystem/MySystem/w32tex/dviout/dviout.exe" )                   ;;ココdvioutのパス書く
(setq dviprint-command-format "dvipdfmx %s ")
; BibTex
(add-hook 'yatex-mode-hook 'turn-on-reftex)

VTKのCMakeLists.txtを読み解く

今回は時間の関係上,VTKに特化したCMakeLists.txtについて記載する.

以下に一般的なVTKのCmakeLists.txtを示す.

cmake_minimum_required(VERSION 2.8)
 
PROJECT(VTKPolydataSingleObj)
 
find_package(VTK REQUIRED)
include(${VTK_USE_FILE})
 
add_executable(VTKPolydataSingleObj MACOSX_BUNDLE VTKPolydataSingleObj)
 
if(VTK_LIBRARIES)
  target_link_libraries(VTKPolydataSingleObj ${VTK_LIBRARIES})
else()
  target_link_libraries(VTKPolydataSingleObj vtkHybrid)
endif()

1行ずつ読んでいく

cmake_minimum_required(VERSION 2.8)

これは,CMakeを実行する際に,最低限守らないといけない,CmakeのVersionを示してます.
よって,このシステムは,CMakeのVersionは最低,2.8以上でなければなりません.

PROJECT(VTKPolydataSingleObj)

このシステムのプロジェクト名を指定します.
Makeファイルでいうところ,各実行系の名前を指定する所,ということでしょう.
ここでは,プロジェクト名をVTKPolydataSingleObjとしているようです.


さて,いよいよ,こちらからが本格的なVTK情報読み込みデス.

find_package(VTK REQUIRED)

VTKを動作させるために,必要なLink先やコードの位置を探している所デス.
位置などを読み込んだ後に,見つけたライブラリのパスなどを通します.
ここで,複数のライブラリを組み合わせます.

include(${VTK_USE_FILE})

VTK を動作させるためのファイル一式をプロジェクトに取り込む命令文

add_executable(VTKPolydataSingleObj MACOSX_BUNDLE VTKPolydataSingleObj)
<<
VTKを実行させる,実行系ファイルの名前の指定です.
第1引数がMain関数のコード名,第2は関係なし,第3引数が実行系ファイルの名前となる.

if(VTK_LIBRARIES)
target_link_libraries(VTKPolydataSingleObj ${VTK_LIBRARIES})
else()
target_link_libraries(VTKPolydataSingleObj vtkHybrid)
endif()

MATLAB で64bitのMexを行う設定

MexはMATLABの環境(コマンドライン)上で独自のC/C++を呼び出すためのバイナリファイル
バイナリファイルということは,バイナリ化が必要です.

64bitのシステムでMATLABのMexを行う設定

セットアップ環境は以下の通り

Mexを64bitで動作させるためのパッチなるもの(VS2010MEXSupport.zip)を用意する
こちらからダウンロードした.

Small ideas for a big world: Configure Matlab to use Visual 2010 C/C++ compiler


そして,こちらのサイトをよく確認する.
というより,このサイト通りでちゃんと動作します



1) 自分の環境を確認する.
まずは自分の環境をよく確認することが大事です.
もちろんですが,確実にバックアップを取ることは重要です.

C:\Program Files\MATLAB\R2007b\bin\win64\mexopts

適宜,バックアップとして,上記フォルダをコピーしておいておく



2) MATLAB環境上で以下のコマンドを行う

>> matlabroot

私は以下のように出力された
C:\Program Files\MATLAB\R2007b


3)ダウンロードしたファイルを展開
先のLink先からダウンロードした,VS2010MEXSupport.zipを適当な位置に展開する.
展開した以下のファイルをすべて,1)の環境内にコピペする.

4)mexのコンパイラを確認する

mex -setupコマンドで,Visual studio2010が存在し,選択できることを確認する.

あとは,さくさくと行きます!