ゆきくらげのブログ

熱効率1億%の永久機関で人生勝ち組

過去問進捗 東工大2012物理

久しぶりに。98/150です。部分点何も考慮してないですけど……
最近物理やってなかったので粗がメチヤのクチヤに目立ちますね。

間違えたこと

・こう……説明しづらいのですが円運動の半径が変わっていたのに変えてませんでした。わかりにくい。
・計算ミス
コンデンサに両方正電荷溜まらない、普通は。
x_1x_8で選べと言われてx_0と答えた。

以上になります。今はセンター対策しかしてないので無問題です。無問題。

これまでの過去問でやらかしたことまとめ

ちょっと経験もたまってきたのでこれまでの過去問でやらかしたこと&これは覚えておけ&その他諸々リストを作ろうと思い立ちました。

数学

戦略

東工大は5問構成180分なので一問30分弱で解いていく感じでやる。30分で解き終わらなかったら次の問へ(試験なわけですから知的好奇心を満たす場ではない、問題の答えを求めるより点数を取るのが大事。という心もち。)最後に少なくとも30分は余るので、出来なかった所の中で一番完答に近い問題を解く。目標は220点。

ガウス記号の扱い

 x-1<[x]\leq x
こんな感じ。コレすぐ出てこなくて10分ぐらい無駄にした。

計算手順

東工大積分はかなり煩雑になることが多々ある。簡単な方法とか模索せずに素直に解いたほうが早いことが、ある(あくまでmay)。逆にsinθ = なんちゃらと置いたりするときは右辺はきれいな形になることが多い。(要出典)

物理

戦略

東工大物理は割と時間が緩いので丁寧にやっていく。それでも大問一つ40分なのでそれをオーバーしそうであれば次の問題へ。
早稲田に関しては問題量が多すぎるのでそもそも解き切るのは無理、と割り切って進めるしかない。めんどそうな計算は後回し。(早稲田は化学も多いのでなかなかキツイ)

ローレンツ

左手。中指から電磁力ですよ!(一回ド忘れして詰んだ)(そもそも右手系での外積を考えればわかる)

熱力学

定期的に解法を忘れる。

化学

戦略

理系科目の中で最も苦手な科目。頑張ろう……大問一つ40分を目安に解く。

理論

電解質の浸透圧の計算の時、注意。

無機

フッ化水素酸はガラスを溶かす。炭酸水素ナトリウムは塩基性
親水コロイドが多量の電解質で沈殿→塩析
疎水コロイドが少量の電解質で沈殿→凝析
前者はめちゃくちゃ塩を入れるので塩析、と覚える。

有機

環構造かなり盲点。ちゃんと考える。

英語

知らん

シス単の5章(多義語)いい加減に始めないとマズい

haskellでn進法型作った

こちらの記事が非常に参考になりました。ありがとうございます。
GHCの型レベル自然数を理解する - Qiita


こんな感じ。

{-# LANGUAGE DataKinds      #-}
{-# LANGUAGE KindSignatures #-}

module Nary where

import           GHC.Natural  (Natural)
import           GHC.TypeNats (KnownNat, Nat, natVal)
import           Prelude      hiding (head)

--N進法 (型としての自然数rをRadix(基数)とする)
newtype Nary (r :: Nat) = Nary Natural

instance KnownNat r => Show (Nary r) where
    show (Nary 0) = ""
    show n        = show (1 |>| n) ++ show (head n)

(|+|) :: Nary r -> Nary r -> Nary r
(|+|) (Nary m) (Nary n) = Nary $ m + n

(|-|) :: Nary r -> Nary r -> Maybe (Nary r)
(|-|) (Nary m) (Nary n)
    | m - n < 0 = Nothing
    | otherwise = Just $ Nary $ m - n

(|*|) :: Nary r -> Nary r -> Nary r
(|*|) (Nary m) (Nary n) = Nary $ m * n

(|>|) :: KnownNat r => Natural -> Nary r -> Nary r --右シフト あふれた分は放棄
(|>|) n t@(Nary m) = Nary $ div m $ r ^ n where
    r = natVal t

(|<|) :: KnownNat r => Natural -> Nary r -> Nary r --左シフト 増えた分は0で埋める
(|<|) n t@(Nary m) = Nary $ m * r ^ n where
    r = natVal t

take :: KnownNat r => Int -> Nary r -> Nary r --1~n桁目までの取り出し
take n t@(Nary m) = Nary $ mod m $ r ^ n where
    r = natVal t

head :: KnownNat r => Nary r -> Natural --先頭要素の取り出し
head t@(Nary m) = mod m r where
    r = natVal t

(|!|) :: KnownNat r => Natural -> Nary r -> Natural --n桁目の取り出し
(|!|) = (head .) . (|>|)

toNat :: Nary r -> Natural
toNat (Nary n) = n

2進法の型は Nary 2、 3進法の型は Nary 3 となっている。
なので

{-# LANGUAGE DataKinds #-}

module Main where
import           Nary

main :: IO ()
main = do
    let
        x = Nary 4 :: Nary 2
        y = Nary 7 :: Nary 2
        z = x |+| y
    print z
    return ()

こういうことができる。

x = Nary 7 :: Nary 2
y = Nary 4 :: Nary 3
z = x |+| y

こういうことをするとコンパイラに怒られる。便利。
これを使ってn桁目をn個目の要素として保持するリストを作ろうとしたのですが、怒られが発生しました。

{-# LANGUAGE DataKinds     #-}
{-# LANGUAGE NoStarIsType  #-}
{-# LANGUAGE TypeFamilies  #-}
{-# LANGUAGE TypeOperators #-}
{-# OPTIONS_GHC -fplugin GHC.TypeLits.Normalise #-}
{-# OPTIONS_GHC -fplugin GHC.TypeLits.KnownNat.Solver #-}

module NaryList where

import           GHC.Natural
import           GHC.TypeNats
import           Nary

newtype NaryList (l :: Nat) (r :: Nat) = NaryList (Nary r) --Nary(n進法の1の位からr ^ (l - 1)の位までをリストとする)

head :: (KnownNat r, 1 <= l) => NaryList l r -> Natural --先頭要素
head (NaryList n) = Nary.head n

tail :: (KnownNat r, 1 <= l) => NaryList l r -> NaryList (l - 1) r --先頭を除いたもの
tail (NaryList n) = NaryList $ 1 Nary.|>| n

toList :: (KnownNat l, 0 <= l, KnownNat r) => NaryList l r -> [Natural]
toList t@ns
    | natVal t == 0 = []
    | otherwise = NaryList.head ns : toList (NaryList.tail ns)--Error! 

--Couldn't match type ‘1 <=? l’ with ‘'True’

tailの(l - 1)を(l + 1)にすると怒られないです。こちらからしたら明確に1以上ではあるんだけどコンパイラにそれをわからせるのはなかなか難しいみたいです……
どうしたものか

余談

それにしてもこのブログのコードブロック(?)、めちゃくちゃ読みにくいですよね……
読みやすくなるやつ導入(コピペ)したんですけど特に変化がない。JavaScript君がうまく動いてくれてないみたいです……

数学メモ 2020/11/29

Steve Awodey / Category Theory のChapter 1の途中まで読んで色々と学びがあったのでメモ。~morphism (射)という単語が多すぎてなかなか大変でした。
Steve Awodey の Category Theory を読む : Chapter 1 - 俺の Colimit を越えてゆけ
こちらのブログを読みつつ自分で色々と調べました。

集合 setにおいて
f:A\rightarrow B
単射 injectiveであるとは
\forall a,a'\in A,(f(a)=f(a')\Rightarrow a=a')
全射 surjectiveであるとは
\forall b\in B,\exists a \in A,f(a)=b
全単射 bijectionであるとは
\rm{f\ is\ injective}\wedge \rm{f\ is\ surjective}

群 groupにおいて
f:G\rightarrow H
準同型写像 homomorphismであるとは
\forall g,g'\in G,f(g\cdot_{G}g')=f(g)\cdot_Hf(g')
 特にfが
 injectiveの時、単準同型 monomorphism
 surjectiveの時、全準同型 epimorphism
 というそうです。
同型写像 isomorphismであるとは
\rm{f\ is\ homomorphism}\wedge \rm{f\ is\ bijection}
自己準同型写像 endomorphismであるとは
\rm{f\ is\ homomorphism}\wedge G=H
自己同型写像 automorphismであるとは
\rm{f\ is\ isomorphism}\wedge G=H
同じことですが
\rm{f\ is\ endomorphism}\wedge \rm{f\ is\ bijection}

式だけじゃわかりにくいので例を作ってみました。
G=(\mathbb{Z},+) H=(\left\{0,1\right\},+') (+'は2を法とした剰余演算)
f:G\rightarrow Hf(x)=x\ mod\ 2で定義すると
fは準同型写像ですが同型写像でも自己準同型写像自己同型写像でもありません。
(あいまいな言い方ですが)このHの台集合を\mathbb{Z}にするとfは自己準同型写像でありますが自己同型写像でなくなります。

圏 categoryにおいて
f:A \rightarrow Bが同型写像 isomorphismであるとは
\exists g:B\rightarrow A,g\circ f=1_A,f\circ g=1_B
です。

・まとめ
まだ何もわからん

Haskell 進捗

色々と調べたのでメモ

配列はArrayを使うのではなくVectorを使ったほうがいいらしい(そしてできるならUnboxed)

しかしVector.Unboxedは多次元配列が表現できないのでナップサック問題とかの多次元配列DPが厳しい

Repaって何?←イマココ

 

StringではなくByteStringを使ったほうがいい

モナド変換子についてぬくぬく理解しかないのでもうちょい調べて実践

正格のほうが速いことが稀によくある。使い分けが鬼。どうするんですか