たかくんの成長

たかくんの成長

大学X年生。学習記録や学生生活に関することを書きます。内容は間違っています。

DNAの構造を概観する ーDNAはなにからできているのかー

DNAは二重らせん構造を持つことで有名です。そこまではおそらく多くの人が知っていると思いますが,ここでは(ここから)より詳しくDNAの中身を見ていこうと思います。このページでは完結しません。DNAの構造を分かりやすく理解するために,以下のような流れで徐々にDNAの仕組みへと迫っていきます。
f:id:karia68:20181016193637j:plain

 DNAの基本単位であるヌクレオチドの構造を知ることで,DNAのミクロな構造を把握することができます。そしてそれらのヌクレオチドがどのように結合するのかについて知ることで,DNAが一本の長い鎖を作るメカニズムを理解できます。さらにヌクレオチド同士の水素結合を理解することで,DNAの二重らせん構造を把握する事ができます。

次回:

ヌクレオチドとはなにか
ヌクレオチド同士はどのように結びついているのか ーホスホジエステル結合ー
DNAが二重らせん構造を取る理由

の3本です。おたのしみに。

ヌクレオチドの構造 - たかくんの成長
ヌクレオチドはどのようにしてDNA鎖を構成するのか ーホスホジエステル結合ー - たかくんの成長

また,さらなる目標として,DNAの構造だけではなく,DNAにふくまれる情報とは何か,DNAはどのように情報を体内に伝えるか,遺伝子組み替えはどのようにして行われるのかになどについても取り扱っていきたいと思います。思っているだけです。



全ての学習記録はコチラです。
サイトマップ - たかくんの成長

たかくんのプログラム例と,エラー記録

たかくんのプログラム例

僕の書いたプログラムたちです。

入力された2つの数の四則演算を行うプログラム

#include <stdio.h>
int main(void)
{
    float x, y;
    printf("Enter a first number x:");
    scanf("%f", &x);
    printf("Enter a second number y (do not press 0):");
    scanf("%f", &y);

    if (y==0)
    {
    printf("\n\nDamm it!\n\n");
    }
    else
    {
    printf("\nx + y = %.3f\n", x+y);
    printf("x - y = %.3f\n", x-y);
    printf("x * y = %.3f\n", x*y);
    printf("x / y = %.3f\n\n", x/y);
    }

    return (0);

}

出力例

Enter a first number x:235135
Enter a second number y (do not press 0):6868

x + y = 242003.000
x - y = 228267.000
x * y = 1614907136.000
x / y = 34.236

入力された十個の数字の総和と平均を求めるプログラム

#include <stdio.h>
int main(void)
{
	int a[10], i;
	int total;
	float average;
	
	printf("Enter 10 numbers\n");
	
	for (i=0 ; i<10 ; i++)
	{
		scanf("%d", &a[i]);
	}
		
	total = 0;
	for ( i=0 ; i<10 ; i++)
	{
		total = total + a[i];
	}
	printf("total = %d\n", total );
	
	average = (float) total/10;
	printf("average = %f\n", average);
}

出力例

Enter 10 numbers
1
2
3
4
5
6
7
8
9
10
total = 55
average = 5.500000

たかくんのエラー記録

  • returnやprintfの最後にセミコロン;を付け忘れた
  • scanfの読み込みの型指定(%d, %f and so forth)を間違えた
  • 指数部分をe+Xじゃなくて+eXと書いてしまった

printf関数とscanf関数

printfは文字の出力を,scanfは文字の入力を受けることができます。

printf関数

printf("なんたら");という関数をを使うことによって,文字を出力できる。

文字列の出力
printf("takakun\n");
takakun
エスケープシークエンス(Escape Sequences)

\n・・・改行する

printf("taka\nkun\n");
taka
kun

\t・・・インデントする

printf("taka\tkun\n");
taka    kun

\\・・・一つの"\"を打てる

printf("taka\\kun\n");
taka\kun
整数の出力
printf("%d", 10);
10
小数の出力
printf("%f", 3.14);
3,14
指数の出力
printf("%e", 1.234e+3);
1.234e+3
printf("僕の誕生日は%d%d日,身長は%fcmで,歳は%eだよ!", 1, 1, 245.7, 1.29e+2);
僕の誕生日は11日,身長は245.700000cmで,歳は1.290000e+02だよ!

scanf関数

scanf("%dとか%fとか入力させたい書式", &代入したい変数);という関数を用いることで,キーボードから入力された情報を変数に代入する事ができる。

プログラムを実行するための一連の流れ

実際にC言語のプログラムを実行する方法について説明しています。

上のHello, world!というプログラムを実行するまでの一連の手順を示します。
プログラムを実行するには,

  1. プログラムを書く
  2. プログラムを保存する
  3. プログラムをコンパイルする
  4. プログラムを実行する

という一連の流れを抑える必要があります。ここでは,Macの環境を想定して行なっていきます。

プログラムを書く・保存する

ここでは,なんとなくですが全てをコマンドライン上で行ってみたいと思います。
まず,ターミナルを開いて,cdコマンドを用いてデスクトップに移動します。そして,mkdirコマンドを用いてデスクトップ上にCというファイルを作ります。(特にそうする必要はないですが,わかりやすいので)そして,cdコマンドで今作ったファイルCの中に移動します。
ターミナルを開いたのち,以下のコマンドを一つずつ打っていってください。

cd Desktop
mkdir C
cd C

次に,viコマンドを用いてプログラムの内容を書くテキストファイルを生成します。名前はhello_world.cとしておきましょう。名前は何でもいいですが,.cは必ず入れてください。
以下のコマンドを入力してください。

vi hello_world.c

そうすると,なんだかいろいろ出てきますが,冷静にiキーを押してください。それによって内容を編集するモードに移行できるので,以下の内容を打っていきましょう。

#include <stdio.h>
int main(void)
{
    printf("Hello, world!\n");
    return 0;
}

打ち終わったら,冷静にescキーを押して編集モードを終了します。最後に,:wqというコマンドを打って,ファイルの保存と終了を行います。:wとだけ打てばファイルの保存,:qとだけ打てばviの終了のみが行えます。間違ってファイルを保存する前にviを終了しないように気を付けてください。
これでプログラムを書いて,保存することが出来ました。

コンパイルする

次に,先ほどのプログラムをコンピュータが認識できるようにコンパイルします。以下のコマンドを打ってください。

gcc hello_world.c

プログラムの内容に誤りがあれば,ここでエラーメッセージが出ます。
ここで,lsコマンドを実行することによって,ファイルCの中に新たにa.outというファイルが生成されていることが確認できます。lsコマンドで,同じ階層のファイルの一覧を確認できます。

ls

あとは,プログラムを実行するのみです。./a.outというコマンドを打ってみましょう。

./a.out

Hello, world!と出力されたら成功です。お疲れ様でした。

Hello, world!で基本を学ぶ

以下のコードを打ち込み,compileして実行することによって,Hello, world!という文字列を出力することができます。

#include <stdio.h>
int main(void)
{
    printf("Hello, world!\n");
    return 0;
}

コードの中身を少し見ていきます。まず1行目です。

#include <stdio.h>

 プログラムをコンパイル(compile)する前に,前処理(preprocessing)という処理を行います。その段階で必要になるコンピュータへの命令文をディレクティブ(directive)と呼び,そのdirectiveの一つが#include文です。ここでの#include文は,C言語の標準ライブラリの一つであるstdio.hをプログラムの中にincludeしてから,compileしてよねという要求をコンピュータに送っています。とりあえず何かプログラムを書く前にはこの#include <使うライブラリ名>を書いておけばいいと思います。

 compileというのは,我々が書いたプログラミングをコンピュータに認識できるような機械語に変換する作業のことです。実際には,プログラム文をコンピュータに認識させるまでにpreprocessing, compile, linkingという3つの工程を行う必要があります。
 ライブラリというのは,様々な機能を果たしてくれる関数がつまったものです。例えばstdio.hというライブラリには文字列の入出力を扱う関数であるprintf,scanfなどが,math.hというライブラリには三角関数cos,sinなどの関数が用意されています。そのようなライブラリをdirectiveで宣言しておくことによって,ライブラリの機能を使うことができます。要するに自分ですべて0から書かなくても,人が作ってくれた機能を使わせてもらうことで大幅に手間と時間が短縮できるということです。

int main(void)

 これは,関数(function)と呼ばれるもので,数学における関数の役割と似ており,何らかの値が入力されたら,もしくは入力されなくても,何らかの値を返すというものです。C言語における関数は

返されるデータ型  関数の名前(引数)

と表されます。

 データ型というのは,扱うデータの性質を表します。代表的なものに整数(integer:intと表記)浮動小数点数(floating point:floatと表記)などがあります。ここではintとなっていますから,この関数の戻り値は整数であるということです。確かに,最後にreturn 0という記述があるので,この関数の戻り値として整数0が返されていることが分かります。
 関数の名前は任意に決めることが出来ますが,あらかじめC言語に組み込まれているキーワードと重複しないようにする必要があります。また,命名の際にコードを解読しやすくするために,小文字を使用する・ハイフンを使用しないなどのいくつかの慣習があります。それらも守る必要があるでしょう。

{
    printf("Hello, world!\n");
    return 0;
}

 {}で囲まれた部分は,関数の中身です。stdio.hというライブラリに含まれているprintf関数によって,Hello, world!という文字列が出力されます。\nというのは特殊文字(Escape Sequence)と呼ばれるものの一つで,\nの場所で出力結果が改行されます。
 returnというのは,文字通り関数の戻り値を返すもので,ここでは0という整数を返しています。returnによって関数の戻り値が返されるとともに,関数の機能が終了し

空気抵抗のある運動 (二次の抵抗力)

二次の抵抗力が働く運動について分析します。

二次の抵抗力が働く運動について考察する。
x軸方向
f:id:karia68:20180924095450j:plain
この運動方程式をどんどん解いて行く。
f:id:karia68:20180924095447j:plain
t=0のときの速度を,初速度V0として,積分定数を書き換える。
f:id:karia68:20180924095445j:plain
t秒の時のx軸方向の速度
f:id:karia68:20180924095438j:plain
積分してx軸方向の位置を求める。
f:id:karia68:20180924095440j:plain
t=0のときの初期位置を考えて,積分定数を処理する。
f:id:karia68:20180924095436j:plain
t秒の時のx軸方向の位置
f:id:karia68:20180924095443j:plain
y軸方向
f:id:karia68:20180924101610j:plain
変数分離をして,どんどん解いて行く。
f:id:karia68:20180924101612j:plain
ここで,分母に二次の項が現れるので,積分をするために部分分数展開を行う。
f:id:karia68:20180924101607j:plain
さらに積分を行い,絶対値が現れる。
f:id:karia68:20180924101602j:plain
ゴチャゴチャ整理をして,頑張って求める。
f:id:karia68:20180924103615j:plain
t秒の時のy軸方向の速度を求めた。
f:id:karia68:20180924103612j:plain


全ての学習記録はコチラです。
サイトマップ - たかくんの成長

空気抵抗のある運動 (一次の抵抗力)

一次の抵抗力が働く運動について分析します。

下の図のようなケースを考えてみる。基本的には運動方程式を立てて,微分方程式をゴチャゴチャ解いていっているだけ。
f:id:karia68:20180921145135p:plain
f:id:karia68:20180921145141p:plain
f:id:karia68:20180921145147p:plain
f:id:karia68:20180921145154p:plain

TeXで書き直さなきゃ(汗)



全ての学習記録はコチラです。
サイトマップ - たかくんの成長

一階線形微分方程式への変換 ーベルヌーイ方程式ー

ベルヌーイ方程式と呼ばれる特殊な形の非線形微分方程式は,変換を行う事で線形微分方程式へと変換でき,解を求める事が出来る。

続きを読む

f:id:karia68:20181011165947j:plain
計算例 問題は常微分方程式(E.クライツィグ)より
f:id:karia68:20181011170835j:plain


全ての学習記録はコチラです。
サイトマップ - たかくんの成長

完全微分方程式への変換 ー積分因子ー

完全でない惜しい微分方程式に対して,ある操作を施す事で完全にすることができる場合がある。

f:id:karia68:20181011170119j:plain

計算例 問題は常微分方程式(E.クライツィグ)より
f:id:karia68:20181011170122j:plain

f:id:karia68:20181011170214j:plain


全ての学習記録はコチラです。
サイトマップ - たかくんの成長

完全微分方程式

以下のような性質を満たす微分方程式は,簡単に解く事ができる。


f:id:karia68:20181004181918j:plain

解き方

f:id:karia68:20181004182243j:plain

計算例1 問題は常微分方程式(E.クライツィグ)より

f:id:karia68:20181004183611j:plain


全ての学習記録はコチラです。
サイトマップ - たかくんの成長