C 言語第 7 回 掛け算 (multiply number) ìz1 = x1 + iy1 í îz = x + iy 割り算 (devide number) ( )( ) ( ) Þ z z = x + iy x + iy = x x - y y + i y x + x y

Similar documents
C 言語第 8 回 複素微分方程式の解法 1 1 複素数の係数を持つ 1 階の微分方程式 複素数を z として 微分方程式は dz dt = である 特に とする f ( z, t) ( ) 実際には が含まれていないので ( ) f ( z, t) = i z Ü t f (

C 言語第 3 回 2 a と b? 関係演算子 a と b の関係 関係演算子 等しい a==b 等しくない a!=b より大きい a>b 以上 a>=b より小さい a<b 以下 a<=b 状態 真偽 値 条件が満たされた場合 TRUE( 真 ) 1(0 以外 ) 条件が満たされなかった場合 F

演習課題No12

Microsoft PowerPoint - 12.ppt [互換モード]

Microsoft PowerPoint - 12.ppt [互換モード]

DVIOUT

Microsoft PowerPoint - 13.ppt [互換モード]

C 言語第 6 回 1 数値シミュレーション :2 階の微分方程式 ( シラバス10 11 回目 ) 1 2 階の微分方程式と差分方程式微分方程式を 2 d x dx + c = f ( x, t) 2 dt dt とする これを 2 つの 1 階の微分方程式に変更する ìdx = y 2 2 d

C 言語固有の命令で全部で32 個 の関数C 言語第 1 回 C 言語って?( シラバス 1 2 回目 ) 関数型言語 コンピュータに実行してもらう命令はすべて関数の中に記述されている 関数がプロ グラム

DVIOUT

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

memo

kiso2-09.key

PowerPoint プレゼンテーション

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

PowerPoint プレゼンテーション

Microsoft PowerPoint - program.ppt [互換モード]

memo

Microsoft Word - no02.doc

Microsoft PowerPoint - prog08.ppt

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

memo

C 資料 電脳梁山泊烏賊塾 構造体 C++ の構造体 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する 定義と変数宣言 C++ に

1/17 平成 29 年 3 月 25 日 ( 土 ) 午前 11 時 1 分量子力学とクライン ゴルドン方程式 ( 学部 3 年次秋学期向 ) 量子力学とクライン ゴルドン方程式 素粒子の満たす場 y ( x,t) の運動方程式 : クライン ゴルドン方程式 : æ 3 ö ç å è m= 0

Microsoft PowerPoint - CproNt02.ppt [互換モード]

相続支払い対策ポイント

150423HC相続資産圧縮対策のポイント

ハピタス のコピー.pages

Copyright 2008 All Rights Reserved 2

gengo1-2

スライド 1

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

Prog1_15th

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

プログラミング基礎

数値計算

プログラミング実習I


Microsoft PowerPoint - kougi2.ppt

第2回講義:まとめ

Microsoft Word - no202.docx

8 / 0 1 i++ i 1 i-- i C !!! C 2

Microsoft Word - no206.docx

Taro-ポインタ変数Ⅰ(公開版).j

Microsoft PowerPoint - 3.ppt [互換モード]

DVIOUT

Microsoft Word - no11.docx

ゲームエンジンの構成要素

PowerPoint Presentation

プログラミング実習I

Microsoft PowerPoint - 13th.ppt [互換モード]

17 1. strucr Potter ( ) Harry Potter and the Philosopher s Stone 1997 English Title : Harry Potter and the Philosopher s Stone : : 1997 #include<stdio

プログラミング基礎

Microsoft Word - no103.docx

初心者にもできるアメブロカスタマイズ新2016.pages

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

Microsoft Word - no13.docx

- 2 Copyright (C) All Rights Reserved.

Microsoft PowerPoint - 4.ppt [互換モード]

講習No.1

プログラミング基礎

プログラミング基礎

Microsoft PowerPoint - kougi9.ppt

プログラミング基礎

演習1

Microsoft PowerPoint - lec10.ppt

Copyright All Rights Reserved. -2 -!

公式集 数学 Ⅱ B 頭に入っていますか? 8 和積の公式 A + B A B si A + si B si os A + B A B si A si B os si A + B A B os A + os B os os A + B A B os A os B si si 9 三角関数の合成 si

Microsoft PowerPoint - class2-OperatorOverLoad.pptx

情報処理演習 B8クラス

2013年度 信州大・医系数学

C C UNIX C ( ) 4 1 HTML 1

Microsoft PowerPoint - 計算機言語 第7回.ppt

複素数平面への誘い

PowerPoint プレゼンテーション

Microsoft Word - 3new.doc

IPA:セキュアなインターネットサーバー構築に関する調査

Microsoft Word - Training10_プリプロセッサ.docx

PowerPoint プレゼンテーション

講習No.8

Microsoft Word - 最終版 バックせどりismマニュアル .docx

kiso2-03.key

情報処理Ⅰ演習

PowerPoint プレゼンテーション

1. 関数 scanf() 関数 printf() は変数の値を画面に表示しますが それに対し関数 scanf() はキーボードで入力した値を変数に代入します この関数を活用することで対話式 ( ユーザーの操作に応じて処理を行う ) プログラムを作ることができるようになります 整数の和

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

Prog1_6th

PowerPoint プレゼンテーション

2006年10月5日(木)実施

Microsoft Word - no15.docx

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

Microsoft PowerPoint - kougi4.ppt

関数 C 言語は関数の言語 関数とは 関数の定義 : f(x) = x * x ; 使うときは : y = f(x) 戻り値 引数

スライド 1

メソッドのまとめ

Microsoft PowerPoint - handout07.ppt [互換モード]

<4D F736F F D F2095A F795AA B B A815B837D839382CC95FB92F68EAE2E646F63>


Transcription:

C 言語第 7 回 複素数の使用法 ( シラバス 1 回目 ) 1 1 複素数 複素数 (complex numbers) z は虚数単位 ìi í i = - î 1 を使って つの実数 x, y から z = x + iy と作ります とくに x を z の実数部 (real part): x = Re( z) y を z の虚数部 (imarginary part): y = Im ( z) といいます また i を -i に変える変換を 複素共役変換 (complex conjugate) と呼んで z * や z で表し * ì z = x - iy í îz = x - iy になります また 複素数とベクトルは 1 対 1 に対応し ìx = xi + yj 座標 ( x, y) : í îz = x + iy と表す事ができます ( x, y) までの距離 x + y は ì ïx x = x ì ï z x + y = í Þ x + y = * * í ï îzz = z z = z ïî x になります は絶対値 (absolute number) を表す記号で ベクトルや複素数の長さを与えます + - 複素数の四則演算は それぞれ実数部や虚数部ごとの演算とi i = -1に注意して計算します 足し算 (add number) ìz1 = x1 + iy1 í îz = x + iy 引き算 (subtract number) ìz1 = x1 + iy1 í îz = x + iy ( ) Þ z + z = x + x + i y + y 1 1 1 ( ) Þ z - z = x - x + i y - y 1 1 1 Copyright 1997-017 Masaki Yasue, Dept. of Phys., Tokai Univ, All rights reserved.

C 言語第 7 回 掛け算 (multiply number) ìz1 = x1 + iy1 í îz = x + iy 割り算 (devide number) ( )( ) ( ) Þ z z = x + iy x + iy = x x - y y + i y x + x y 1 1 1 1 1 1 1 ( ) ì z = x + iy z x + iy x x + y y + i y x - x y í Þ = = îz x iy z x iy x y 1 1 1 1 1 1 1 1 1 1 = + + + 複素共役 (complex conjugate) * z = x + iy Þ z = x - iy 絶対値 (absolute number) z x + iy x x + y y + i y x - x y z = x + y Þ = = と計算します 3 C 言語での複素数 ( ) 1 1 1 1 1 1 1 z x + iy x + y C 言語は実数による演算ができますが 複素数の演算はできません そこで 複素数の演算規 則を教えないと行けません C 言語での複素数を作成するのに都合の良い方法が用意されてい ます 構造体を作成する方法です そこで 複素数用の構造体を作成します これは 次のような 書式で与えられます まず 名前を COMPLEX とします これは int や double と同じで int: 整数型 double: 倍精度浮動小数点型 COMPLEX: 複素数型となります 自作の型として複素数型を作ります その型は つの実数 (r と i) を同時に持て typedef struct tagcomplex double r; // real= 実 double i; // imarginary= 虚 COMPLEX; と表します この複素数型 (COMPLEX) は 整数型 (int) と同じ使い方ができて int x; と使います この時 z は つの実数を持ち z.r z.i として表せます これが複素数 z の実数部と虚数部になります 例えば つの複素数 z 1 と z の足し算 z =z 1 +z は

C 言語第 7 回 3 z = z + z 1 z.r z.i z1.r z.r z.i æ ö x + i y = x1 + x + i y1 + y ç z è ø に習って 成分ごとに計算します : COMPLEX z1, z; z.r = z1.r+z.r; z.i = +z.i; とすれば つの複素数 z1, z; の足し算が z になります (COMPLEX z1, z, z; とまとめても良い ) 定数の複素数は z=+3i: z=, 3; と記述します 従って 虚数単位 i は C 言語で ai で表すと ai = 0, 1; になります 4 複素数演算用の自作関数複素数演算をする自作関数を作ります 足し算 :z = z 1 +z z = add(z1, z) 引き算 :z = z 1 -z z = subtract(z1, z) 掛け算 :z = z 1 z z = multiply(z1, z) 割り算 :z = z 1 /z z = devide(z1, z) 複素共役 :z * w = conjugate(z) 絶対値 :x = z x = absolute(z) (*) x は double x です x 倍 :x = x z x = multilpy_number(z) になります 3 の例では 足し算の作り方を示しています 自作関数 add(z1, z) を完成するには C 言語のルールにより 使う変数はすべて宣言する 使う変数は z1, z, と計算結果の z COMPLEX z1

C 言語第 7 回 4 COMPLEX z 計算結果を return で返す とする 関数は複素数の COMPLEX 型を返す COMPLEX add になります 以上を踏まえて z = z1 + z COMPLEX add(complex z1, COMPLEX z) z.r z.i z1.r z.r z.i æ ö z = x + i y = z1 + z = x1 + x + i y1 + y ç è ø z.r = z1.r+z.r; z.i = +z.i; と作成できます

C 言語第 7 回 5 第 7 回目レポート レポートの回数 (7 回目 ) 学生証番号と氏名を明記すること 必ず表紙を付け 最後のページ ( の添付用 ) を表紙の次に入れる (A4 レポート用紙使用のこと ) 1) 下に記述してあるプログラム ( 複素数操作関数プログラム ) で 自作関数 subtract z.r z.i z1.r z.r z.i æ ö z = x + i y = z1 - z = x1 - x + i y1 - y ç è ø multiply z.r z.i z1.r z.r z.i z1.r z.r z.i z1.r z.i z.r æ öæ ö æ ö z = x + i y = z1z = x1 + i y1 ç x + i y = x1 x - y1 y + i x1 y + x y1 ç ç ç è øè ø è ø divide z.r z.i z = x + i y = z z 1 conjugate z * absolute z multiply_number xz が未完成になっている???(1 行分とは限らない ) を完成し プログラムを実行せよ 提出は プログラム ( 下に記述してある複素数操作関数プログラムを完成させる ) 実行したときの画面コピー 確認用 正しくプログラムが作成されると 以下の数値が表示されます : の 点です z1=1.000000+.000000i z=4.000000+5.000000i z = add(z1, z): 5.000000+7.000000i z = subtract(z1, z): -3.000000+-3.000000i z = multiply(z1, z): -6.000000+13.000000i z = divide(z1, z): 0.341463+-0.073171i z = conjugate(z1): 1.000000+-.000000i x = absolute(z1):.36068 z = multiply_number(, z1):.000000+4.000000i ) 1) のプログラムで表示させると subtract 関数の結果表示の箇所で の様に z = subtract(z1, z): -3.000000+-3.000000i -3.000000-3.000000 i と表示すべき所 -3.000000+-3.000000 i

C 言語第 7 回 6 と表示される -3.000000-3.000000 i と表示されるように自作関数 printz を修正し 新たに自作関数 printz_minus として作成せよ (printz_minus では printz 内の数値 z.i を if 文を使用して 正と負で場合分けして表示させます ) 提出は 自作関数 printz_minus のプログラム 実行したときの画面コピー ( -3.000000-3.000000i の表示を確認) の 点です #include <stdio.h> #include <math.h> 複素数操作関数プログラム typedef struct tagcomplex double r; double i; COMPLEX; // z1+z COMPLEX add(complex z1, COMPLEX z) z.r = z1.r+z.r; z.i = +z.i; // z1-z??? subtract(???)??? // z1*z COMPLEX multiply(???)??? // z1/z COMPLEX divide(complex z1, COMPLEX z) COMPLEX bunsi;

C 言語第 7 回 7 // z = 0 の時 エラーメッセージを出すためのプログラムです if(???) COMPLEX zero = 0, 0; printf(" エラー :0 で割っています \n"); getchar(); return zero; bunsi.r =???; bunsi.i =???; z.r = bunsi.r/???; z.i = bunsi.i/???; // z1 * COMPLEX conjugate(complex z1) z.r = z1.r;??? // z??? absolute(complex z) return sqrt(z.r*z.r + z.i*z.i); // x*z1 COMPLEX multiply_number(double x, COMPLEX z1)??? void printz(complex z) printf("%f+%fi", z.r, z.i); int main(void) COMPLEX z1 = 1.0,.0; COMPLEX z = 4.0, 5.0;

C 言語第 7 回 8 double x; printf("z1="); printz(z1); printf("z="); printz(z); printf("\n\n"); z = add(z1, z); printf("z = add(z1, z): "); printz(z); z = subtract(z1, z); printf("z = subtract(z1, z): "); printz(z); z = multiply(z1, z); printf("z = multiply(z1, z): "); printz(z); z = divide(z1, z); printf("z = divide(z1, z): "); printz(z); z = conjugate(z1); printf("z = conjugate(z1): "); printz(z); x = absolute(z1); printf("x = absolute(z1): "); printf("%f\n", x); z = multiply_number (, z1); printf("z = multiply_number(, z1): "); printfz(z); return 0;

C 言語第 7 回 9 提出例 ( 使える表紙は次のページ ) コンヒ ュータ物理学演習 Ⅱ 第 7 回目 月 日 次ページの添付用 作成する解答など 学籍番号 氏名 1 ページ目 ページ目 3 ページ目以降

C 言語第 7 回 10 コンピュータ物理学演習 Ⅱ 第 7 回目 月日提出 学籍番号 氏名

C 言語第 7 回 11 第 7 回目レポート ( 添付用 ) 1) 次のプログラムにおいて自作関数 subtract multiply divide absokute において??? 完成しプログラムを実行せよ 提出は プログラム 実行したときの画面コピーの 点です ) 1) のプログラムで表示させると z = subtract(z1, z): -3.000000+-3.000000i の様に -3.000000-3.000000ii と表示すべき所 -3.000000+-3.000000ii と表示される -3.000000-3.000000ii と表示されるように自作関数 printz を修正し 新たに自作関数 printz_minus として作成せよ (if 文を使用して printz を正と負で場賄分けします ) 提出は 自作関数 printz_minus のプログラム 実行したときの画面コピー ( -3.000000-3.000000ii の表示を確認) の 点です