2 :
デフォルトの名無しさん:2007/12/08(土) 06:31:51
それと社会と美術も頼む
3 :
デフォルトの名無しさん:2007/12/08(土) 07:45:13
3次元ベクトルの外積についての質問なんですが、
a×bの外積は
a×b = (a.y * b.z - a.z * b.y a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x)
で求められると思うのですが、始めに教えてもらったときに
dot = DotProduct(a, b)とするとき、
a×b = (a.x - dot * b.x, a.y - dot * b.y, a.z - dot * b.z)
と教えてもらったのですが、これでも外積を求められるのでしょうか?
a×b = a + (a・b) b
を主張してると思うけど、
この式の左辺は a と b の外積だから
当然 a と b の張る平面内にない
いっぽう右辺は a と b の一次結合
何かのまちがいかと
>4
試算すりゃ一発でわかんだろ?
>>5 やっぱり違いますよね。「これでもいける」と力説されてちょっと不安だったので安心しました。
>>6 一応計算はしてみたのですが、最近ベクトルについて勉強し始めたばかりで、
どっちがあっているかわからなかったもので…
もっと勉強しなきゃ orz
ありがとうございました。
3次元空間において各離散点(x,y,z)がスカラーを持つとき、ある任意平面で切った断面図を計算する
一般的な方法はあるんでしょうか?どんな探索・補間をすればいいのかいまいち分かりません。
10 :
デフォルトの名無しさん:2007/12/12(水) 23:08:40
なんつうか、思ったんだが、スレタイとしては、「数学のためのプログラミング」ってのが
いいんじゃない??
>>10 それはそれで面白いと思うけど、でも別のスレだな
>>9 任意平面への投影図ではなくて?
点たちはばらばらに存在しているの?
断面にはまれにしか点が乗らなくね?
13 :
9:2007/12/13(木) 13:15:58
>>13 Matlab は使ったことないんだけど、それは、連続なスカラー場の断面図?
離散点で値を持ってるなら、補間とかしないと無理かな。
4面体だと、バイリニア補間とかバイキュービック補間でいいと思うけど。
6面体だとどうしたもんだろう。ニアレストネイバーでいけそうな気もするか。
>>13 そこにある例題のように、空間内のスカラー値関数 v = f(x, y, z) に対して
特定の断面に沿った v の値の分布が見たいということ?
そしてその関数 f は具体的な式などでは与えられていなくて、サンプルとして
いくつかの点における値だけがわかっているということか
補間する前に、空間全体に回転行列をかまして、断面が xy 平面になる
ようにすると処理が楽になったり?
>>15 空間の方を回転するのは無駄だと思う。
補完って、逆から座標変換するような感じでするのが普通。
表示される xy 平面のこの点は元の空間ではこの点にあるはずだから・・・
というように。
17 :
9:2007/12/13(木) 22:47:15
>>14,15
>Matlab は使ったことないんだけど、それは、連続なスカラー場の断面図?
そうだと思います。私も使ったことはなくて、ググってたら見つけたページです・・
すいません言い忘れましたが、求めたいのは断面図だけでなく、
断面積で重み付けした値の和(つまり全断面の積分値)もでした。
要素内のある1点の値を補間で求めるのは教科書などにあり、4面体内の点(x,y,z)の場合
x=x1+ξ(x2-x1)+η(x3-x1)+ζ(x4-x1),y=・・・,z=・・・から要素内座標ξ,η,ζを求めて
p=p1+ξ(p2-p1)+η(p3-p1)+ζ(p4-p1)で補間値pが求まります。ですが、
その点の位置(x,y,z)をそもそもどうやって決めるんでしょうか?
もしかして要素との断面の重心?
例えばよ、基底ベクトル a と b で張られる平面
P = x a + y b
上の断面図を求めたければ、
P 上の点 (1, 1) に相当する三次元空間上の点は a + b だから、
この点の値を求めればいい。
この点に一番近い格子点4点を探して、
その4点に対してその補完式を使う。
あっ、言葉足らずかも。
> P 上の点 (1, 1) に相当する三次元空間上の点は a + b だから
この作業を (x, y) に関して繰り返すのね。
一定範囲決めておいて。
積分したいんなら、↑の (x, y) の探索を十分広い範囲でやって、
求めたい有限要素の外にある場合は値を 0 にでもしておいて、
総和を求めればいいんじゃないかと。
あくまで、離散近似になるけど。
ちょっと気になって前スレ950の
> |(PA×PB)・PC| / |AC・BC|
を試してみたんだけど、
a(0,0,0) b(1,0,0) c(0,1,0) p(1,1,0)
で計算したら距離0になったんだけど、俺の計算が間違ってる?
>>20 その式、分母が間違ってるね。
四面体の体積 ÷ 底面積 = 四面体の高さ = 点から面への距離
と計算したいんだと思うんだけど、
その式だと分母が底面積にならない。
底面積は 1/2 |AC| |BC| cos∠ACB だ。
AC = (a, b), BC = (c, d) とすると、(ad - bc) / 2
あと、分子も、それだと四面体じゃなくて
PA, PB, PC を辺とする並行6面体の体積になるから、
1/6 掛けないとだめかも。
っていうか、平面までの距離って、
(CA × CB)・CP / |CA| |CB| な気がする。
(CA × CB) / |CA| |CB| が平面の単位法線。
CP に単位法線掛けると、平面から P までの距離。
>>21-22 ああ、そういうことか。
どのみち、体積から求めてるなら三角形からの距離ではないし、
僊BC平面上に点Pがあるときは求まらないか。
世の中には都合のいい公式があるもんだなぁ、とちょっと感心したんだけどそんな甘くはないかw
ごめん、21 にも 22 にもちょっとずつミスが。
22 の分母は |CA×CB|。
Pが平面状にあるときはちゃんと0になるはず。
27 :
26:2007/12/14(金) 12:37:41
あ、すまそ、ポリゴンへの距離と勘違いした・・・
28 :
デフォルトの名無しさん:2007/12/20(木) 05:03:48
>>28 単にグラフ化したいなら普通に補間。
その式で言う j や k などの定数を求めたいなら最小二乗法。
ただ、もちろん、その式が j + k x の形になるとか j + k ln(x) の形になる
って当たりがついてるのが前提。
当たりつけるのは、グラフの形眺めて見て主観で決めるか、
いくつかのパターン試して二乗誤差が一番小さい奴を選ぶ。
>>29 ありがとうございます。
「補間」というのは、単にプロットした点を直線で結ぶということでしょうか?
線形補完ならそうだし、
非線形の補完も、2次補完とか、3次とか色々ある。
まあ、
>>28 みたいなのは補間ではないけどね。
フィッティングって言うかな。
33 :
デフォルトの名無しさん:2008/01/10(木) 09:22:17
ある程度実践的な例で、動的計画法を勉強してみたいんですが、よい例題が載ってる
簡単な入門書やサイトってありませんか?
35 :
デフォルトの名無しさん:2008/01/14(月) 21:50:08
(A&&B)||(C&&D)は
(A||C)&&(A||D)&&(B||C)&&(B&&D)に
変形できると聞いたのですが、やりかたがよくわかりません。公式などあったら教えてください。
最後は B||D だよね?
単なる分配法則だが、
ややこしくなるだけなのでやる必要性はない。
分配法則
(a && b) || c = (a || c) && (b || c)
(A||(C&&D))&&(B||(C&&D))
=
((A||C)&&(A||D))&&((B||C)&&(B||D))
=
(A||C)&&(A||D)&&(B||C)&&(B||D)
C系言語だと、||と&&は、
副作用によって結果が変わるかもしれないので注意すべし。
適当なスレが無かったんで、ここでオナガイシマス
Excelでグラフを作成すると、Y軸の補助目盛りが上手い具合に、自動的に
振り分けられるますよね、そのアルゴリズムってどうなってるんだろう?
今、VCでグラフを描画するソフトを書いてるんだけど、そこでちょっと
悩んでるところです、Excelにこだわらず、補助目盛りの振り方の、いいアイデアを
知っていたら教えてホスイ
条件として
負数の値はありません
最大値、最小値は同じ桁の場合もあれば、そうでない場合もあります
グラフのY軸の描画エリアは、グラフの下限値は0ではなく
要素の中の最小値(付近の値)として、最大値は要素の最大値(付近)の値です
この様な条件で、理想的な数式を教えてください
なんかそれは理論があったはず
階級幅の適切な取り方とか
あーうん多分俺が見たのもそんな感じだったと思う
>>44 比較的簡単そうなので、実装できそうです
ありがとう
46 :
デフォルトの名無しさん:2008/01/15(火) 01:27:46
大きさNの配列をヒープ構造に変換する処理の計算時間がオーダーNというのがよくわかりません。
難しい数式なしで、なるべく直観的な説明をしているサイトや本は無いでしょうか?
変換処理はインプレイスでなくてもかまいません。よろしくおねがいします。
47 :
デフォルトの名無しさん:2008/01/15(火) 01:41:44
48 :
デフォルトの名無しさん:2008/01/18(金) 01:04:37
最小二乗法の直線Aでうまく近似できる、n個の点の集合n'があるとします。
最小二乗法の直線Bでうまく近似できる、m個の点の集合m'があるとします。
もしn'とm'が混ざってしまっているとき、直線Aと直線Bを求める方法としては
どのようなものがあるのでしょうか。
また、直線ではなく多項式近似などの場合もできればヒントなどをお願いします。
具体的には、×や§みたいな形に点の分布している場合を想像して
悩みまくり・・・どうすればー。
最初てきとうに二つのグループに分けておいて回帰直線求める
1個の点を選んで他のグループに移した方が適合度上がるなら移す
それをずっとやる
>>48 それ基本的に不可能だよ
クラスタリングすれば綺麗にわかれるとか特殊な場合に求められる
3組以上の可能性は考えなくて良いのだろうか?
点と近傍点k個を繋いだ線分の傾きと切片を新たなxyとして係数空間にマッピングして
山をみるとかかな。ハフ変換の亜種になるのだろうか。
2本の直線を表現する式があれば、それに対して最小2乗法を適用すればいけるんじゃないかな?
a*|x+d|+b*y+c=0
とかさ。
55 :
デフォルトの名無しさん:2008/01/18(金) 10:42:44
何本混じっているか不明だし不可能だろう
2点ずつ1000本とかもできる
まあ課題は2本の直線だから
媒介変数表示で 0〜∞が直線A 負数が直線Bになるような表現が出来れば
いけそうに思えてきた
(ax + by)^2 = (cx + dy)^2
みたいな式が、交差する2直線になるんで、
これをベースに最小二乗法つか使ってみたら?
ああ、2直線の交点が原点でない場合、
(ax + by)^2 = (cx + dy + e)^2 とかね。
60 :
デフォルトの名無しさん:2008/01/18(金) 18:17:50
一般の2次式を取り扱ったほうが簡明
>>60 課題らしいから、2直線以外の結果が得られるのはまずいのでは?
>>61 a, b, c, ... 等で微分。
最小二乗法は、式さえ分かってれば直線に限らずどんな関数でもフィッティングできる。
ああ、そうか x1,y1 って点があったら、その式のxに x1を代入して
yを求めて、複数の答えが出るから、それぞれ (y-y1)^2 出して小さい方を採用すればいいのか
でも、小さい方を採用するって事は非線形だから、解を出すのに
普通の直線みたいに楽に出せないな。
うーん、そうか・・・
任意の関数をフィッティングできるっていっても、
陽関数形(y = f(x) みたいな形)になってないと、単純な方法では出来ないのか。
でも、
f(x, y) = (ax + by)^2 - (cx + dy + e)^2
として、求めたい直線が f(x, y) = 0 だから、
Σ_{i = 1}^N f(x_i, y_i)^2
を最小化するものとして、
これをパラメータ a, b, c, ... で微分したのが 0 って条件で式立たない?
65 :
デフォルトの名無しさん:2008/01/18(金) 18:46:48
yについて解いたおけばいいだろ
あと、この式だと、パラメータ a 〜 e のうち、1つは冗長かな。
f(x, y) = 0 が必要な条件式なんで、全体を a^2 で割って、
f(x, y) = (x + b'y)^2 - (c'x + d'y + e')^2
としていいはずなんで。
>>65 それは無理。
y = ±(ax + b)
みたいな式が出てくるはず。
“2直線”みたいな変な関数を、
1価の陽関数ではあらわせない。
68 :
デフォルトの名無しさん:2008/01/18(金) 18:52:01
yについて解けば2解出る それぞれについて調べる
>>68 それだと最小二乗法的な結果得られないって。
>>68 それについて調べるといっても、サンプル点1点毎に、
どっちが小さいかって関数が必要になるから、結局は数式で解けなくて
数値解として、微分して0の箇所を探す事になる。
つまり、2直線の方程式のまま、誤差の小さい方を選択するのと全く同じ事。
でも、微分ゼロ点は複数あるのが確実だから、ランダムにシャッフルしては前回より小さくなってないか
調べる事になるわけで、コレがホントに最小かどうかってのは難しいだろな。
2式を f(x) g(x) としたときに、距離関数 d(y) を y = f(x) および g(x) において極小値を持つような
4次関数として定義できれば、可能なのかな。
自分には数学的に解く自信がないけど。
72 :
71:2008/01/18(金) 19:56:38
h(x) = (f(x) + g(x))/2 として、
d_n = ∫[0, y_n] (y-f(x_n))(y-g(x_n))(y-h(x_n)) dy
D = Σ d_n
として、Dを最小化する f(x) g(x) を求めればいい気がする。
ただ、最終的に出てくる連立方程式はかなり複雑になりそう。
h(x) の定義も妥当かちょっと迷う。
74 :
71:2008/01/18(金) 22:48:33
>>73 自分には
>>64の式が理解できない。
というか、バグってる気がしてならない。
75 :
デフォルトの名無しさん:2008/01/20(日) 02:19:44
Longest Increasing Subsequence問題をDPで解くってのがさっぱりわかんない。
だれか解説して。
diff も Longest Increasing Subsequence問題というやつなのかな。
以前、予備知識もなしに diff もどきを作ったことがあるけど、最終的にはパート図で
クリティカルパスを求めるアルゴリズムになって、ちょっと意外な感じがした。もっと効率的な
アルゴリズムも在るんだろうけど。
diffをdpを利用して取る論文って調べりゃいくつか出てきそうな希ガス・キセノン・クリプトン
78 :
デフォルトの名無しさん:2008/01/20(日) 21:49:11
N+N/2+N/4+N/8+...+1回の比較処理を行うときの計算時間はO(N)だと聞いたのですが、
kNの係数kはどれくらいの大きさになるのでしょうか?どうやって計算したらいいか教えてください。
N が 2 の累乗のときは
(1) S = N + N/2 + N/4 + N/8 + ... + 4 + 2 + 1
とおくと
(2) 2S = 2N + N + N/2 + N/4 + N/8 + ... + 4 + 2
となる
(2)から(1)をひいて
. 2S - S = 2N - 1
つまり S = 2N となる
80 :
デフォルトの名無しさん:2008/01/20(日) 22:03:08
>>79 どうやったらそんな発想が・・・。limとか使うのかと思いました。
どうもありがとうございます。
。。。Nが2の累乗じゃないときはどうしたらいいでしょうか
>>78 何が知りたいかわからんが、
1+1/2+1/4/+...=、についてなら、
四角形の半分を塗りつぶして、残りの半分を塗りつぶして、残りの…と続ければわかるよね?
82 :
81:2008/01/20(日) 22:04:19
うあ、遅かった。ちゃんとリロードしないとな。
> 四角形の半分を塗りつぶして、残りの半分を塗りつぶして、残りの…と続ければわかるよね?
わからん
84 :
81:2008/01/20(日) 22:27:18
>>83 わかりづらかったかな。
半分ずつってのが、1/2, 1/4, 1/8,..に対応していて、
半分ずつ塗りつぶしていく→最終的に全部塗りつぶされる≒1
ということなんだけど、説明下手でごめんなさい。
>84
SUGEEE
>>84==81
それだといつまでも塗りつぶしが終わらないのでは
2Nの話をしてるんじゃないのか?
離散の世界だから有限で終わる
>>80 79じゃないけど、そういうのは高校数学の「数列の和」とか
そのあたりでやる気がする。
1から100までの数を全部足すと
S = 1 + 2 + .... + 99 + 100
S = 100 + 99 + ... + 2 + 1
2S = 101 + 101 + ... + 101 + 101
2S = 101 x 100 = 10100
S = 5050
では1から101までの数を全部足すといくつですか?
5050 + 101 = 5151
>>91 等比級数の総和とかやらんかった?
1 + r + r^2 + r^3 + ... + r^n を求めるとか。
こんなやつ。
M = 1 + r + r^2 + r^3 + ... + r^n
rM = r + r^2 + r^3 + ... + r^n + r^(n+1)
rM-M = r^(n+1) - 1
∴ M = {r^(n+1) -1} / (r-1)
r=1/2なら解き方も全部そのままなんだけどさ。
まだ習ってないっていうなら、そのうち習う。
文系だとやらんかもしれんけど、そんときは数学の先生に聞いてみるといい。
-100 x -99 x .... x 99 x 100
を求めなさい
>>86 N + N/2 + N/4 + N/8 + ... = N (1 + 1/2 + 1/4 + 1/8 + ...) → 2N
1/2! - 1/3! + 1/4! - 1/5! ....
>>98 わからん。計算方法まとめてあるページ教えて。
連分数?
テイラー展開だろ
e^x = 1 + x + x^2/2! + x^3/3! + x^4/4! + x^5/5! + ...
∴ e^-1 = 1 - 1 + 1/2! - 1/3! + 1/4! - 1/5! + ... = 1/2! - 1/3! + 1/4! - 1/5! ....
べき乗に「^」使う人良く見かけるけど
何でなんだろうね
CだとXORの記号なのに
漏れはx**yの方が好み
google 電卓も ^ がべきだし Excelがそうなってるからだね
数学板とかでは TeX 書式準拠だしね、数式。
^ はベキ。
ASCIIの '^' は、上向き矢印(↑)だったことがあるから
あと、BASICでも^をべき乗に使っているものがある。
**はFORTRAN由来。
POWER(x,y)が好み
>ASCIIの '^' は、上向き矢印(↑)だったことがあるから
ASR33 (TTY) だったっけ?
言語としては APL かな?
ていうか「**」のほうが少数派だよな
FORTRAN やら Ruby やら gnuplot やらは ** だな。
俺は TeX 的に ^ を使う派だが。
112 :
デフォルトの名無しさん:2008/01/21(月) 20:43:47
log(n!)の近似値っていくつでしたっけ?
スターリングの公式
114 :
48:2008/01/24(木) 02:25:40
以前、2本の回帰直線が交差するようなデータを近似しようとして
質問した者です。
当初やろうとしていたサンプルが少ない場合ですと、
>>49の方法が
思っていたより高速でした。時間さえあれば3直線や4直線でも
近似できそうです。ただ、高速化のテクニックが不足しているせいか
サンプル数が増えていくと辛くなってきました。
で、つい先ほどハフ変換の仮実装が完了しました。
資料見ながら6時間もかかりましたが、とりあえず誤差無しの画像データに
うまくフィットする形で直線を表示するところまできました。
画像みたいに点だらけだと楽なのですが、サンプル少ない&誤差が
あるときのデータの誤魔化し方などは考え中です…
ハフ変換は、おそらく統計学での回帰分析や主成分分析、
クラスタリング処理等と何かしら対応関係があるような気がします。
統計学はまだ学習中ですが、なんとか理解していきたいです。
おお
時期的にもしかして卒論?
がんばれ
すげえ
やっぱ技術のある人はすごいな
>>116の上のこのソースって言語何?
C#だろ
あーそうなのか
拡張子知らなかったわ
d
誤差を最小にするんじゃなくて、一致度を最大にするような定義にしたらどうなのかな
Σexp(-(x-Xn)^2) が最大になるというような定義
会社に、プログラミングをさせてくださいとオナガイしたら、基本情報の資格を取ったらね
と言われて、只今勉強中で、自分で問題を作りマスタ、が
Windowsの計算機では小数を表す16進数が表示できないため、答えが合ってるか、どうか分かりません、答えが合ってるかどうか、教えてください、宜しくオナガイシマス算数の得意なエロイヒト
【自分で作った問題です】
7E.3Aを10進数の分数で表したらどうよ
【式と答え】
2進化16進
0111 1010.0011 1010
整数部と小数部に分ける
= ( 2^7 + 2^6 + 2^5 + 2^4 + 2^1 ) + ( 1/8×1 + 1/16×1 + 1/32×1 + 1/128×1 )
128で約分する
= ( 126 × 128 ) + ( 16 + 8 + 4 + 1 ) / 128
= ( 126 × 128 + 29 ) / 128
= 16157 / 128
この解答でどうよ?
>>!23
答えは正しいです。
電卓で0x7E3Aを10進数に変換すれば検算できます。
手計算なら16、256、4096という数を暗記しておいて
16進数から直接10進数に変換するほうが速いです。
7E.3A
= 0x7E3A / 0x100
= (7 * 4096 + 14 * 256 + 3 * 16 + 10) / 256
= 32314 / 256
= 16157 / 128 (約分する場合)
125 :
123:2008/01/26(土) 16:30:29
>>124thxです
凄い!プチ神が、降臨シマスタ
カミングアウトしますが、実は計算がとても苦手なんです
実際試験中に、計算方法(式)が分かっても
途中で計算を間違える人なので物凄くありがたいのですが、一つ質問させてください
7E.3A
= 0x7E3A / 0x100
整数化するために、0x100を乗してますが、どんな場合でも0x100を乗したらいいのでしょうか?
例えば、D7E.3Aの場合
D7E.3A
= D7E3A / 0x100
でいいのでしょうか?
126 :
123:2008/01/26(土) 16:39:00
スマン、訂正です
>>×整数化するために、0x100を乗してますが、どんな場合でも0x100を乗したらいいのでしょうか?
○整数化するために、0x100を除してますが、どんな場合でも0x100を除したらいいのでしょうか?
127 :
123:2008/01/26(土) 16:40:44
スレ汚しごめんなさい、頭のいい人がいるので、興奮して、あわててます
○整数化するために、0x100で除してますが、どんな場合でも0x100で除したらいいのでしょうか?
小数点以下が16進数2桁のときに0x100を使います。
D7E3.A = D7E3A / 0x10
D7E.3A = D7E3.A / 0x10 = D7E3A / 0x100
D7.E3A = D7E.3A / 0x10 = D7E3.A / 0x100 = D7E3A / 0x1000
別に、>124が特段頭がいいわけじゃないから落ち着けよ。あんたが間抜けなだけなんだから。
何も16進数を持ち出すまでもなく、10進数でも筆算のときに同じことをしているんだぞ。
例えば、123.45に6を掛けるときにどうするか考えてみろ。
一旦小数点のことは忘れて12345*6を計算し、その結果に123.45同様右から二桁のところに小数点を書くわけだ。
130 :
123:2008/01/26(土) 17:06:10
>>128 >>129 ありがd、とてもよくわかりました
ここは凄い板ですね、感動シマスタ
色んな参考書や、サイト見てるけど、124氏のような解説は無かった
16進数の小数があってるかどうか分からないって?
適当な数だけ下駄を履かせりゃいいだろ。
132 :
デフォルトの名無しさん:2008/01/26(土) 21:45:15
ラムダ計算の勉強をしたいのですが、いちばんやさしい入門書を紹介してもらえませんか?
133 :
デフォルトの名無しさん:2008/01/27(日) 01:05:27
計算幾何学勉強しようとしてんだけど
普通の幾何学からやらんとダメか?
計算機科学じゃなくて計算幾何学のほうだとすれば
ある程度は幾何学わかってないと自分が何やってるかすら
把握できないんじゃないかと思うけど
>123,>132,>133
お前等にはプログラミングとか向いてないよ。
馬鹿すぎる。
諦めろ。
中学生かも知れないじゃないか
>>136 中学生が会社に「プログラミングをさせてください」ってお願いするのか?
>>135 現代の現場でのプログラミングの主流はライブラリ検索型。
つまり、全てのライブラリが用意されていて、そのライブラリの使い方を調べて組み立てるだけ。
だからこういう質問が出る方が適性があるとも言える。
馬鹿下駄問題かもしれませんが、教えてくださいエロイヒト
逆ポーランド表記法の問題です、式と答えが、あってるかどうか教えてください
【問題】
Y = ( A + B × C ) ÷ ( D - E )
上記の式を、逆ポーランド表記法で表しなさい
【式】
括弧の中から先に
Y = ( ABC×+ ) ÷ ( DE- )
括弧と括弧の割り算
Y = ABC×+DE-÷
最期に=の計算
YABC×+DE-÷=
【答え】
YABC×+DE-÷=
これで合ってますでしょうか?
いつも思うんだが
ポーランド表記法に改めて
「逆」を付ける理由が分からん
記法が逆になってるじゃん。
ポーランド表記法は + 1 2 だから。
----
で、問題のほうだが、
Y= の部分が問題に含まれているのが激しく微妙すぐる。
RPNへの書き換え自体は問題ないが、そのRPNの式に従ってスタック計算機で
計算した場合、計算の最後は
------------ スタックトップ
( A + B × C ) ÷ ( D - E )
------------
Y に元々入っていた値
----------------------------------------- スタックボトム
という状態のスタックに "=" という演算子による演算を適用する、ということになる。
問題の式における Y とか = の意味がそういうものだというのなら問題ないのだが。
145 :
141:2008/01/28(月) 21:50:14
thx>>ALL
後置表記法(逆ポーランド表記法)では、例えば、式 X=(A−B)×C を
XAB−C×=と表現する。
次の式を後置表記法で表現したものはどれか。
X=(A+B)×(C−D÷E)
ア XAB+CDE÷−×=
イ XAB+C−DE÷×=
ウ XAB+EDC÷−×=
エ XBA+CD−E÷×
答え ア
この問題と解答を手掛かりに、練習問題を自分で考え、質問させてもらいましたので
果たして、自分の考え方(式)や答えが正しいのかさっぱり分かりません、
もし、このような問題だった場合、先の解答、考え方は、正しいのでしょうか?
スタックに入る時点では変数として入って
それを読み出すときに文脈によって右辺値または左辺値として
評価されるという言語かもしれないじゃないか
それにそもそも=は比較演算子かもね
147 :
141:2008/01/28(月) 22:37:37
中置記法の式をツリーにして、そのツリーを反時計回り(左優先)、深さ優先で
post-orderトラバースすればRPNに変換できるよ。post-orderというのは、その
ノードを抜ける(親ノードの処理に移る)ときにノードの値の表示を行うという
こと。
149 :
デフォルトの名無しさん:2008/01/29(火) 14:46:33
教えて欲しい問題があります!
データベースに登録した同じ次元のベクトルをコサイン尺度によって類似度を求めたいのですが,
コサイン尺度のプログラムが書けなくて困ってます!
以下がコサイン尺度の数式です.
cos(dj,q)
=(Σ_[i=1, m] dij*qi)/(√(Σ_[i=1, m] dij^2)^(1/2)) * (√(Σ_[i=1, m] qi^2)^(1/2))
※q=検索質問ベクトル,dj=各文書ベクトル
となっています.
また,dj*q はベクトル間の内積を表していて,
dj*q = Σ_[i=1, m] dij*qi
となってます.
少し複雑な計算式ですが,とりあえず書いてみました.
Railsのスレで質問したのですがこのスレの方が良いと言われたので書き込みました.
どなたかRubyになおしてもらえるならお願いします(×_×)
>>149 まず、include Mathする。
でもって、コサインは
cos(t) # Math.cos(t)
平方根は
sqrt(x) # Math.sqrt(x)
一次元ベクトルaの成分和は、
a.inject {|x, y| x + y }
a,bの内積はa.size == b.sizeだとして
a.zip(b).map {|x, y| x * y}.inject { |x, y| x + y }
かな。
>>149 cos(dj,q) = dj・q / |dj||q|
これが計算したいと予想。名前にコサインって入ってるし。
inner(x,y)=xとyの内積、norm(x)=|x|=sqrt( inner(x,x) )とすると
cos(dj,q) = inner(x,y) / { norm(dj) * norm(q) }
152 :
デフォルトの名無しさん:2008/02/11(月) 12:05:23
f(t) = b1*t + b2*t^2 + b3*t^3 + b4*t^4...
tは0〜1の範囲としてf(0)=0 かつ f(1)=1 で この間 増加続ける係数群が欲しいのです
つまり b1=1-(b2+b3+b4...) です。
・ 2次の場合, f(t)=(1-b2)*t + b2*t^2 でb2の範囲は-1〜1
・ 3次の場合も、微分して0,1になる値を求めて場合分けして解けました。
4次以上になると微分結果も3次式になって簡単に解けません。
数学板で聞いたのですが、
>一般には難しい
>というよりきれいな結果が出ないタイプの問題にみえる
という事でした。
でも、こういった問題は既に解かれていると思うのです。
たとえばZ変換/ラプラス変換や周波数特性が凸凹でないという条件と同じですから
ヒント等ございませんでしょうか?
数学板でそういわれたんなら、そうなんだと思うけど。
とりあえず、周波数特性が凸凹でないってのと、
その関数の単調増加性は全然関係ないと思う。
154 :
デフォルトの名無しさん:2008/02/11(月) 12:52:46
f' > 0 なら増加だから
3次関数で、正のものをえらんで積分すればよい
155 :
デフォルトの名無しさん:2008/02/11(月) 12:56:40
(x-a)(x-b)(x-c)(x-d)の形で始めればよい
極値は簡単にわかる
156 :
152:2008/02/11(月) 13:31:13
レスありがとうございます。
>>153 直線位相のFIRの場合 Σ An*cos(n*w) = ΣBn*cos(w)^n というふうに展開すれば
cos(w) は -1〜+1なので、 HPF/LPFなら座標変換すれば
>>152の条件に戻せると思います
>>154 3次関数で全区間プラスの係数群を求めればいいという事ですね
でも結局3次方程式を解いて、係数の方向を見ていかないといけないですね
>>155 なるほど、それだと係数は複素数になるので
2次式の積の形に分解して解けばよいわけですね。
結局次数におうじて場合分けしてゆくしかないとしても、これなら解けそうに思えてきました。
ヒントありがとうございました。
157 :
デフォルトの名無しさん:2008/02/11(月) 14:37:08
1次式と2次式の0〜1の範囲の正負が判明すれば何次でも判明する
1次式で、条件を満たすのは f(x) = x のみ
2次式は f(x)=( (1-a) + a*x)*x のみ
3次式は
( (1-a) + a*x)* ( (1-b) + b*x)*x 【* c +(1-c)* ( ( (1-d) + d*x)*x 】
かな? 【】内が必要かどうか判らない
4次式以上もこの方式で拡張出来る?
159 :
152:2008/02/11(月) 19:06:08
ありがとうございます。 【】の中は必要なようです。
それで拡張してゆきます。
160 :
デフォルトの名無しさん:2008/03/20(木) 17:44:42
来年高校生なのですが、プログラミングを今から始めても遅くないですよね?
Yes
何をするのに遅いというのか
ったくいまどきのガキときたら
単位取れなくてもまあいいやって思って情報数学の授業をぼんやり受けてたら掃き出し法もろくに解けなくてワロタ
166 :
デフォルトの名無しさん:2008/08/15(金) 07:11:12
hage
167 :
デフォルトの名無しさん:2008/09/27(土) 17:20:52
オーダーのO(n)とO(nlogn)ってどっちが速いですか?
lognはnが10なら1だからO(n)の方が速いと思ってるのですが、
とあるブログでO(nlogn)の方が速いって言っててわからなくなりました
O(n)が速い
そのブログは嘘
>>168 167の自分の考えは間違っていないですか?
^2 が抜けてたとかそういう落ちか、
オーダーの問題じゃなくて n が小さい時の挙動の話か。
>>170 だいたい自分の理解の仕方は間違っていないということはわかりました
ありがとうございました
どのブログ?
オーダーだから「nが10なら1」というような意味はない...けど、
(底が10の対数、という意味ではないから)
nlognのほうが早い、ってことはないな。
>>174 そうなんですか
てっきり常用対数なのかと思ってました
>>173 やっぱ n が小さい時の挙動じゃん。
アルゴリズムの改良って、
オーダーが小さくなる代わりにオーバーヘッドが大きくなることがよくある。
この場合、
オーダーが小さい → n を大きくしても平気
オーバーヘッドが大きい → n が小さい時は逆に不利
単純に計算するとn<10でn*logn<nになるな
少ない要素数に対して何度も適用する場合においては有利になるとかなんかな?
実例としてはどんなのがあるんだろう
>>177 >このオーダーの計算は n が∞に向かった場合の処理の速さを相対的に表現したものに過ぎません。O(n) と O(nlogn) なら O(nlogn) の方が速いわけです。
この一文に関しては前後の脈絡関係なく単独で判断できると思うんですよ
そうすると間違っているということじゃないんですか?
logの底が10だと思ってる奴って結構いるのかな
日本語に主語は無い
底が省略されてるときの底がeだったり10だったりとややこしいから機雷
そんな意地悪しなくてもw
いやどっちが合ってるって言ったのか確信が持てなくて
まあ『認識』って書いてあるから俺の考えてることで合ってるって意味だと思いますけど
ブログの方が合ってると言うなら『記述』とか書くでしょうから
O(f(n))とO(g(n))があったら
f(n)/g(n)→∞(n→∞)ならg(n)のほうがnの増加に対して効率がいい。
f(n)/g(n)→0(n→∞)ならf(n)のほうがnの増加に対して効率がいい。
アルゴリズムイントロダクション第一巻読め。
やあ今頃来たのかい
アルゴリズムイントロダクション新品で売ってない・・・
抽象度の高いクラスを設計するには数学力を鍛えると良いと聞きました。
数学は抽象の宝庫であると。
集合論が一番の基礎だと思うのですが、抽象度の高いクラス設計に必要な地力をつけるために
数学を学ぶとしたら、集合論からどのような分野にステップアップしていけばよいですか?
クラス設計の本でも読んで、試行錯誤しながら実装しる。
現実世界ではペンキ塗ったりワックスがけしたりして空手が強くなるということはない。
クラス設計に関しては、現状ではやれデザインパターンたどかリファクタリングだの
アスペクト指向やらと試行錯誤といった状態だと思う。
またマシンの性能が確保できる時はいいけども、
組み込みや容量・速度といった制限のかかっている場合は、
クラスを使わないようにすることがベストなんて場合もある。
作業者のスキルが揃わなかったり、昔ながらの人が居たりで、
グローバル変数べったりのコードを書かざる得ない状況だって実務的にはあった。
数学は大学に入る時の能力で後は下がる。
歳を取ったら新しいロジックを頭で追いかけ切れなくなって
結局はパターン的に処理してるだけ時もくる。
ただ何か頑張ろうという意欲は大切だと思うので、
今、目の前の問題に関するところから広げていくくらいでいいのでは思う。
192 :
189:2008/09/30(火) 23:39:17
>>190 試行錯誤はそこそこしてるつもりです。
これまでに自分で設計したクラス数は大小あわせて100〜200くらいでしょうか。
最初に比べればずっとうまくなったと思ってますがやはりまだまだわからないことが多い。
無手勝流では限界があるような気がしてます。
数学を学ぶことで抽象的な発想を得られるのではと思いました。
>>191 目の前の問題に関するところから広げていくのも確かに現実的な方法ですが、
叶うならば体系的な知識を学んで骨太の地力を付けたいと思っています。
>>192 そんな貴方には代数がオヌヌメ。
単に抽象を求めるなら、集合論だけでも相当イカれた領域まで突っ走れるけど、
計算機からは離れていってしまう感が強いので。
The Art of Computer Programmingでも読もうか
ゲーム以外で、数学ってどこで使うの?
待ち行列理論とか
なるべくでいいから質問を質問で返すな
スレが荒れるから
今25なのですが、プログラミングを今から始めても遅くないですよね?
うん
何をいつまでにやるかによるだろ
センスある奴は年いってからでものびるみたいだけど、
このスレでアホな質問してる
>>199は絶望的
>>199 高校の数学が理解できるなら遅くない。
高校の数学が怪しいならやめとけ。
数列とか理解できるか?
>>199 人々の権利を守る為にと
独学で数学とプログラミングを学んで暗号システムを開発したおっちゃんだっている。
気合があれば余裕。
プログラミングは大半の人にとっては何かを実現するための手段だからな。
実現したい情熱さえあれば何とかなるべ。
車や飛行機作るのと違ってあまり高価な設備投資いらないしな。
206 :
デフォルトの名無しさん:2008/10/11(土) 22:29:39
O(ND)アルゴリズムとかO(NP)アルゴリズムとか
>>206 diffの原理を調べれば解かると思うけど、
同じで無い行が 違いのある行 として扱うようにすればいいんじゃないの
210 :
デフォルトの名無しさん:2008/11/15(土) 21:28:45
ほす
物理の話になるんですけど聞いてください
反発係数が1で重さが1の物体aと物体bが衝突した後の速度って
物体aがVb(衝突前の物体bの速度)
物体bがVa(衝突前の物体aの速度)
であってます?
んっ、合ってるだろ
速度が交換する
式変形するとわかるんだけど
どういう理屈なんだろね
>>214 どういう理屈もなにも、止まっている物体に動いている物体がぶつかったときの事を考えれば判るだろ?
衝突したのに止まっている物体が止まったままで動いている物体が動き続けていたら気持ち悪いじゃないか。
斜めにぶつかった場合は・・・
>>216 斜めにぶつかろうと同じことだよ。
相対論的な速度でないのだから、片方の物体と等速度で移動している系から観測すれば
その物体は静止しているのと同じように振舞うのだから。
多分216の言ってる斜めってのは、
○
↓
○
みたいな意味じゃね?
接線に対して垂直になるようにベクトル分解して後は同じじゃねーの?
220 :
デフォルトの名無しさん:2008/11/28(金) 07:42:12
後は同じってなんだよ
テキトーなこというなよ
現在進行形で悩んでる俺に解説キボン
等質量で塑性変形を考慮しなくていいなら、>219で事が足りるだろ。
要は、ビリヤードで言うところのイマジナリボールだ。
保存則考えればわかるべ。
オブジェクト指向を圏論とか型理論、数理論理学を使って説明している本とか論文ってないですかね?
責務とか言われても曖昧でよくわかりません
>>223 クラスの継承関連なら関係づけられそうだけど、オブジェクト指向となるとどうなんだろう?
>>223 与太話でやったことはあるけれど、論文は見たこと無いなあ。
オブジェクト指向 形式化 で検索してみ?
227 :
デフォルトの名無しさん:2008/12/16(火) 20:41:41
すでに正規化してあるベクトルをさらに正規化するとどうなるんでしょうか?
数学的には同じ値になる。
コンピュータ的には数値誤差でちょっとだけ変わる可能性はある・・・のか?
>>228 なりました
マジで感動しました
ありがとうございます
これからは安心して無駄に正規化しまくろうと思います
>>230 どうやって確認したんだ?
全てのベクトルで試したか?
漏れは無いか?
つーか、コンピュータにやらせて感動というのは、この場合はおかしい。
手で計算して感動するべきだ。
もし手で(というか定義見て理解して)納得して感動したというなら謝る。そして偉い! その調子で頑張れ。
IMEで「外積」って単語ないのな
内積はあるのに・・・
もうPCが発売されてから何年経つんだろうか・・・
「外積」を辞書登録する恒例行事はもうやめにしようぜ
>>233 数学・科学用語は軽視されてる感がある。
MS-IME 2007だが外積は出るぞ。もちろん外と積に分かれているなんてことはない。
登録単語を見返しても登録されていない。
>>235 2007ってOfficeに入ってるやつか?
普通のIMEでは外積は単語登録しないとでないんだよ
237 :
デフォルトの名無しさん:2008/12/19(金) 08:03:30
いま、とあるソフトの機能追加で
モデルが数式のときはバンプマップは高さマップを作るだけだったんですが
ポリゴンのときには法線マップが引数から流れてくるんですけどこれ捨てちゃっていいでしょうか?
うち、Microsoft Office IME 2007 だけど、がいせきは外戚しか出ない。
ATOKも
>>238と同様っぽい
数学用語系の辞書作ってる人いないのかな?
>>237 スレ違いだし、他で聞いても情報量少なすぎて多分誰も答えられない
240 :
デフォルトの名無しさん:2008/12/19(金) 11:28:37
数学関係の編集をやっているが
IMEの辞書はとてもそのままじゃ使えない
>>239 ことえりは変換できる。
Mac のうんこ IME と思ってたが、意外とやるなあ。
>>239 ATOK2006以降だと外積変換できた
245 :
デフォルトの名無しさん:2008/12/28(日) 01:56:10
スレタイに合った数学の本教えて。
コンピュータのための数学でも買ってろボユゲ
>>245 ゲームプログラミングのための3Dグラフィックス数学
やっぱこれでしょ
>>245 共立出版 情報数学講座2 「情報代数」 小野寛晰 著
The Art of Computer Programming
TAOCPは数学の本じゃないだろ
251 :
デフォルトの名無しさん:2009/01/24(土) 15:22:06
計算理論ってプログラミングに関係あるの?
うん
述語論理を使って制約を含む仕様を書いたらそれから機械コードを生成するようなコンパイラを作りたい
でそれ使ってwebプログラミングしたい
がんばれ
255 :
デフォルトの名無しさん:2009/01/24(土) 18:42:24
3(6x+4y)-2(x+6y)
256 :
デフォルトの名無しさん:2009/01/26(月) 02:49:35
2次元の回転はsinとcosの2*2の行列だけど、
本には3*3の行列になってますよね。
3列目と3行目にダミーの1と0が入ってたと思いますが、
あれの意味がわかりません。
よろしくお願いたい酢します
>>256 何にも知らないのだったら、まずは同次座標について勉強してみるんだ。
その上で分からないことがあったら、またここへ来ればいい。
>>256 同次座標 アフィン変換で検索するといい
あっふん変換
260 :
デフォルトの名無しさん:2009/01/29(木) 13:53:40
ポリゴンの平行移動などのアニメを作成する際、
エルミート曲線を使用することになりました。
以下の計算式まではたどり着けたのですが、
フレームと値(x座標など)のグラフ上の角度から
m(i)を求める方法がわかりません。
また、この場合の t は
( 現在のフレーム数 / 総フレーム数 )でいいのでしょうか?
p(t) = (2*t3-3*t2+1)p0 + (t3-2*t2+t)m0 + (t3-t2)m1 + (-2*t3+3*t2)p1
m(i) = ( p(i+1)-p(i-1) ) / 2 /* <-前後のフレームの値の差の半分? == tan(角度)*1(フレーム)? */
EXCELで、
A1が1の時は、B6はC1
A1が2の時は、B6はC2
A1が3の時は、B6はC2
B6とC1〜C3をリンクしたい場合、B6の関数はどうすればいいか教えてください。
>>261 どこをどう迷い込んだか知らんが
板違いに気付けよ。
将来ゲームプログラマになりたいんですが、プログラマ的には数学と物理学ってどのくらいまで勉強すればいいんでしょうか?
物理学と数学を勉強しすぎると時間がいくらあっても足りないですよね。
ちなみに大学課程の話です。
>>263 数学はベクトル・行列、物理は運動方程式ぐらいは理解して無いとやばいんじゃね?
「ここまで勉強すれば十分」なんて業界は知らない。
>>263 ゲームプログラマになりたいなら、その手の本がいっぱいあるだろ。
セガの人が書いた本とか新人教育向けの本とか。オーライリとか。
ちなみに今の日本のゲーム業界は、技術的・理論的なところでは欧米に完全に負けている。
どの辺が負けているかを本などから読み取ってみるのはどうかな?
大学課程では、ゲームプログラムとは離れて、所属した研究室での最先端をしっかりと見につければ良いと思う。
解析力学頑張れ
三角関数と線形代数は必須
実践的に理解している必要がある
>>263 リアルタイムな3Dゲームに関しては、
微積 線形代数 計算量とアルゴリズム 近似と誤差
物理は別に要らんが、微小時間と差分に関する概念はきちんと抑えておくこと。
あと自分で調べられないとどんな職業でもやってけない。
270 :
デフォルトの名無しさん:2009/02/02(月) 16:17:51
居住地 人数
東京都 16
大阪府 26
新潟県 1
富山県 2
京都府 2
神奈川県 1
山梨県 2
上記から、「同じ都道府県同士でバッティングさせない」という条件下で
2人1組のペアを作るとします。
その場合に、
どうしても余ってしまって同じ都道府県同士で組まざるを得ないのは
何人いるか、を求めたいのですが、
その場合どういう計算式が考えられますでしょうか。
26 - (16 + 1 + 2 + 2 + 1 + 2) = 2
最も大きな人数のグループ二つを選びペアを一組作る。
ペアを作ったら人数を更新する。人数が0になったグループは消す。
グループが一つ以下になるまでこれを繰り返す。
残ったグループの人数が答え
人数が奇数のときは最初に例外を投げ…いや、なんでもない。
男女男男女男女
275 :
デフォルトの名無しさん:2009/02/03(火) 03:00:15
ゲームプログラマって自分が作ってる部分がゲームのどの部分だかわかってるの?
その前に、ゲームプログラマってそのゲームのストーリーは知らされているものなの?
スレ違い
オブジェクトにオブジェクトをぶつけてはじき飛ばすというプログラムを作ろうと思って、
いろんな講座を見てみたけど、こんな簡単なプログラムでも数学・物理の知識がいりますね。
高校中退でそのまま文系大学受けたから、ぜんぜん手が出ない・・・
計算式は高校物理で習うけど
計算力は中学数学レベルで十分
衝突判定はあなたが思っているよりもずっと高度。決して簡単ではない。
オブジェクトが球だけってならともかく
数学・物理の知識だけじゃまず間違いなくあなたの望むスピードじゃ動作しない。
そうか?判定用のピクセル・テクセル座標をどう採るかだけだろ
281 :
デフォルトの名無しさん:2009/02/03(火) 06:59:21
何の話だ
282 :
デフォルトの名無しさん:2009/02/03(火) 08:26:45
まあ自前で効率的に書こうとしたら初心者じゃ無理だわな。
物理的な衝突と、
単に衝突したかどうかを検出するのは
難易度段違い
運動ベクトルをお互いに引き算してマイナスが出たら質量に足して補正するじゃ駄目なの?
285 :
デフォルトの名無しさん:2009/02/03(火) 10:26:38
Haskellなら、プログラミングと数学の両方をいっぺんに学習出来るぞ!!
「計算」の意味についての理解が飛躍的に上がるのは確か。
球ならそんなには難しくはない。
まず、大きさ同じとか、速度同じとか、回転しないとかそういう条件からやってみれば。
昔はこういうところをパソコン雑誌でやっていたものだけどね。
有限要素法っぽいことをやりたいのか、1フレ内でオブジェクトの重なり判定を
やったりしたいのかで話はだいぶ違うけどな。
>>284 球同士なら半径でコリジョン処理出来るけど、
多面体になった途端、衝突パタンが面、辺、頂点と分かれ、衝突位置によって物体が回転したりするわけだ。
内部的には描画に合わせて単位時間で回転移動の処理をすることになるだろうけど、
更に厳密に処理するなら衝突発生時は各物体を衝突の瞬間まで戻して再計算しなきゃならんとか、
球同士ですら移動ベクトルが早すぎれば半径コリジョンだとすり抜ける場合もあるから考慮しないと・・・とか、
考え出すとキリが無い。
しかもそれが2つじゃなくて多数のオブジェクトになったらもう…
宇宙船に弾が当たったかの判定と
積み上げたドラム缶の山が崩れるのでは
厳密さが違いすぎる。
その厳密さの違いは当然で、
自分の実装するゲームに合うように適切に省略を行う必要がある。
弾幕シューティングみたいに、
オブジェクトが遅くて、点対面な衝突判定なら
>>284でいいだろうし、
3次元マップと車の衝突判定とかになると、
かなり厳密な
途中で面倒になった。
うん、まぁわかってるから書かなくていいけどね。
294 :
マイク ◆gZ6OoOjBU6 :2009/02/05(木) 07:27:45
計算機科学や情報工学やソフトウェア工学と、数学や数学基礎論や物理学を結びつけるこのスレは
かなり有益な部類に属するものだろう。
>>285 チョット興味あるんだけど、お勧めの教材とかある?
興味があるのなら
その位自分で探したら?
チョットは興味あるけどそこまでは無いんだもん
じゃあやめとけ
299 :
デフォルトの名無しさん:2009/02/08(日) 07:36:34
299
300 :
デフォルトの名無しさん:2009/02/08(日) 07:36:55
300
[1] 授業単元:数学
[2] 問題文(含コード&リンク):
1から9までの数字を縦横方向に同じものが並ばないように下記の例のように並べる
並べ方が全部で何通りあるか
少なくとも10の何乗かのオーダーで解答ください
[3] 環境:特になし
[4] 期限: 明日まで
[5] その他の制限:
例
534681297
685293714
948367125
153472869
426538971
261759483
817945632
379126548
792814356
横方向には重複しない9×9の配列をランダムに生成し
それが縦方向に重複しているかどうかを確認するという
プログラムを書く
そしてその結果を集計してモンテカルロ法で確率を計算
それを 9!^9 にかけることで結果を得る
がんばれ
304 :
デフォルトの名無しさん:2009/02/14(土) 19:12:16
PCの本にでてくる回転行列ってなんで右から掛け算するようになってるんだ。
普通は左からだろ。
普通は右からだろ
座標空間にあるものを回転するのではなく
座標そのものを回転するからだよ
307 :
デフォルトの名無しさん:2009/02/14(土) 19:30:13
いや、おれは高校の頃に一次変換があった世代なんだけど、右からかけてるなんて奴
見たことないぞ。
>座標空間にあるものを回転するのではなく 座標そのものを回転するからだよ
それぐらい知ってるって。
(1,0)を(sinx,cosx)に、(0,1)を(sin(x+90),cos(x+90))に基本ベクトルを取り替えることによって
回転を実現させている。
308 :
fushianasan:2009/02/14(土) 19:48:32
h
>>304 右からかけるのと左からかけるのに意味がある。
法線とかの場合、行列が左に来る。
座標と法線って内積をとるわけだけど、その時に、
(x A)・(B n) = x・n
x: 座標ベクトル
A: 座標に関する変換行列
B: 法線に関する変換行列(A の逆行列)
y: 法線
と書けるようにするため。
PS1 の経験から、ハードウェアの都合だと思ってたけど。
SGI の昔の GTE がそうだったとか、そんなんじゃない?
実際回路は簡素になるし。
全ての行列を転置して扱うとも言えるけど。
311 :
デフォルトの名無しさん:2009/02/14(土) 20:01:31
ごめん、いみがわからない。。。
右と左はどっちでもいいんじゃ。
ベクトルを縦にとるか横に取るかじゃないの?
違ったらごめんなさい。
314 :
デフォルトの名無しさん:2009/02/16(月) 16:56:38
315 :
デフォルトの名無しさん:2009/02/16(月) 19:15:48
丸投げっぽくてアレだけどだれか教えてくれない?
余弦をマクローリン展開してるつもりなんだけどどうしても
マイナス方向に誤差がでる。原因は式?
それとも浮動小数点の誤差?
template<class type> type Cos(type n)
{
type r=0,pow=1.0;
unsigned long factorial=1,i=0;
n*=n;
while(i<18)
{
type x,y;
x=pow/factorial;
pow*=n;
factorial*=++i;
factorial*=++i;
y=pow/factorial;
pow*=n;
factorial*=++i;
factorial*=++i;
r+=x-y;
}
return r;
}
>>315 その式だと,マクローリン展開が負の係数で終わってるので
負の方向に誤差が出やすい。
ただ,マクローリン展開が有効な範囲(剰余項が十分小さい範囲)では
たいして問題にはならない程度の誤差のはず.
>>316 なるほどね。ありがとう。
正直展開の停止基準がよく解ってないんだけど、
何を基準にするのがベター?
手を抜くなら、前回の r == 今回の r になった時点でループ終了。
マクローリン展開の定義式から誤算も見積もれるから
必要な精度に応じて何回ループ回すか決めればいいのでは。
あと、ほんとに精度必要なら、
浮動小数点数の性質上、小さい値から足してった方が誤差減る。
++i するんじゃなくて、最初に規定精度分の桁から初めて --i。
同じことだけど、
… + a/1/2/3/4 + b/1/2/3 + c/1/2 + d/1
とするかわりに
( ( ( ( … + a )/4 + b )/3 + c )/2 + d )/1
のようにするとかなー
>>317 打切り誤差と桁落ち誤差のオーダーが合うようにするのが良い,と言われている.
けど,そんなに精度を気にするなら,そもそも double で計算するのがマズイし,
単純なマクローリン展開でやるのも良くない.
double なら 10^{-10} くらいで一致していれば満足したほうが精神衛生上良いよ.
ああ、あと、sin/cos に関して言うと、
sin π/2 - x = cos x とかの変換公式使って、
x の範囲を π/4 以下に収めてから級数展開するのがいい。
322 :
272:2009/02/18(水) 09:21:00
>>271 >>272 レスありがとうございます。
とりあえず
>>270の考え方でプログラム組めました。
さらに
>>270に、「常に余りが最も少なくなるように組み合わせる」
という条件を追加したら、どういう考え方になるでしょうか?
現状では組み合わせ方によって、「余ってしまって同じ都道府県同士で
組まざるを得ない」人数が、2人になったり6人になったり変動します。
>322
なぜ君が272になってんのさ
>>322 272のアルゴリズムには同一条件下で結果が変動する要素は無いと思うけど
ソート順でペアになる県は変わるが、最終的に残るのが
「最も少ない余り」=「同じ都道府県同士で組まざるを得ない」
実装に失敗してるだけじゃね?
>>318-320 ありがとう頑張ってみるよ。
一応、標準ライブラリの様に円を一周しても
きっちり1になるような精度までは欲しかったんだ。
>>325 標準ライブラリで,1周してゼロになるのは
>>321 の言うような実装だから.
(cos(2π) = cos(0) = 1 と計算されている)
これをせず,ただのマクローリン展開だけでやろうとすると,
n 次の項は (2π)^n/n! くらいで,これが 10^{-16} 程度になるには n 〜 40 くらい.
というわけで,テイラー展開する次数が全然足りてないよ.
ふつうのマクローリン展開だと 0 から離れるにつれて誤差が大きくなる。
チェビシェフ多項式による近似なら誤差が均等になるぞ。
l_∩
上の方も、上から近づけるか下から近づけるかで+∞か−∞かの差が出てくるように思うが
∞でまとめちゃっていいのか?
>>330 Si = if, Entonces = then なので,上を認めたら下はどうなる?ということ.
上が数学的に正しいかどうかは別問題.
偽の命題を仮定すると、すべて命題を肯定的に証明することが・・・。
328 で lim の極限がどう約束されてるか分からないので一概に偽の命題とは言えないけどね
limではなくてLIMと大文字で書いてあるから主値をとるんだよ
ほかにもlimではなくてl.i.m.というのもあるから紛らわしい
ネタにマジレスにマジレスカコワルイ
337 :
デフォルトの名無しさん:2009/03/01(日) 21:39:36
n/0 ってどう表現すべきかな?
大抵 n/1に変えてしまうとかn/0=0と変えてしまうとか小手先な
手段をとってるけど数学的に正しい解釈ならどうすべきだろう?
プログラマやめて転職することを勧めます
>>337 数学的には Not A Number にするか例外投げるのがが一番正しい気がする。
ただ、計算機上では精度の問題で、
ものすごい小さな数と0が区別つかないんだから、
ものすごい大きな数と無限大を区別しないって方針も
ある意味正しいと思う。
>>337 何故 n/0 なんてものが現れて,何のために n/0 を表現したいの?
普通はこういうのは出ないようにできるもんだと思うけど.
どうしても表現しなくちゃいけなくて,なおかつ数学的にも
真っ当なものを求めるなら,wheel というものがある.
ただ,それが目的に適うものかどうかは不明.
>>339 なるほどね〜。
>>340 まぁ、滅多に使うことじゃないんだけど直線型の座標が必要になった時((0,1)から(0,1024)へとか)
とかにちょろっとね。ifで分岐するとパイプラインに影響及ぼしそうで式だけで解決できる良さげな
方法はないかなと。
>>341 要するに斉次座標?
斉次座標の場合、実数に±∞相当の元を付け加えた集合と同値とみなせるから、
n/0 は∞扱いでいいと思う。
>>341 直線を表現するならプリュッカー座標でしょ.
実数体上なら∪{∞}ともwheelとも同値.
言語で決まってるというより、IEEE754で決まってる。
浮動小数点が数学かというと微妙だが。スレタイ的に。
まあ、浮動小数点数がそういう挙動するよう定められてるのは、
>>339 が理由だし。
347 :
デフォルトの名無しさん:2009/03/18(水) 10:27:39
光線追跡
とかって何の数学になるんですか?
ライブラリ
もありまつか?
幾何光学、は数学じゃないか。
計算幾何学、も数学じゃないな。
まあ数学では幾何学じゃないかな。
書き忘れた。
ライブラリは、もっと具体的に何をやりたいかによる。
レイトレとかならグラフィック用のライブラリだし、
レンズ設計ならそれ専用のソフトがある。
350 :
347:2009/03/18(水) 11:22:59
thx!
>レンズ設計ならそれ専用のソフトがある。
こちらが知りたいです。
あるレンズ(レンズは設計しませんがパワー計算みたいな)だと、焦点合うだとか、ボケるだとか。
ボケた画って書けるんでしたっけ?グラフィックライブラリで。
レンズ シミュレーション、で検索してみたら?
352 :
347:2009/03/18(水) 11:42:21
ググルワード分かりマスタthx!
シミュレーション結果が殆どで、ソフトウェアライブラリ探すのは大変そうですえね。
もしかしたらグラフィック側かな。
物理レンダラにはレンズ特性もシミュレートしてボケとかも表現されるのもあるけど?
354 :
347:2009/03/18(水) 12:16:05
>物理レンダラにはレンズ特性もシミュレートしてボケとかも表現されるのもある
ちょー興味あります。
重いコンダラ
Maxwell Render
つーかそろそろスレ違いっぽいな。
y = Math.exp( - 0.5 / a) / (Math.sqrt(Math.PI * 2 * a));
これをa=の形にしたいんですが、どうやっても出来ません。。。
y * Math.sqrt(Math.PI * 2) = Math.exp( - 0.5 / a) / Math.sqrt(a);
Math.sqrt(a) * ( - 0.5) * (1/ a) = Math.log(my * Math.sqrt(Math.PI * 2));
こんな感じで変形してるんですが、ここで行き詰まってしまいました。
どなたかヒントだけでもいただけないでしょうか(;´Д`)
>>357 初等関数では表せない。
LambertのW関数を用いれば書ける。
>>359 その方向で調べてみます。
ありがとうございます!
a = ( -.5 / log( y * sqrt( PI * 2 ) ) ) ^ 2
数学よくわかんないけど、これじゃダメポ?
そうかなあ
>>363 もとの式を間違えてるんじゃないかしら.
一応式変形を書いておくと,分母払って
y √(2πa) = exp(-1/2a)
両辺2乗して
2πay^2 = exp(-1/a)
両辺 -a で割って
-2πy^2 = -1/a exp(-1/a)
これを -1/a について解くと
-1/a = W(-2πy^2)
となる.ここで W は x exp(x) の逆関数(LambertのW関数).
LambertのW関数は初等関数で書けないことが知られている.
>>364 やっぱダメか。
wikipediaにソースコードあるしW関数とやらの実装自体は難しくないっぽいね。
ちなみに363は俺じゃないよ。
367 :
デフォルトの名無しさん:2009/04/15(水) 16:54:50
角速度を積分して、角度を得るにはどうすればいいですか?
微分方程式↓のオイラー法がうまくいかない・・
[角速度] = f( 時間, 角度 )
時間で積分すればええんでないのん?
>>367 こっちではオイラー法でうまくいってるよ。
君のプログラムの問題じゃないのかい?
>>368-369 元ソースは、参考書のサンプルプログラムになるので、出せませんが、
微分方程式は、正しくは以下のようになります。
[ 角度の微分, 角速度の微分, 位置の微分, 速度の微分 ] = f( t, 角度, 角速度, 位置, 速度 )
角度は、オイラー角YZYの列ベクトル -> [ オイラ−角Y, オイラー角Z, オイラー角Y]T (ラジアン)
角速度は、角速度Ωの列ベクトル -> [ Ωx, Ωy, Ωz ]T (ラジアン)
これを、数値計算ソフトのソルバ(ode45)で解くと正しく計算されるのですが、
自作のオイラー法のソルバや、googleで探してきた他の人のソルバ(ode1)だと、
発散?してしまいます。
ode45では正しく計算できていることからf()自体に問題はないと思います。
このf()から得た、角度の微分値を積分する計算に誤りがあるのかな?と思いまして。。
積分は以下の通りですが、ラジアンにこんな計算していいんですかね?
次の角度 = 前の角度 + 角度の微分 x delta時間
>>370 ソルバが正しく解くのに自前実装で動かないってのは。
それこそあんたの実装がまずいんでしょ。
そんなもの,ソースコード見ずに答えられるわけが無い。
>>370 どう考えてもお前のバグだろ
ソース出さないならこれ以上質問するだけ無駄、自力でなんとかするか諦めろ
このスレって当たり判定とかってのはスレ違いかな?
ループや分岐をガリガリ書く様なダサいのじゃなく
幾何計算によるスマートな判定法が無いか知りたいんだけど。
Real time Collision Detection嫁
日本語訳版もでてる
邦題:ゲームプログラミングのためのリアルタイム衝突判定
>>376 そもそも完全に間違ってることを疑うのが第一だと思う。
ただ何を疑っても結局情報不足で、あてずっぽうにしかならない。
>>379 おおおぉぉぉ!!
ありがとうございます。
ちょっとできそうな気がしてきました。
うぉおおお!!
それっぽい値出てきましたー
#define FFT_SIZE 128
double ar[FFT_SIZE];
double ai[FFT_SIZE];
double theta;
void setup(){
Serial.begin(9600);
}
void loop(){
for (int i=0; i<FFT_SIZE; i++) {
ar[i] = sin(i);
ai[i] = 0;
}
theta = -8 * atan(1.0) / FFT_SIZE;
fft(FFT_SIZE, theta, ar, ai);
for (int i=0; i<(FFT_SIZE/2); i++) {
Serial.print(ar[i]*ar[i]+ai[i]*ai[i]);
Serial.println("");
}
Serial.println("");
delay(1000);
}
こやつめw
383 :
デフォルトの名無しさん:2009/05/15(金) 09:40:46
re:378
スペアナなら、簡単に作られます。
#define FFT_SIZE 1024
double ar[FFT_SIZE];
double ai[FFT_SIZE];
void スペアナ()
{
//データ準備
ar ← データを入れる
ai ← 全部ゼロ
//計算
double theta = -8 * atan(1.0) / FFT_SIZE;
fft(FFT_SIZE, theta, ar, ai);
//結果
周波数成分(i) = sqrt(ar(i)^2 + ai(i)^2);
位相(i) = atan(ai / ar)
//表示
}
http://www.softist.com/programming/fft/fft.htm
384 :
デフォルトの名無しさん:2009/05/27(水) 16:21:20
連立方程式の反復法による解法で
ガウスザイデル法は、解(Ax = b の x)を持ちまわる為、
前回の解と次回の解を必要とするヤコビ法に比べ、
メモリ効率が良いということですが、
実際に作ってみると、ガウスザイデル法でも
解の収束判定の為、前回の解を保持しておく必要があり
メモリ効率は変わらないように見えます。
何か別によい方法があるのでしょうか?
収束判定値は以下のように作ってます。
e = abs(next_solution - prev_solution).sum() / abs(next_solution).sum();
385 :
384:2009/05/27(水) 16:30:20
アルゴリズムを見直して、前回の解を保持しなくても
よいことがわかりました。
スレ汚しすみません。
もうちょっと考えてから、書き込めばよかった。。
386 :
デフォルトの名無しさん:2009/05/30(土) 14:22:05
Maximaで、以下のような式があったとき
A : [ax,ay,az];
B : [bx,by,bz];
E : ax * bx + ay * by + az * bz;
Eを、A . Bに変形させることは可能でしょうか?
387 :
386:2009/05/30(土) 14:28:20
誤 B : [bx,by,bz];
正 B : transpose( [bx,by,bz] );
>>386 スレ違い。ソフトウェアの使い方は別のところでどうぞ。
389 :
デフォルトの名無しさん:2009/06/21(日) 21:50:52
プログラミングのための線形代数って本読んでる。
しかし、線形代数がどうプログラミングに役立つのかいまだにイメージできない。
誰か力説してくれ
>>389 分野によるとしか言いようがない。
3Dがらみとか数値計算とかやると必要だけど。
springerから出版されるジャーナル
平易に読みこなすための数学の本教えて
>>391 Springer出版のジャーナルなんて山ほどあるし、
全部平易に読みこなすことなんて数学の専門家でも無理。
>>392 じゃあPGが使う範囲のレベルでいいのでなんかないですか?
>>393 プログラマにもいろんなジャンルの人がいるから一概には言えない。
全部をカバーしようとしたらやっぱり無理。
専門分野を指定してくれれば、分かる範囲で答えるよ。
>>394 グラフ理論と
記号論
あと最近の流行の数学ってありますかね?
けんろん
圏論やるのに、必要な前提知識って何でしょう?
公理的集合論とかかなぁ<圏論やる前に必要な知識。
1=真 0=偽
>>395 グラフ理論だったらディーステル:グラフ理論が全般的な基礎知識で,
アルゴリズムはSchrijver:Combintorial Optimizationの該当章を読めばほぼOK.
最近流行のグラフマイナーに関してはまだ良い教科書が無いので
Robertson-Seymour-Thomasの論文にいくらか目を通せば十分.
圏論はAsperti-LongoのCategories Types and Structuresを読めば
プログラマだったら大体大丈夫.著者ページから全文落とせるのも高評価.
Excercisesでたまに代数・幾何の知識が必要になるけど飛ばしてよい.
突っ込んだことをやるならマックレーン:圏論の基礎を読むことになるけど,
こっちは代数・幾何の知識が無いと楽しめない.
記号論は知らない.ググったら言語学とか出てきたけど?
記号論理、のtypoじゃないかな、記号論は。
>>401 ところで数学って自習したとき
何がわかると理解できたことになるの?
プログラムはかけなきゃクズだろで済むけど
無知の知
何がわからないかってことがわかっただけでも儲けもの
理解できた!!なんて思うことすら驕りだと思う
現実的問題としては演習問題がさっと解けるぐらいなら次に進んでもいい
それなりのレベルの数学の本で演習がさっと解けるってかなりの力量だと思う。
大体本文で書けなかったものを演習にまわしているという事情があるし。
じゃ、わからなくても何がわからないのかがわかってれば進んでおkで
>>403 ・問題が解けること
・定義や定理のステートメントがすらすら言えること
・定理の証明の大筋と、核心部の詳細が言えること
しかし自分の誤りに全く気づかないことも往々にしてあるから、
できればいずれも高段者に判定してもらうことが望ましい。
http://www5.airnet.ne.jp/tomy/cpro/sslib8.htm この fft1 関数の ar[] に for (i=0; i<n;i++) ar[i]=20 * sin(2*PI*i/n) な配列を、ai[] には全てゼロを入れたとき、
関数実行後には ar[1] には 20 が、それ以外の ar[?] と ai[] には全て 0 が入っている事を期待していたのですが、
ar[1] には万単位の数値が入ってしまいます。
なぜ20にならないのでしょう? そもそも関数の機能を思い違えてる?
呼び出し例 (flag : 0 fft, 1 : inverse-fft) と書いてあるが多分逆、逆変換の時に後処理が不要なはず
cosの係数の半分の値が実数成分、同様にsinが虚数成分だから、周期ずらしてないsinじゃarは空だと思うが?
で、ai[1]に入るべき値は10、後はほぼ0で埋まると思われ
.....え!
このFFTフラグ逆なんですか???
てことは、波形からsin, cos成分を得たいときは flag = 1 にするってことですよね
412 :
デフォルトの名無しさん:2009/09/17(木) 22:53:30
ああ、そうか
中坊はここに来るべきではないんだ
413 :
デフォルトの名無しさん:2009/10/12(月) 16:24:13
離散数学は必須
Excel にBETADIST 関数という累積β確立密度関数というものがあるのですが
ttp://excel.onushi.com/function/betadist.htm x AからBの範囲で評価する瞬間を指定
α 確立分布に対するパラメーターを指定
β 確立分布に対するパラメーターを指定
A xの区間の下限を指定。省略可能
B xの区間の上限を指定。省略可能
これらのパラメータを求める公式及び、それらによって得られるBETADIST 関数の数式を教えてもらえないでしょうか。
415 :
デフォルトの名無しさん:2009/12/08(火) 20:24:05
あげ
417 :
デフォルトの名無しさん:2009/12/17(木) 21:21:03
log2( 1 ) + log2( 2 ) + ... + log2( n );
double getSum( int n )
{
double sum = 0;
for (int i=1; i<=n; i++) {
sum += log2( i );
}
return sum;
}
こんな計算をしたいのですが
速くする方法とかってないでしょうか?
積分で近似値を得るという選択肢もあるのですが…
暇な時に計算して配列に格納しておく
メモリがバカにならないなら一定の間隔おきにとったnに対してでもいい
一定のっていうのは語弊があったな
nの出現頻度などに応じてもっとも効率的な間隔で
俺初心者だけど、
対数関数→加算→対数関数→加算→…
より
乗算→乗算→…→乗算→対数関数→加算→乗算→乗算→…乗算→対数関数→加算→…
の方が対数関数使用回数が減るため速くなるんじゃないかな? かな?
log2(x)+log2(x+1)+…+log2(x+k-1)
=log2(x*(x+1)*…*(x+k-1))
みたいな感じ。
log2(1 * 2 * ... * n) を計算するほうがきっと早いよな。
>>420 確実にその方が早いと思う。
精度の問題出そうな気もするけど。
やってみた。
精度的には平気だけど、double だと n =172 でオーバーフローするな。
てか、n = 10万でも、 sum += log2(i) 方式の実行時間、0.1 秒かからないんだけど。
何を早くする必要あるの?
>>417 nが非常に大きいなら、
getSum(n) = (n+1/2)*log2(n) + 1/2*log2(2*PI)+log(2)
>>425 0.1秒ってけっこうな時間だぞ
何のための処理かにもよるけど
動画なら確実に駒落ちとか音飛び
キー入力ならもたつきとか取りこぼし
偶数は因数分解すりゃ n / 2 + log2(n / 2) だから、
int n2 = n / 2;
return n2 + getSum(n2) + getSumOfOdd(n);
みたいなコード書いてみたけど、普通にやるのと大差なかった。
てか、並列処理とか入れてみたら普通にやった方が速くなった。
1行目変だな。
偶数の log2 の和は、n / 2 + getSum(n / 2)
>>421ってlgamma(n) / log(2)で計算できるよね?
log2があるんだったらlgammaもあるはず。
でもこっちのほうが遅いかな?
>>430 lgamma(n) / log(2) も今ちょっと試してみた。
けた違いに(3ケタくらい)早いけど、精度4〜6ケタくらいしか出ない。
使ったライブラリが精度低いだけかもしれないけども。
>>430 lgammaなんてあるのか…しらんかった。
ごめんlgamma(n + 1) / log(2)だったね。
話は変わるけど単純にfrexp使ってみたやつ。417より少しは速いけど、lgammaには到底かなわない。
double getSum3(int n)
{
double m = 1.;
int sum = 0;
for (int i = 1; i <= n; ++i)
{
int e;
m *= frexp((double)i, &e);
sum += e;
if (m <= 1e-300)
{
int f;
m = frexp(m, &f);
sum += f;
}
}
return sum + log2(m);
}
435 :
417:2009/12/18(金) 13:44:21
>>417です。
レスが意外と多くて驚きでした。
>>418,419
nが小さくてかつ何度も呼ばれるならそれが良さそうですね。
>>420 32個ずつまとめて計算したところ20倍近く高速化しました。
>>421 まさにその通りです。
>>425 これを数万の配列に対して実行するのです。
>>426 最初何のことか分かりませんでした。
いろいろ調べてから意味が分かりました。
>>430 lgammaというのを知りませんでした。
続きます
436 :
417:2009/12/18(金) 13:48:45
いろいろ調べたところ
スターリングの近似公式
n! = √2π * n^( n + 1/2 ) * e^( -1 )
というものをwikipediaで発見したため
実装してみたところ十分な精度が得られました。
log2( 1 ) + log2( 2 ) + ... + log2( n )
= log2( 1 * 2 * ... * n )
= log2( n! )
= log2( √2π * n^( n + 1/2 ) * e^( -1 ) )
= log2( √2π ) + ( n + 1/2 )log2( n ) - n * log2( e )
double getSumApprox( unsigned n )
{
const double PI = 3.141592653589793238462643383279;
const double E = 2.718281828459045235360287471352;
double s1 = log2( sqrt( 2 * PI ) );
double s2 = ( n + 0.5 ) * log2( n );
double s3 = ( -1. * n ) * log2( E );
return s1 + s2 + s3;
}
>>426さんの方法がこれだったんですね。
みなさんありがとうございました。
437 :
417:2009/12/18(金) 17:48:16
見直してみたら一部書き間違えてました。
e^(-1)でなくてe^(-n)です。
関数の方は合ってます。
n! = √2π * n^( n + 1/2 ) * e^( -n )
log2( 1 ) + log2( 2 ) + ... + log2( n )
= log2( 1 * 2 * ... * n )
= log2( n! )
= log2( √2π * n^( n + 1/2 ) * e^( -n ) )
= log2( √2π ) + ( n + 1/2 ) * log2( n ) - n * log2( e )
トランプの数字1-13を全部足すと91
4スーツあるので91x4=364
jokerを足して365または366
これは一年の日数を表している
誤爆か。
440 :
デフォルトの名無しさん:2010/03/23(火) 23:09:52
age
>>436 s1やlog2(e)を定数にしたらもそっと早くなった。
--
static double getSumApprox(unsigned n)
{
const double s1 = 1.3257480647361592485;
double dn = (double) n;
double s2 = (dn + 0.5) * log2(dn);
double s3 = -dn * M_LOG2E;
return s1 + s2 + s3;
}
--
これでlog()の呼び出しはlog2()内部の一回だけだ。
正式な職業プログラマじゃないのですが、(土日プログラマ、どちらかと言うと文系)
手元にある論文に載っている数式を実際に実行したい。
実際の数式(limとか、dtとか、ロシア文字みたいな謎の記号)とプログラム言語での対応表みたいな本とか無いでしょうか?
私はあまり数学が得意ではないのですが、Cとawk,簡単なperlの文法はわかります。
一応、数式の記号の意味さえわかれば、そこからは自分でもなんとかなるのですが
limとかdtとかプログラミングで使うには
Mathematicaが必要だぞ・・・
>>442 やりたい事はmaximaで出来ない?
http://maxima.sourceforge.net/ 無限が絡む操作は普通のプログラミング言語だと表現出来ないから
擬似的な処理になると思うけど。
それでいいってんなら、数値計算に関する本とかには色々書いてあると思うよ。
大抵はCで書かれてると思うけど、アルゴリズムの参考にはなるんでないの。
445 :
デフォルトの名無しさん:2010/04/24(土) 17:59:25
機能してるスレをやっとみつけた・・・・
ビリヤードのような玉の衝突処理についてここで相談してもいいですかね?
ok
448 :
445:2010/04/24(土) 18:09:02
http://hakuhin.jp/as/collide.html#COLLIDE_00 ここの「円同士の衝突を計算する」サンプルをなるべく原型をとどめたままC#に移植して
一応それっぽく動いてるんですが動作テストをしてると時々変は挙動をします。
(落下ベクトルが入ってる方を改造してます。落下ベクトルが無い方は開けませんでしたorz)
分かってる挙動
・初期のランダムにおいてベクトルがxyともに0,0の場合単なる障害物化する
・移動してる玉が特定条件?でぶつかった際はベクトルの合成がおかしいのか変な方向へ移動する。
18歳未満はお断りです
どうせ浮動小数点数の計算誤差しらずにプログラム書いちゃってるんだろう
451 :
445:2010/04/24(土) 18:14:44
移動関連はすべてdoubleでやってます
初期のランダムだけintで決定してますが
>・初期のランダムにおいてベクトルがxyともに0,0の場合単なる障害物化する
これが起きるということは移植したロジックだと手玉以外は静止している
ビリヤードを作ることができないということになるのですがどの辺をいじればいいのかよくわからなかったので・・・
452 :
445:2010/04/24(土) 18:18:32
453 :
445:2010/04/24(土) 18:29:09
FPSを変える場合はProgram.csの下記行の分母の数字をいじってください。
float wait = 1000f / 10f;
で、どうしてほしいの?
1.丸投げでバグを取ってください
2.手取り足取り教えてください
3.ヒントだけでもお願いします
>>445 衝突って双方の関係を制御するはずなのに 初期速度が0の場合障害物化するってのはどこか間違ってる
質量が勘案されていないかエネルギーが交換されていないかどっちかじゃないの?
#コードは読んでないのでその点を具体的に詩的はできないのがカナシイ
>>454 3でお願いします。
>>455 ウインドウの中を左クリックすると玉の初期化を行うので
なんどかトライしていただくと障害物化する玉がかなりの再現度で現れると思います。
何も見てないけど、綺麗な方向を向いた時に障害物化するというのは
多体でものを考えない近似を行った結果、
色んな力が釣り合っちゃってんじゃないかな
460 :
442:2010/04/24(土) 23:36:47
>>444 えっと、あの、なんというか凄い本格的なソフトです。ありがとうございます。
その、自分で個人的に使うスクリプトもどきに組み込みたかったのですが、
なんか学術用語?みたいな(少なくても私は習ったかもしれないけど忘れた)数式の記号の意味が不明だったもので、
例として(記号は意味を知っているやつだけど)、Mを横倒しにした
Σn,m f()
は
for(i=n,i<=m,i++){ ans+=f() }; に対応している、みたいな感じで、
学の無い人間にもわかる数式の読み方の解説の資料とか紹介して頂けるとたすかるのですが……無理でしょうか?
>>460 >数式の読み方の解説の資料
それには数学の本が適切なんじゃないの?
あとその分野のwikipediaとか
ギリシャ文字あたりが読めれば読み方は大抵大丈夫だと思うけど。
計算のアルゴリズムが実装してみたいってんなら、一応
Numerical Recipes In C
っつー本がある
http://www.amazon.co.jp/dp/4874085601 何がやりたいのか、今一よく分からないんだが、これでいいか?
>>460 >例として(記号は意味を知っているやつだけど)、Mを横倒しにした
>Σn,m f()
>は
>for(i=n,i<=m,i++){ ans+=f() }; に対応している、みたいな感じで、
>学の無い人間にもわかる数式の読み方の解説の資料とか紹介して頂けるとたすかるのですが……無理でしょうか?
それ対応してる訳じゃないから
っつーか中学生かおまえは
高校数学を先生から教えてもらいなさい。
>>460 貴方の悩みは、
プログラミングの知識とは無関係。
簡単な奴でいいから高校数学の参考書でもざっと眺めれば解決する問題。
Numerical Recipes in C でも読んどけ
別に炎上しているようには見えないが。
炎上させたいってことじゃね。
まあ、良く見かける勘違いだよな。
「1/10が2進数だと無限小数になる」ってのを拡大解釈してくとこうなるんだろう…。
10進のCPUが出来ても
1/3は解決しないのに
馬鹿じゃね?
有理数演算を実装すればいいんじゃね
無理数があるから、最終的には記号処理をやる羽目になるな。
Mathematica最強ということで
マスターマインドというゲームがあります
4つの中身が不明な箱と
そのなかに4色のボールが入っていて
(同じ色は何度でも使えます)
中身を知らない方の人が4つ箱に入っているボールの色を予想して
中身を知っている方の人が
1.色だけがあっている数
2.色と場所があっている数
を教えます(ウソはつかないものとします)
正解を出すのに最低何回質問をすればよいでしょうか?
宿題は自分でやりましょう
最低回数は1回だろ。
最も賢明に予想を繰り返した場合の最悪の試行数を知りたい
んではないだろうか。
最近打ち合わせでは分かり切ったことは飛ばして話を進めているのに
知識として持っててあたりまえのことを質問する馬鹿が増えた
数学ではそれは認められないんだな
問題文には曖昧さが混入してはいけない
> 知識として持っててあたりまえのこと
って具体的にどの程度のことを指してるんだか。義務教育程度?大学の学部卒程度?
>>473 ちなみに途中で矛盾が出てくるなどして
相手がウソを吐いていることが分かったときは
そのまま続行?それとも一旦リセット?
>>473 1.色だけがあっている数
2.色と場所があっている数
中身を知っている方が全て赤だったとして
その場合、中身を知らない方が赤1つ指定した場合は、何て答えるの?
同様に、赤2つ指定した場合は、何て答えるの?
基本的には一度に4つの色を指定しますので
そのうちの一つが赤(最初の文)または二つが赤(後の文)
だったと仮定して回答します
中身を知っている方が全て赤だったとして
中身を知らない方が赤1つ指定した場合は
1.色だけがあっている数 = 0
2.色と場所があっている数 = 1
赤2つ指定した場合は、
1.色だけがあっている数 = 0
2.色と場所があっている数 = 2
でいいとおもいます
484 :
442:2010/04/25(日) 23:32:56
わかり辛くてごめんなさい、その、私は数学に疎いので、
(凄く大雑把に言えば)一般的な数式を見せられても意味がわからないんです orz
逆に、Cコードとかの方が判りやすいぐらいで。
それで、最近凄く面白そうな計算式があったのですが、 pseudocodeではなくて、一般的な学校の教科で使われる
数式みたいなので書かれていまして、それで使われている記号が意味不明で、wikiとか読んだんですが
当然プログラミング言語なんかでは書かれていないので、もう意味不明で。
要約すると、"一般的な数式をプログラム言語で解説して欲しい"と、いうアホな質問なんです。
できればこの後も自分で調べることができるように、本とか、なんか纏まった資料だと助かるのですが…
あと、本を紹介して頂きありがとうございます。ただ、あまり初心者に勧める本には見えないのですが…
(numerical Recipies in C)の評判が海外では(大まかに和訳したかんじでは)
>入門書としてはお勧め出来ない、特にチャプター14付近の間違いが最新版でも訂正されていない。
>読んだ初心者が、わかったつもりになるが、実際は間違った方向に理解させている
>グラフに表示されてる数字は本に書かれたコードによるものではない
>コードだけならGNU Scientific Libraryをつかえ
と
まあNRiCはバグも多いしな
しかし、数学に疎いと言われても、
数学をそのままプログラムに落とせるようなものはそうそうないぞ
>>484 なおさら高校数学の本を読んだ方がいいと思うけど…
計算機上では無限操作が必要な計算式は代数的機械的(もしくは有限精度)に処理されてるけど、
本来は無限小無限大とかを理解して式を読み解くべきものだと思う。
"一般的な数式をプログラム言語で解説して欲しい"
って言っても、その計算プログラム自体が一般的な数学をベースにしてるものだからなぁ…
数学板に行って質問した方がいいんでないの?
俺のおすすめは高校黄チャートIA・2・Bの例題全解き
489 :
442:2010/04/26(月) 00:19:59
わかりました。その、色々とお世話になりました。数学板で聞いてみます。
数式を完璧に理解したいわけではないんです(元々どんな処理がされているのか理解できないので)
高校のころは、単に文字列として、たとえば、(a+b)^2は a2 + 2ab + b2みたいに、決まった(知っている)形があれは
それを対応する文に文字を動かす、後は電卓のボタンを押して入れて、出てきた答えを書く、みたいなことしか出来なかったので。
>>466 Shiroって人がコメントしていることが全て。10進数に囚われているのは間抜け。
ついでにいえば、10進演算用トランジスタなんてものを妄想するのは高校物理も判っていない馬鹿。
COBOLとかに10進型があるように、10進の計算が重用される用途はある。
それで全ての問題が解決するかのように思ってるのは変だが。
10進演算用トランジスタは少々マヌケだが、初期のコンピュータには
10進方式のものもいくつかあったよ。かのENIACがそうだし。
キャパシタの容量を使ってアナログ的に10段階の値を表現するレジスタとか、
電話交換機のロータリースイッチを使ったものとか、2 out of 5コードなどによる
ものとか。
494 :
デフォルトの名無しさん:2010/04/26(月) 14:12:59
「数学概論」南部徳盛 著作
近代科学社 刊
(現代数学ゼミナール9)
1989年5月10日初版発行
この本だと、早くコトが出来るよ!
>>491 そら10進数で物考える文化が大半なんだから人間にとって重用されるのは当たり前だろ
それが機械にとって向かないと結論付けられたからこそ淘汰されてるわけだが・・・
考え方自体がおかしいのはまぁ置いとくとして、
自分でどうにかしてやろう、という姿勢が全く見られないのが気に入らない
まあ表示処理を作るのには便利ではあるだろうな
497 :
デフォルトの名無しさん:2010/04/27(火) 09:23:50
スレ違いだが・・・。
この宇宙で、もっとも効率がいいのは実は、3進法。
自然対数で扱われる、オイラー数、e=2.71828・・・
この値に最も近い「3」がよろしい。
スレ違いだが・・・。
この宇宙で、もっとも効率がいいのは実は、e進法
それってn個の状態を表現するのにn個の素子を使う(10進数なら10個)場合だよね。
実際の計算機は1つの素子(セル?)で hi と low の2値を表現出来るから
また違う気もする。
intelが浮動小数点数の指数部を16進化したら性能が悪くなった話を思い出した…
intel?
IBMじゃないか?
IBMがSystem/360で導入した浮動小数点ハードウェアの話じゃないかと。
502 :
デフォルトの名無しさん:2010/04/27(火) 16:18:20
503 :
デフォルトの名無しさん:2010/04/27(火) 16:21:39
CASL言語が、Uになって、GRの個数倍増・・・。
これじゃあ、ハードウェアのまともな学習できん。
今の時代、ハードでやるかソフトでやるかはそれほど重要じゃない
効率的な値(式でもいいけど)の表現方法やアルゴリズムを発明さえすればハードとソフトの差異に意味は無い
>>502 勘違いしてるようだけど、499 は単に前提条件を確認しただけでしょ。
497, 498 の事はよく数値計算の教科書に書いてあるけど、
「p進数f桁 p^f 個の数値を表現するのに p f 個の素子を使うとした場合」
という条件が書いてあると思う。
506 :
デフォルトの名無しさん:2010/04/27(火) 17:11:23
>>505 そうです。上手に整理してくれて、さんくす!
あの議論での「d進数が効率が良い」って意味は
「基本素子の状態数がdのとき演算回路のサイズが小さくて済む」ってことだから,
基本素子が2状態(hi/low)であることを固定したら
効率に関して全く別の議論が必要になるね.
3でも5でも10でもいいけど、量子化する時点で誤差は絶対無くならないし、
>>466の元記事君の悩みは何ら解決されないんだよなぁ
ビット演算がし辛いから勘弁
3進数の一桁もbitって言うのかな。
ハードの事は分からんけど、論理は真, 偽, and, not で事足りるから
2進でいいかな。
>>510に同意かなー
3進数は10が奇数ってのがきもい。ビットシフト考えるとさらにきもい。
真偽判定は2進数で足りるんだから2進でいいじゃん、と思うんだけど。
3進数だとtritだよ
2もeの直前の数だからそう効率悪いわけじゃないし、
ビット演算もあるし、素子も作りやすいから、
2進数でいいよ
nを表記するのに、n進数を作れば、10と2桁で表現可能だぜ!
n+1進数なら1桁で済むだろう常考
RS232C とかだと 0V 周辺をわざと除外し、HI を正電圧 LOを負電圧で 表現
OV付近は線が繋がってない(NC: ハイインピーダンス) で一応3値取りうるな
なんちゃってRS232Cで負電源に振ってないのはどうするんだ
517 :
デフォルトの名無しさん:2010/04/27(火) 20:44:13
+ 3 4 * + 5 2
それおかしくないか
520 :
デフォルトの名無しさん:2010/04/27(火) 20:56:10
定数でなく、変数で書くこと!
逆ハンガリアン記法
523 :
デフォルトの名無しさん:2010/04/27(火) 21:07:09
アセンブラ言語ってなんだよ!
アセンブラかアセンブリ言語にしてくれ
525 :
デフォルトの名無しさん:2010/04/27(火) 21:11:22
そうか、論理和・論理積・シフト命令・・・
この機会に有機的に学習してくれ。
>>517 別にポーランド記法でも逆ポーランド記法でも構わんが、どうやって無理数を解決する気だよ?
IEEE754みたいにスマートに処理できんのか?
527 :
デフォルトの名無しさん:2010/04/27(火) 21:29:08
括弧を上手に配置すれば、少しは誤差(丸め誤差・桁落ち・情報落ちなど)を、
小さく出来るんだよ。
例
X=A+B+C
の場合、Aに比べて、BやCが小さい場合。(ただし、すべて正の時)
X=A+(B+C)
と書けば、誤差は小さくなる。
式を式として扱えばいい
Mathematicaみたいに
>>442 大分スレが進んでしまったが、数学的記述に対するコード例が知りたいとのことならば、
奥村先生のアルゴリズム事典が良いのではないか。サポートページに行けば、コードサンプルが
ダウンロードできる。書籍中では説明のための断片的コードになっているものもmainメソッド付き
の動かして試せるものになっている。
530 :
デフォルトの名無しさん:2010/04/27(火) 22:18:48
微分積分や線形代数、確率統計・・・。
基礎はきっちりやること。
どんな環境でも、耐えうる力を備え持つこと。
531 :
デフォルトの名無しさん:2010/05/03(月) 09:49:30
天国に行く道と、地獄に行く道・・・このふたつの道があります。
天国に行く道には天使が、地獄に行く道には悪魔が、それぞれ一人ずつ立っています。
天使はウソツキではありませんが、悪魔はウソツキです。
天使・悪魔に、「あなたは天使ですか?」と尋ねれば、ふたりとも、
「はい」と、答えます。
そうして、天使・悪魔とも、外見上は、まったく識別が出来ません。
いま、天国へ行きたいとします。
有名なことですが、質問が、1回だけ許される場合、
「あちらの方に尋ねれば、『この道は天国に行く道です』と、
お答えになりますか」
と訊けば、良いことが、知られています。
そういうのメタ質問って言うんだっけ。
プログラムとどう関係があるのか知らんが。
自然言語処理で質問とメタ質問を分ける処理はあるけど
ちょっとした論理の例題だね。
死んであの世に行くのがケネディ、天使がチャーチル、悪魔がヒトラーという
バージョンもある。あと、ウソを言うかホントのことを言うかわからないスターリンが
3人目として加わる(質問は2回許される)バージョンとか。
>>531 あなたの巣へ連れて行ってください
で充分な訳だが
↑馬鹿
↑馬鹿
537 :
デフォルトの名無しさん:2010/05/03(月) 15:31:13
(´・ω・`) nullpo
(`・ω・´) 月
539 :
デフォルトの名無しさん:2010/05/06(木) 04:05:58
(´・ω・`) 五月病の季節
540 :
デフォルトの名無しさん:2010/05/06(木) 13:08:11
(´・ω・`)お前ら連休は終わってますわよです。
541 :
デフォルトの名無しさん:2010/05/11(火) 22:27:25
(´・ω・`) それにしても ほんわかできる季節になったね。
今日はまださみーよw
543 :
デフォルトの名無しさん:2010/06/28(月) 03:32:24
あげ
544 :
デフォルトの名無しさん:2010/08/09(月) 17:19:53
保守
545 :
デフォルトの名無しさん:2010/12/01(水) 16:46:55
12月あげ
546 :
デフォルトの名無しさん:2010/12/05(日) 17:11:40
3次元上で、任意の単位ベクトルVは単位球の原点からの球面位置を指すと思うのですが
その球面位置Pから半径rの円内(球面上の円)を指すベクトルを計算する方法を教えてください
単位ベクトル位置から任意の半径内で重点的サンプリングをしたいのです
点 (cos r)×V を中心として、
半径 sin r の円を描けばいいんじゃね?
(p - (cos r)×V)^2 = sin^2 r
(p - (cos r)×V)・V = 0
を解けばいいのかな。
>>547 三角関数に半径rを渡す意味が分からないのですが・・・
V×(1,0,0)=A
V×A=B
(B,V,A)を基底とする直交座標系を作って・・・?
>>550 ラジアンは半径じゃなくて単位円の弧の長さじゃないの?
半径1の円(単位円)を考え、ある弧の長さ(例えばθという長さ)に対する中心角をθと
定義する。そして、この角度はrad(ラジアン)という単位で表す。このとき、半径r、
中心角θradに対する弧の長さはrθとなる。
rは直線上の半径だとすると、
A・V > 2 - r^2
を満たすAかなぁ。
rがラジディアンなら
A・V > cos r
けど、球面の上で一様分布になるように発生させるのはめんどくさそう。
間違えた。
A・V > (2 - r^2)/2
>>552 球面上の円っていうと、球面に沿って長さ r 延ばし先の点の集合のこと。
そういう意味で言ってなかったのなら sin r cos r は出てこない。
556 :
デフォルトの名無しさん:2010/12/06(月) 16:44:08
誰か分かる人がくるようにage
球面位置Pから半径r は どの距離なのか?
ベクトルV に直交する長さ? = 球にベクトルVと平行な円筒をぶっさすことを考え、その円筒の径に相当
球面上での経路長?
>>547 のは下段だと思われ
というか厳密にはどちらでもよくて半径rをスケーリングできてベクトルが取得できればいい。
そして円の外周上じゃなくて円の範囲内で重点的サンプリングできないと意味がない。
外周が出来るなら、rを動かして円内でも出来るでしょ。
>>559 じゃあ
>>547を使って擬似コード書いてみろよ。
スカラーとベクトルの外積をどう定義するのか知らんが。
Z軸中心の球面上の円
F(r,θ) = (sin r・cosθ, sin r・sinθ, cos r)
を考えて、こいつをZ(0,0,1)からV(vx,vy,vz)へ回転すればいいんだから
回転軸N = Z×V
回転角φ= arccos(Z・V)
として、クォータニオンで回転すればいいんじゃない。
あとは r = [0, R), θ=[0, 2π) で適当に決めて、何度か試行すれば。
>>561 クウォータニオンって結局回転角と軸持ってるだけだから、
式計算すると結局
>>547 になると思うよ。
媒介変数表示みたいなのが欲しければ、
>>547 を満たす1点 p1 求めて、
x = p1 - (cos r) V
y = v×x (この×は外積)
で基底ベクトル求めて、媒介変数 t に対して
(cos t)x + (sin t) y + (cos r) V
かな。
>>562 仰るとおりなんだけど、
DirectXとかだと、任意軸の回転を一番簡単に使えるのはクォータニオンだったと思うので、
そういう意味でクォータニオンって言った。言葉足らずですんません。
>>563 その方法なら、xはXYZ軸のいずれとの外積から求めてもいけるんじゃない?
直交かつ単位ベクトルならいいんだよね。
っていうかこれが一番簡単な気がしてきた。
知ったかぶりと勘違いしかいなくてやきもきしましたが、ようやく自己解決しました。
ありがとうございました!
そんな浅い論理でよくプログラマーやってるなと思いました。
エンバグしまくりなんだろうな。
>>565 君がいちばん馬鹿だったんじゃないのかな
よくその程度の説明能力でプログラマなんてやってられるね
ここまで説明しないと分らないクセに自己解決とか片腹痛いわ。
微積にでてくるdxってのがよくわからん。
2 = dy/dx のとき x=0,1,2,3,4,5・・・と変化していくと
y = 0,2,4,6,8,10と変化していく。つまりdy/dxは、増加量。
dxは、増加量を求める上での1分とか1月とかいう単位という理解でいいんだろうか。
>>569 そういうこと。
定積分も勉強して、微分が定積分の逆操作だってのが分かれば、
Σf(x)Δx の極限が ∫f(x)dx で、
Δy/Δx の極限が dy/dx だってのが分かるようになる。
じゃあ S = ∫[a,b] f(x) dx って積分の式を売上に当てはめると
1年の売上 = ∫[0,12] 売上(x) 月
1月の売上 = 売上(1) 月
って事になるって事かな。
>>571 dx は具体的な数値じゃなく、微小量、っていう「無限小をとる操作」を概念的に内包してる。
だからすべて lim dx→0 で考える必要があると思う。
∫[a,b] f(x) dx = lim Δ→0 Σ[a,b] f(x)・Δ・x な感じ。
離散だとΔを0に持ってゆく前に値が収束するけど。
ただ、プログラミング的には無限小をとることができないから、
Δ = 極力小さな有限の値 として近似値をとることになる。
この辺は微積をちゃんと学んでから、数値解析の本を読むのをお勧めする。
>>571 その例えで言うと、
最初は 月の売り上げ×月、
それを 日の売り上げ×日、時間あたり売上×時、分あたり・・・
とどんどん間隔を狭めていく感じ。
まだ月とか具体的な幅見えてるうちがΔで、
最終的に無限小になった状態がd。
じゃ数学概念上はdxは対象が何であれ刹那なんだね。了解。
Vector(Δy,Δx) == 単位ベクトル?
576 :
575 :2011/03/28(月) 06:04:02.41
Δx,Δy両方1以上な時点で単位じゃないね。ごめん自己解決。
dxdy の d はデルタ。
差分のこと。
differenceの頭文字dのギリシャ文字がΔだから
差分の意味になっているんだぞ。
>>575 基底ベクトルは単位ベクトルとは限らないよ。
dx とか dy が基底になるベクトル空間もあるけど、
直交座標みたいなのを想像しちゃダメ。
差分なのは解るんだけど、線形代数を応用できたら何か使えそうかなと思ってね。
いや、実際、dxとかdyは基底ベクトルになるよ。
微分形式とか、多様体論とかで調べれば・・・
長さいらないならsinつかって角度と変換できる?
dy=dx*sinθ
θ=arcsin(dy/dx)
θ=0の時dy=0
なんの意味があるか解らんけど
できるけど、dy = dx tanθ として θ = arctan(dy/dx) とするほうが自然かと
この場合θはベクトル(dx, dy)の勾配角
基底同士の角度はそういう求め方しない。
曲率テンソルとかが曲がり具合の指標。
dだけじゃなくてδとか∂とか∇とかもあるからねぇ
数学記号の定義は文脈によって変わるからね。
本質的にはプログラムではなく数学に関する問題かも知れませんが
数列の要素をシャッフルして並び替える処理の効率と質を測りたいです。
効率というのは大雑把に言って計算量です。
質というのは雑把に言ってばらつき加減です。
効率はアルゴリズムのステップ数や変数のアクセス回数などからオーダーを計算できます。
しかし、質はどのように評価したらいいのか、何かアイデアはないでしょうか。
たとえば [0,1,2,3,4,5,6,7,8,9] をシャッフルする場合、
[0,5,1,6,2,7,3,8,4,9] よりも [0,2,9,4,1,8,6,5,7,3] の方がばらけてる感じがします。
なにか指標となるものを計算し、前者より後者の方がシャッフル アルゴリズムとして
質に関して優れていると定量的に言えるようにしたいです。
論文の紹介でもかまいません。
>>587 擬似乱数列 品質、とかでググれば一般的なランダムさについての評価については出てくる。
しかし、その例のような場合、どんな並びであっても 1/10! の可能性のどれか、
であるわけで、ある並びが別の並びより「よりランダムである」と言うのは難しい。
あんたがほしいノイズはホワイトノイズ?
>>590 ホワイトノイズ限定なのかと言われると、違います。
また、ホワイトノイズ自体がほしい分けでもないです。
やりたいことは、色々なシャッフル アルゴリズムを比較検討です。
その上で、どこを改良すればどう変化するかを考えたいです。
(ただの乱数列ではなく、数列のシャッフルなので、
シャッフルの前後で集合としては同一でなければなりません)
例えば数列がホワイトノイズに近いか遠いかを判断する指標があるなら、
それは参考にしたいです。
他にも、例えばパターンが現れない度合い、
パターンが長い度合いなどが測れる指標があるなら、
それも参考にしたいです。
つまり、比較的多くの人間が2つの数列を見比べて
一方が他方よりランダムっぽいと感じる根拠をなんとか数値で示したい。
>>588 >>589 ありがとうございます。
今日は遅いので、明日じっくり調べてみます。
>>591 > (ただの乱数列ではなく、数列のシャッフルなので、
> シャッフルの前後で集合としては同一でなければなりません)
乱数(相当のもの)を使わずにシャッフル出来るか考えてください
> 他にも、例えばパターンが現れない度合い、
> パターンが長い度合いなどが測れる指標があるなら、
> それも参考にしたいです。
乱数生成に使われたアルゴリズムを理解してください
理解できない馬鹿なら統計とって有意差を求めてください
> つまり、比較的多くの人間が2つの数列を見比べて
> 一方が他方よりランダムっぽいと感じる根拠をなんとか数値で示したい。
オカルト板に行ってください
πの各桁の数値の並びはランダムじゃないらしいね
そりゃπの各桁の数値の並びに従ってるからね
> つまり、比較的多くの人間が2つの数列を見比べて
> 一方が他方よりランダムっぽいと感じる根拠をなんとか数値で示したい。
それ自体は興味深いテーマだと思うよ
本格的にやろうと思ったらいろいろ考えることは多いと思うけど
たとえば等差数列との相関係数をとるとかかね
あるいは、文字どおりに、そこそこの人数の人間の被験者を集めて
それを有識者集団として、
乱数で生成した2つの数列に対して
「どっちのほうがランダムっぽいか」を判断させることを多数回行い
それを教師信号として学習させることにより評価関数を作成する
とかいう方法も考えられる
たぶん認知心理学とかのほうでも先行研究があると思う
それか心理系に強い情報学科がある大学とか
心理学は置いておいて、数学的にはコルモゴロフ複雑性の話かな。
これを与える関数は計算可能関数ではないので、あきらめれ。
近似を与える方法としては、圧縮アルゴリズムにかけてサイズを比較する、
なんていう方法があるけど、アルゴリズムによって当然ムラがあるので完全ではない。
乱数精度に依存する事を除けば単なる記憶だよ
まともに教育受けてれば10P10で1/10!なんてのはアホでも分かる話でしょ
それが分からない人、もしくは悪意を持つ人が
思い入れのあるもの、馴染みのあるもの
数式から式へのこじ付けがしやすいものに
法則性を見出そうとしてるだけ
訪問販売や宗教勧誘にご注意を
× 数式から式
○ 数列から式
そーりー
599 :
587:2011/04/02(土) 13:30:57.03
>>588 シャッフル アルゴリズムがいくつか紹介されており、
それらの比較も行われていましたが、処理速度の比較だけのように思いました。
何かの方法でシャッフルの度合いを数値で表し、それで比較する、
ということは書かれていなかったように感じます。
求めているのはアルゴリズムそのものではなく、比較方法の方です。
もし見落としていたらごめんなさい、ご指摘ください。
興味深いアルゴリズムをご紹介頂いたことは感謝してます。
600 :
587:2011/04/02(土) 13:37:06.88
>>592 なにか不快な思いをされてしまったのでしたらごめんなさい。
乱数・擬似乱数を使わずにシャッフルすることはできないと思います。
(正確に言えば、毎回異なるシャッフルはできないと思います)
たとえば数列 [0,1,2,3] から数列 [2,0,1,3] を作ればシャッフルですが、
元の数列を使わずに0以上3以下4要素の乱数列 [3,3,1,0] を作っても、
それは私が比較方法を求めているシャッフルではないよと言いたかっただけなんです。
> 乱数生成に使われたアルゴリズムを理解してください
ご指摘ありがとうございます。
>>589 でもアドバイスを頂きましたが、ご指摘に沿って、
まずは乱数生成のアルゴリズムから勉強してみます。
> オカルト板に行ってください
つまり、人が感じるランダムさというものを、
万人が100%納得するものではないにしても、何らかの方法で数値化することは
数学とか科学などの分野では不可能なのでしょうか。
というか、やろうとしてみた数学者とかいないのでしょうか。
例えば、数列内のランダムな2要素を入れ替える処理を
何回やればどの程度シャッフルされるかということは、
確率とかの言葉をつかって何らかの数値で表現できないのでしょうか。
難しいそうだということは承知してますが、これはオカルトの分野ですか?
わかってないなぁ。
擬似乱数列の「ランダムさ」についてはいくらも指標が提案されていて、それはつまり、
サイコロで得られるような真の乱数と、どれぐらい見分けがつかないか、ということな
わけだ。
で、一方、有限な列、たとえば 1, 2, 3, 4 から 2, 1, 4, 3 を作るには、隣どおしを入れ替える、
という操作が 2 回必要なわけで、それが 1 回でできる 2, 1, 3, 4 よりは 1, 2, 3, 4 から遠い、
と言える。
そういうのはランダムネスじゃなくて、数学的には「距離」と言う。1, 2, 3, 4 からどれだけ
「遠い」か、という指標ということになるわけね。
けど、1, 2, 3, 4 が 1 回ずつ現れるパターンは、そのどれもが、有限個のうちのどれか
ひとつでしかないわけで、どのパターンが「よりランダムに思える」かということは結局、
主観の問題なので、数学ではなく認知心理学という科学の問題となる。
602 :
587:2011/04/02(土) 13:48:42.66
>>595 > 教師信号として学習させることにより評価関数を作成する
評価関数を作る方法のひとつとしてはとても分かりやすいのですが、
アルゴリズムとランダムっぽさ(ばらつき具合)の間の関係が、
いまいち見えてこないように思えます。
たしかに関数は作れますが、ではあるアルゴリズムを
どう改良すればよりランダムっぽくなるか、ということを
その作られた関数を元にして考えることが難しそうです。
せっかくの提案なのに申し訳ないです。
認知心理学の方は調べてみます。
>>596 コルモゴロフ複雑性は聞き慣れない言葉でしたので、調べてみます。
> 近似を与える方法としては、圧縮アルゴリズムにかけてサイズを比較する
ありがとうございます、やってみます。
完全でなくてもいいです、何を以て完全と言えるかも分からないですから。
数値化する方法が複数提案できれば、それらも比較できますので、大変有り難いです。
603 :
587:2011/04/02(土) 13:59:36.77
>>601 とても分かりやすいです。
シャッフル前と後で「2要素を入れ替える処理に換算したら何回必要か」を
数学では距離と言っているのですね。
確かに最終的には主観の問題ではあるのですが、やはり
距離が短すぎるものよりは長いものの方がシャッフルされている感じを受けます。
なのでこれは混ざってる度合いを測る指標の一つとして使えると私は感じます。
色々な数列で実験してみます。
ありがとうございます。
>>603 > シャッフル前と後で「2要素を入れ替える処理に換算したら何回必要か」を
ああ、言い忘れた。
それは「距離」の一例だから。
ウィキペディアの「距離」だとそういう距離についてはちょっとしか触れてなくて、
「距離空間」のほうは専門的過ぎてわけわかんないな。
「ハミング距離」だとか「レーベンシュタイン距離」だとかの記事を見て感覚を
つかんでもらえればいいんだけど...
「人が感じる」は危険じゃないかな。
人の感性はランダム性とは相性悪い。
(無記憶なはずの「運」を、「いい子と続いたからきっと次は悪いことは」とか思いこむのが人間)
そういう主観指標じゃなくて、客観的な指標なら、
乱数生成の研究してる人は必ず調べると思うよ。
周期性が出ちゃってないかとか、偏りが出てないかとかは数値化できる。
606 :
587:2011/04/02(土) 14:53:47.71
ありがとうございます。
>>604 「ハミング距離」と「レーベンシュタイン距離」ですね。
調べてみます。
>>605 なんて言って質問すればいいのか言葉が分からないのですが、
主観的にもある程度は納得いくような客観的指標とでも言えばいいのでしょうか。
でもそういうのは、より難しいのですよね。
まずは、完全に客観的な指標を考えてみます。
乱数生成における「周期性」や「偏り」てすね、調べてみます。
アルゴリズム同士を比較する方法っていうなら、
何度もシャッフルを生成させて、各パターンのヒストグラムをとるしかないんじゃないか?
アルゴリズムがちゃんとしてるなら理論値も出せるだろうし。
その上で入力列の長さNに対しての空間量・時間量を評価すれば、
速度とかの面も評価できる。
ランダムに選んだ2要素を入れ替える、っていうシャッフル方法だと、
ヒストグラムに偏りが出るから不適格って記事をどっかで読んだ気もするし。
あ、空間計算量・時間計算量ね。
フィッシャー・イェーツで理論上十分にランダムだと思うし、性能上の問題もないと思う。
他の方法を比較する理由なんて、手作業でやるシャッフルのシミュレーションぐらいしか
思いつかないんだけど。
ボゴソートして結果が出るのが一番遅い奴がいちば(←違う
611 :
587:2011/04/02(土) 17:56:35.74
>>609 効率のいい優秀なシャッフル アルゴリズムがどうしても今欲しいわけではなくて、
単に比較方法に興味がわいて、いろいろ調べていくうちに面白くなった、それだけの理由です。
あと、アルゴリズムの中に数列の中からある要素をピックアップするという処理が入ってると、
C++ などなら効率いいけど Haskell だと効率悪いから別の方法を探る必要があって、
そうするとばらつき具合にも影響が出てくるのかな、とか色々考えてしまうわけです。
>>611 > あと、アルゴリズムの中に数列の中からある要素をピックアップするという処理が入ってると、
> C++ などなら効率いいけど Haskell だと効率悪いから別の方法を探る必要があって、
なことはないが…
リストを愚直に処理すると遅そうだけど、それって多分C++でもリストを扱うなら一緒の問題じゃないかなぁ。
アレイはHaskellには無いんだっけ?
中高レベルの常識さえ理解できないアホが
まともにHaskellを扱えるとは思えない
まあ確かにな…。
調べたらHaskellにはArrayがちゃんとあるし、最適なアルゴリズムを探す前に、
まずは最適なデータ構造を考えないとだめだなぁ。
アルゴリズムとデータ構造を題材にした本はいろいろあるだろうし読んでみれ。
できればTACPぐらい読めばいいと思うけど、ありゃ高いしな…。
なんか異様に敵視してる奴がいるようだけど、
「人がランダムであるように感じるのはどういうときか」
っていうのはそれなりに広がりのある話題だろ
それは数学でも算数でもなく心理学なんだってば。
>>615 Haskell の Array のランダムアクセスの処理速度は測ってみたのか?
Haskell のアルゴリズムを解説した書籍で、
Array は極力使わないように指導される理由は知ってるか?
モナドも知らんのにHaskell語るのか
620 :
615:2011/04/03(日) 18:56:38.56
>>618 俺はHaskell使ったことないから軽く調べてみただけなので、
あんまり込み入った事情は知らんかった。申し訳ない。
どうやら見当違いのこと言ってしまったようだ。
Haskell の効率の話に詳しいみたいだから、後は任せた。
>>619 圏論も知らずにモナドを語るのか。
>>622 ごめん、コードみてないけれども。
a sin(ωt)+ b cos(ωt) = Csin(ωt + φ) (三角関数の合成)
つまり、周期の等しい sin と cos で、任意の位相にずらすことが可能。
>>623 いや、それは解るんだけど、ある単位時間で指定周波数の出力をとろうとすると、
その周波数の波が単位時間内のどこでsin(0)cos(0)になってるかってのが解らないから近似値が取れないんだ。
だから特定周波数の波の開始地点をどうやって調べてんだろうかなって。
なんか、周波数の周期/(周期あたりの時間/2) 回数分だけ開始位置をずらしながら
フーリエで出力を取り出して、もっとも出力が高くなる地点を求めれば
いい気がするんだけど、それであってんのか解んない。
>>624 >>623 のレスの焼き直しですが、
フーリエ変換で出てくる sin() 成分の振幅を a、cos() の振幅を b として、A = sqrt(a^2 + b^2) である A が求めている値ではありませんか?
626 :
624:2011/04/11(月) 02:12:37.58
具体的な捕捉。
単位時間の長さ = 10
求める周波数 = 1
この条件で、周波数1の開始地点を求めるとすると、
T = 0,1,2,3,4,5,6,7,8,9
と時間があるうち周波数1の開始点は
T = 0,1,2,3,4
のいずれか。0〜4のうちどれかを特定する手っ取り早い方法はどうやるの?って事。
>>625 Aが開始点のずれを考慮してあるならそうです。
開始点を考慮してないなら、さっきリンク載せたコードと同じなんで違うと思います。
離散フーリエ変換って開始点とかと関係ない処理なんじゃないの?
その区間の信号が無限に周期すると仮定して変換するんでしょ。
窓関数通さないとエイリアシングの影響がでかいやね
馬鹿には無理
窓関数って、ローパスフィルターとかか? ラプラス変換で一次結合式にしたの使うんなら 馬鹿の俺でもやったぞ。
窓関数 = Windows API
に決まってんだろ
言わせんな恥ずかしい
本当に恥ずかしい事言った自覚はあるのかね
636 :
デフォルトの名無しさん:2011/04/22(金) 21:02:12.02
アフィン変換についてわかる人いるかな?
アフィン変換の行列 T = (sx, r0, r1, sy, tx, ty) と便宜上書きますね
あるビットマップB(w30,h30)があった場合に、それを変形して表示しようとして
Ta = (2, 0, 0, 2, 100, 100) :100×100の位置に2倍のスケールで表示
という変形をしてから描画した場合、当然描画された画像Baは
x100,y100の位置からw60,h60の大きさで描画されますよね
その画像Baをメモリにキャッシュしたとして、その画像をBcとします。
便宜上Bcの大きさは元の座標系で(0,0)-(160,160)の範囲を保持しているとします。
もちろんこの範囲の中で描画されているのは(100,100)-(160,160)の60x60部分だけです。
今度はまっさらな座標系にBcを変形して描画することにより、原点にBを描画したいと思った場合に
ただ逆行列をかけるだけだとダメなのがわかるかと思います。
Taの逆行列 Ta-1 = (0.5, 0, 0, 0.5, -50, -50) となるけれど、これを単純にBcに適用すると
Bと同じ画像が原点ではなくて(50, 50)の位置に表示されることになります。
ここで必要な行列Tb = (0.5, 0, 0, 0.5, -100, -100)です。
今回はスケールしか使わなかったので暗算でもなんとかなりますが、
回転も加わった場合でも使えるように、TaからTbを自動的に導き出すには
どうすればよいのでしょうか?
アフィン変換
スケーリング行列Scaleと平行移動行列Transは
Scale×Trans の順でかかってるから、
逆行列を作るなら Trans' × Scale' の順に作らないとダメ。
回転行列が噛んだ時も、Transが最後になることを考えないと。
推敲中に書き込んでしまった。
まあ大筋は伝わると思うけど…。
平行移動がついてない単なる線形変換だったら、
書いてくれたように「逆行列」を考えることで逆変換を求めることができるけれど、
今回の例のように平行移動がついている場合はそんなに単純にはいかないよ
線形変換の場合は、2×2の正方行列 T を用いて変換を表すことができるね
点の座標を縦ベクトルであらわすことにして、点 x が点 x' にうつるとすると
x' = Tx ※ 2×2の正方行列 T と、2行の縦ベクトル x との積
とかける。これを x = の形で表すには、Tの逆行列 T~ を使って
x = T~x'
つまり、一次変換 T の逆変換は、T の逆行列 T~であらわされるわけだった
ところが、一般のアフィン変換だと、平行移動の成分がついているので
x' = Tx + b ※ 2×2の正方行列 T と縦ベクトル x の積に、縦ベクトル b をたす
とあらわされる。これを x = の形にすると
x = T~ (x' - b) ※ 行列 T を、縦ベクトル x から縦ベクトル b をひいたものにかける
= T~x' - T~b
となる。
まとめると、2×3行列 (T b) であらわされるアフィン変換の逆変換は、
2×3行列 (T~ T~b) であらわされる。
x' = Tx + b という式の形に立ち戻って、これを x = の形で表そうと考えるのがポイント
ベクトルを1要素増やして(x 1)として、
変換行列は線形変換Aと平行移動bを
A b
O 1
(Oはゼロの並び)にして逆行列を求めるのが分かりやすかった。
あああ、そうだったのか
独学だったのでアフィン変換は3x3行列だと思っていた。
3x3行列Tで変換した座標空間ではT-1を適用するだけで原点に戻るけど
大元の座標系で計算するためには、ベクトルを別計算しないといけなかったんですね!
なるほど心から納得できました。計算式としては639さんの書いてくれた
x = T~x' - T~b
を使えば良さそうですね。ちょっと検算してみます、ありがとうございました!
>>636 アフィン変換は 所詮線形変換式でしかないので
どこからどこまでという領域の情報を捨てた場合、変換結果から捨てた領域情報の復元は無理
初回の投影(ビットマップB から Ba への変換)の際、映像だけだはなく
矩形点(0,0), (w,0) (0,h) (w,h) も変換しておきそれを保持: Oa, Wa, Ha, WHa
Bc 空間上で Oa Wa Ha WHa が示す四辺形(アフィン変換は変換の前後で直線は直線として射影するので平行四辺形になる)
内の座標値 V は Ta-1 変換によって (0,0)-(w,H) の矩形に射影される
あとはこのVをくまなくなめてくだけ
643 :
デフォルトの名無しさん:2011/05/04(水) 21:39:52.05
質問!
ベクトルと複素数の関係ってどうなってるの?
ベクトルが複素数の一種なの?
ベクトルっていうのは、「足し算」「引き算」「係数倍」ができるもののことで
そういうものはなんでもベクトルだよ
複素数も「足し算」「引き算」「係数倍」ができるのでベクトルの一種
ここでは係数っていうのは実数のことでね
複素数空間で考えたとき、複素数は real + i * conj で現わされる。
これは複素数空間を実数軸がx方向、虚数軸がy方向と考えたときの2次元ベクタと捉えることができる。
要は、実数は1次元のベクタと捉えたときのアナロジーになっている。
その辺りは数学ガールのコミック版を読むと判り易いかも。
ここはプログラミングのための数学と算数スレなんだから、
プログラミングに活かそうな
いやね、ベクトルクラスと複素数クラスって実態は同じクラスでいいんじゃね?っておもってさ。
どうしたら綺麗に収まるか気になったのよ。あと行列と複素数の関係も気になるしさ。
648 :
デフォルトの名無しさん:2011/05/04(水) 22:52:38.47
複素数と2次元平面のベクトルを同じ意味で捉えている分野がある。
特に、交流電気理論の分野。この分野の専門家に
「あんた達、ベクトル、ベクトルって言うけども、それって複素平面の話でしょ?」
って言ったら、
「何言ってるの?だからベクトルじゃないの!」という返事が返って来た。
もう、議論しても無駄だと思った(ちなみに、自分は機械物理系)。
>>647 * 演算子の扱いが変わるからねぇ。
データ構造として同じだからといって、代数系として同じわけじゃない。
数学的にいうと、ベクトル、行列と複素数の関係は↓みたいな感じ。
複素数は実数を代数拡大したもの。
代数拡大体は、元の集合のベクトル空間になる。
複素数の掛け算は、複素数に対する線形変換とみなせる。
ベクトル線形変換は行列として表せる(ので、複素数の積も行列で表現できる)。
fftで画像を周波数空間像に変換すると、虚数成分が出てくるから複素数を使う必要がある。
もう、何がなにやらw
そりゃ、フーリエ変換は複素数形で書いた方が式がきれいだし。
>>647 ベクトルクラスと複素数クラスは、インタフェイスか抽象クラスとして提供して、
内部実装を共通化するのが賢いかもしれん。
一応概念的には別のものだから。
>>652 いいと思うんだけど、不勉強でどこまでをベクトルでどこまでを複素数に
すりゃいいかがわからん。外積・内積ならベクトル、テンソルなら複素数
ぐらいの切り分けでいいのだろうか?
>>653 いや、もう、数学わからないなら下手に考えずに、
元の理論がどっちを使ってるかをまんまコピれ。
数学わかってる人は明確に使い分けてるから。
あと、ベクトルとか複素数とかを要する分野は、かなり高いパフォーマンスを求めることが多いんで、
概念的には
>>652 みたいに実装共通化できるとしても、
パフォーマンスチューニングの結果、共通化やめるとか普通にある話。
>>656 最低もLapck程度の性能はほしいわな
LAPACK な
シェーダー言語でベクトル扱えるよな。アレである程度複素数を処理できちゃったりしない?
660 :
デフォルトの名無しさん:2011/05/05(木) 22:28:20.55
>>647 似てる点はあったとしても、俺なら複素数とベクトルは別のクラスにして、
実装も別にする。
ベクトルには3次元(外積の定義がある)、n次元もあるし。
また、複素数を成分とするベクトルもあるし。
複素数をベクトルとして扱うのって、C++ 0xで採用見送られた Concept みたいなの使ってやるべきで、
継承とかで実装を共通化しようってのはいまいちだと思うな。
なんというか、複素数はベクトルである(is-a)というよりは、
複素数ってものを作ってみたら、それはベクトルの条件を満たしていたって感じなので。
>>659 一般論として言えるのは、
複素数を使った演算で、GPU使って早くなるものもあるだろう
ってくらいかな。
ベクトルだからGPU使える/使って早くなるって単純なものじゃない。
GPUの挙動をある程度分かってないとダメかも。
>>653 例えば、3Dの観点から言えば
表現能力はベクトル/行列と複素数(3Dなら四元数だけど)は特に違いはないけど、
ベクトル同士の積と、複素数同士の積が性質が違うから、便利なほうに変換して使ったりはする。
だから大きな違いは積演算の入れ方だと俺は思うよ。
どなたか、これまでの議論をクォータニオン(ハミルトンの例のあれ)に絡めて説明していただけるとありがたい。
>>665 「文脈による」。
クオータニオンも、数論な人がいうクオータニオンと、3Dグラフィックな人がいうクオータニオン、
ものは一緒だけど使い方とか全然違う。
複素数もしかり。
667 :
デフォルトの名無しさん:2011/05/12(木) 00:25:49.47
ここって物理もありなの?
ゴムがびよんびよんする様子を計算したいんだけどあれってどういう構造?
たとえば折れ線をゴムに見立てるとして、折れ線の頂点は隣り合う頂点で相互にベクトルを
向けてるんじゃなかろうかと思う。↓こんな感じで
・ →← ・ →← ・ →← ・ →← ・ →← ・ →← ・ →← ・ →← ・
このゴムを引き伸ばして離した時、伸縮がどうベクトルで実現されていくのかがわからない。
あと伸縮が弾け飛んだゴムの慣性にどう影響すんのかもよくわからん。
>>667 バネならわかる?
伸びているときはバネと一緒で
伸びていないときは束縛力なし
669 :
デフォルトの名無しさん:2011/05/12(木) 01:25:32.61
>>668 こういう感じ?
伸長 0倍
・-・-・-・
伸長 2倍
・ → - ← ・ → - ← ・ → - ← ・
伸ばした分だけベクトルの長さが伸びると。
んー。バネもそうだけど慣性が解らない。
ベクトルの長さが何を基準に0に戻るかってのがどうも解らん。
v -= 適当な定数 * 時間 * 単位化(v)
p += v
でいいんかねぇ。できれば自然な伸縮にしたけど。
>>667 厳密に言うと、まさにそういう「各点が引き合う」を無限に細かくして(極限とって)微分方程式にする。
けど、厳密解計算できないし、近似で、何点か代表点取って計算とかかな。
点と点の間隔が一定距離以下なら力書けず、
一定距離以上なら(基準距離からの差分で)距離に比例して力掛ける。
普通に物理でやった F = ma と F = -kxを使えば求まるんじゃない?
ゴムの単位長さあたりの重さがρ、全長をL, 分割数をN、
ばね定数をk, 重力定数をg、頂点の位置ベクトルをx_i とすれば、
頂点の加速度ベクトルはこんな感じでしょ。
ρL/N a_i = ρL/N g
-k * (x_i - x_i-1) * max(0, |x_i-1 - x_i| - L/N)
-k * (x_i+1 - x_i) * max(0, |x_i+1 - x_i| - L/N)
境界条件
x_0 = (0,0), x_N = (L,0),
a_0 = a_N = (0,0)
「ゼロではない」と「事実上ゼロ」の違いを教えてください
宝くじに当たる確率はどっちだと思う?
板違い
失せろゴミ
3D数学で、親の基本軸でXYZの順に回転させたものとローカル軸で回転させたものの関係式ってありますか?
>>675 そりゃ、親の軸→ローカル軸への変換行列を掛けりゃいいんじゃねーの?
>>676 ありがとうございます
もうちょっと整理してきます。。。失礼しました
678 :
デフォルトの名無しさん:2011/05/27(金) 00:27:34.58
時間と空間の相互変換について何とか学とか体系だった名前ってある?
レイトレで毎回画像生成して表示するときの( 時間 : 空間 )という比率と、
1度レイトレの結果を画像ファイルに落としそれを何度か開いたときの( 時間 : 空間 )の
比率って違う訳じゃん。その辺を数学的に表したいんで気になる。
あと、未来は既に決まっていて、将来入力される値は、時間を引数とした
(数学的)関数として表現可能とかって概念もその学問に入ってりゃなおいいんですが。
時相論理?
未来はすでに決まっていてって、
そりゃ物理学の(なので、物理シミュレーションの)基本だと思うけども。
>>680 未来はすでに決まっていてじゃなくて、
未来はすでに決まっているかのように扱う、がより適してるかもね
FRP の基礎概念だから、FRP 系の論文によく出てくる
>>680 ほぇ〜。じゃあ X x Y x Z x T = S とか4次元の幾何学が成り立っちゃったりしてんの?
4次元ベクトルで過去未来空間を跨いで、幾何図形が構築されてたりすんのかな。
683 :
デフォルトの名無しさん:2011/06/01(水) 16:28:08.81
スプライン補完って、インプットの範囲外だと算出してくれないですよね。
逆に、インプットを多少で良いので延長してくれる補完てあるのでしょうか?
>>683 意味が分からん
例えば3次スプラインは(ゼロ次も含めて)4つの係数を決定すれば、
その曲線の全範囲(無限)の形が決定される
空間内の点Aから点Bまでを補完するためのスプライン曲線を決定したなら、
つまりそのスプライン曲線のための係数を決定したならば、
その範囲の外側だろうと内側だろうとそんな事は全く関係なく、
点Aと点Bを通る無限に長いスプライン曲線の形が決定される
あなたの言い方を使えば、多少どころか、無限に延長してくれる
ちなみに、この性質はスプライン曲線に限らず、
(少なくとも)多項式で表現できる曲線なら全て当てはまる
>>683 何かを想定して書いているならその想定を詳しく。
内挿じゃなくて外挿がしたい、ってことかな?
要するに近似による内挿ってのは、フィットする連続関数 f を求めて、
端点 f(0) から 端点 f(1) まで 0 ≦ t ≦ 1 の範囲で t を変化させて元のデータに
ない値を求めるわけだ。
ということは、f(-0.5) や f(1.5) を計算してやれば、その範囲外の結果も求まるけど、
まともに求まるかどうかはその関数次第。
補外法とも言うが検索してみても難しい解説しかないな……
687 :
683:2011/06/02(木) 12:19:16.10
>>684-
有難うございました。
知りたいことでした、外挿、って言うんですね。
3次スプラインは試しました。けど、変化がちょっと複雑ですね。
2点間をスプラインで補間するという場合、
普通はその間に変曲点がくるから、
2点の外側の変化は単調なはずだが・・・
ツギャッ!ツギャッ!ツギャッ!
まず補 "完" じゃなくて、補 "間"。
間を補うから補間であり、外なら補外。
検索したら色々でるんじゃ?
まあ、「外挿補間」っていうけどね、外でも。
誤用だけどね
てst
なんだよ、そう言うから身構えちまったじゃねぇか。
順序も何も、見たまんまだよ。
左上から右下に対角線引いてみ。
というか聞きたいのは発想の原点かな。
何かしら知ってりゃ簡単じゃん。
でも発想ってのは多分個々人に違うと思うんで。
俺はこの辺から思いついたってのを教えておくれよ、
例えば、俺は線の形なんか見ずにトポロジーで攻めたぜぇとかね。
(今回の問題は、図の条件と位相自体は見ないと解けないと思うけど)
モンテカルロとか
>>697 日本で出て来る図形の問題のほとんどは補助線どこかに引けば解ける。
なんか5,10から直角三角形作ってやったら
5+7=5√3とかでてきて解けないんだけど
歪み過ぎてまず矛盾起こさない補助線を引くのが難しいなコレ・・・
底辺×高さ÷2 + 底辺×高さ÷2
中学生レベルを小学5年でか
やっぱ進んでる所は進んでるな
同じように見えるものの中から何が重要で何が重要でないのかを判断する能力、
自分に何が必要かを理解していて存在しないものはそれを自ら作り出す能力、と言えばいいのか。
問題自体は解き方を覚えさえすれば誰でも出来る。
s/能力/才能 ∨ 経験/
aからbを求める方法f
このfをどうやって求めるかだよなぁ。
これが機械的に求められたら。。。
天才は何の苦もなく解法を見つけるが、その解法をいくら暗記しても天才になれるわけじゃない。
能力的に明らかな差があるんだ。
天才は自分が天才なことに気づかない
男なら適当に座標軸とって積分だろ、常考
>>711 ダイバーたちはわりと使ってる表現だよね
優劣を決めることに意味は無いが、ラマヌジャンとオイラー、どっちがより非凡だったんだろう。
どっちがより非凡だったか考えることにも意味は無いとは思わないのかね
>>712 ダイバーのハンドシグナルって二進数でやってるの?
それは知らなんだ
>>714 まぁどっちが非凡かというのも意味は無いな。
ただ、ラマヌジャンは空前絶後の存在。
オイラーは空前絶後に見えるがいつか同じ人間現れる。いわゆる天才。
この二人の思考の差異が解れば色々と発想の原点を探れそうな気はしてくる。
>>711 20とかグワシになるんだが、指いたくないのだろうか
21のがキツそう…
野菜だか魚だか忘れたけど、市場のセリで価格提示を二進数でやってるとこが本当にあるらしいね。
720 :
デフォルトの名無しさん:2011/06/26(日) 00:38:35.35
ミュージシャン(w)も使うらしいお
721 :
デフォルトの名無しさん:2011/07/01(金) 22:58:44.68
髪の毛が一本もない人はハゲである。ハゲの人に髪の毛を一本足してもやっぱりハゲである。
よって数学的帰納法により、全ての人はハゲている。
数学は素晴らしいな、これでおれも明日から胸を張っていきていける。
志田未来かわいすぎワロタ
志田未来かわいすぎワロタ
もう18のエロエロなんだぜ
----------
>>>>>> 髪の毛が一本もない人はハゲである。ハゲの人に髪の毛を一本足してもやっぱりハゲである。 <<<<<<(きリッ!!きリッッ!!!!きリ!!!!ッッッッ!!
--------------------(きリッッッッッ!!!!!キリッッキリッッッッ!!キリ!キリッッッ!!!!
---------
>>>>>>>>>> よって数学的帰納法により、全ての人はハゲている。 <<<<<<<<<<(きリッッッッ!キリッッッッキリッッキリッ!!!!!
---------
>>>>> 数学は素晴らしいな、これでおれも明日から胸を張っていきていける。 <<<<<(キリッッッ!ッッッ!
死ね
帰納法じゃなくて鳩ノ巣原理
726 :
デフォルトの名無しさん:2011/07/02(土) 20:11:04.48
鳩ノ巣で証明できるのは、世界には同じ本数の髪の毛を持つ人間が少なくとも一組はいる、だ。
鳩ノ巣原理を利用したアルゴリズムとかあるのかなぁ。
帰納法とかは結構使いそうだけど。
ハッシュテーブルじゃね。
鴻ノ巣原理は初めて聞いたわ
四則演算とシフト演算、これだけ知ってれば十分
あとは数学演算ライブラリがすべてやってくれるんじゃねw
お前はそれで十分だよ
天才なんだから
おれら凡人はそれだけじゃあかんから、
コツコツと色んな事を学ぶ
>>730 はぁ???
何その名前?ディスってんの?
天使ディスっといてただですむと思ってんの?
ゲーム スレで聞こうか、ここで聞こうか、迷ってこっちに書き込みます。
海外のオープンソースのゲームのハナシなんですが
モンスターを攻撃すると、そのモンスターは殴り返してきて戦いが始まります。
モンスターは殴り返すばかりではなく、ときどき魔法攻撃で応戦してきます。
魔法攻撃というのは、火を噴いたり光線を出したりみたいなことです。
if (乱数(0, 99) < 15) 魔法攻撃(); else 殴り攻撃();
これまではこのような計算式でした。
「乱数(0, 99)」は0〜99の整数の乱数を発生する関数です。
つまり、上の式は15%の確率で魔法攻撃を出してたことになります。
ところが最近、このような修正が入りました。
if (乱数(0, 99) < 乱数(7, 15)) 魔法攻撃(); else 殴り攻撃();
これって、どういう意味か理解できないんですけど、みなさんわかりますか?
if (乱数(0, 99) < 11) 魔法攻撃(); else 殴り攻撃();
と同じじゃないかと思うんですが・・・
間違ってます?
>>733 魔法攻撃の確率が7〜15%の範囲で揺らぐようにしたかったのでしょうけど、
乱数(7, 15)を毎回計算したら11%固定と同じですね。
>>733,734
分散は同じではないかも。
乱数が一様分布のものだとすると、乱数を二つ使うことによって分布が変わるはず。
たぶん。
736 :
デフォルトの名無しさん:2011/08/13(土) 00:40:55.28
1000万回試行してみたけど、どっちも魔法89%・武器11%くらいか。
>>733 大半は気分の問題じゃないの
そこ突っ込まれたら泣くわ
>>735 どちらも試行が独立事象で魔法の確率が同じなので同じ分布になります。
複数の一様分布の和が一様分布でない事はこの件に全く関係ありません。
ゲームだと高速化とかその他の理由で乱数を毎回計算せず、乱数表を予め作っちゃってから順番に返すこともあるから
乱数表上のポインタを進めるという意味がある可能性が全く無いワケじゃないが
この場合は「単なる気分」に一票かなw
出てくる数に意味があるのかな、と思ったけど、
単に if の条件というだけなら意味ないですな。
使ってる乱数関数の疑似乱数があほすぎて(線形合同法の下位桁使ってるとか)
乱数精度悪かったのを無理やり回避してるとかの可能性も。
この方法だと回避できねーじゃん
(乱数(0, 99) / 乱数(7, 15) <1
としてみるとわかりやすいけど
分母が7から15の間は確率を曖昧にしたいという
意図が感じられるね。
全く別の式を持ちだしても…
正規分布乱数だったら、それぞれで結果や意味が変わりそう
乱数を二つ使うことによって個々の乱数の責任を分散しているとも考えられるな。
単に「わかってない」でFAだと思うが
分かってない改変が投稿され、分かってないレスが連なるスレ
定数なのかね
>>734-750 レスありがとうございます。やっぱ変ですよねぇ。
プログラミング言語はjavaです。「乱数()」はjavaのjava.util.Randomのラッパーです。
開発元は英語しか受け付けてもらえないコミュニティなんですが
実は私、工業高校卒で英語はまったく話せないんです(T_T)
なんとか意思を伝えようと
> if (乱数(100) < 乱数(7, 15))
> and
> if (乱数(100) < 11)
> is the same
って書きこんだんですが、ロシア人もチリ人もアルゼンチン人もブラジル人もみな一様に
「乱数(7, 15) は 7〜15の乱数を発生させる関数です。いつも11固定ではありません」
みたいな返事です。
俺・・・算数は得意だが英語がまったく話せない
開発チーム・・・英語は話せるが算数がニガテ
こんな状況です。う〜ん困った。
あ、ごめんなさい。
「乱数(100)」は「乱数(0,99)」とまったく同じ結果を返す関数です。
引数節約のラッパー関数です。中身は同じです。
753 :
デフォルトの名無しさん:2011/08/17(水) 00:43:22.38
実際に1億回くらいのサンプルを出して見せれば一発じゃねーの。
>>751 乱数を二回呼んでるくらいで、何か実質的な問題があるの?
変と言うほど変でもないと思うし、英語も通じてるみたいだし、
困る理由が分からないなあ。
755 :
デフォルトの名無しさん:2011/08/17(水) 01:32:48.00
もうインフォグラフィックス(笑)で
0から99のセルを0から10まで(<11)埋めた1行のテーブル
計算値 11/100 = 0.11
0から99のセルを0から6まで(<7)
0から99のセルを0から7まで(<8)
:
0から99のセルを0から6まで(<15) 埋めた9行のテーブル
計算値 (7/100 + 8/100 + ... + 15/100 ) / 9 = 99/100 / 9 = 0.11
それぞれテーブルを画像化して見せてやればいいんじゃない?
756 :
デフォルトの名無しさん:2011/08/17(水) 01:34:14.25
(7 + 8 + ... + 15) / (100 * 9) だな。視覚的には。
>>754 >>733 「変更前と変更後で確率が変わらない」ことを開発陣が理解しているかが問題。
もし理解しているなら、
『 開発陣の気分的な問題で、ソースコードの見た目を変えてみた 』
という くだらない話で終わる。
もし理解してないなら、変更後のソースコードは開発陣が意図した変更に
なってないということであり、開発陣にとって問題あり。
758 :
デフォルトの名無しさん:2011/08/17(水) 09:04:00.98
いわゆる「KODAWARI☆」ってやつだな。
if (乱数(100) < 乱数(7, 15))
武器を使って確実に攻撃したいという理性(左片)と、でも魔法も使ってみたいな、という野心(右辺)が
モンスターの脳内アリーナ(ifステートメント)で毎回火花を散らせているいう様子をコードで表現したものだろう。
乾いた砂礫上の波紋に流水を見る「枯山水」に通ずるものがある。
TRPGブーム全盛期にはいろいろとダイスの振り方やらその判定法やらに凝っては、
理工系の奴から「それ確率論的に同じじゃね?」とかツッコミが入るのがお約束だったなぁ。
>>757 うん
乱数を複数回使うのが開発陣の意図通りのコードかもしれないし、
後で修正を加えるのを見越して適当なコードのままで残しているだけかもしれないし、
そもそも『数学的な意味で厳密な意図』が無いのかもしれないし、
動作テストしてみていい感じで動けばいいという判断かもしれないし、
確率的に意味が無いというのははっきりしているけど、他人のコードだしね
アホが得意満面の顔で大手を振ってやって来た
いらっしゃい
765 :
デフォルトの名無しさん:2011/08/21(日) 19:55:35.18
変動し続けるグラフのデータ構造って何がいい?
オブジェクトを頂点にしとくのが無難?
それともmapで[参照元頂点,参照先頂点]って感じで格納しとくべき?
疎なグラフなら後者だし、密なグラフなら隣接行列にするとかじゃなかったっけ?
Wikipediaに載ってる様なその二択しかないの?
ごめん、あんまり詳しくないのに答えるもんじゃないね。
the art of computer programmingとか漁れば、もっとマイナーなデータ構造があるかも。
力になれなくてごめんね。
いや、ありがとう。
誰か詳しい人居ないかな。
頂点数が変動してても、頂点辺りのノード数固定とかだと
もっと効率の良い別の構造とかありそうな気がするんだよね〜。
>>769 とりあえず、
>>766 (Wikipediaに載ってる様な二択) でやってみてくれ
その上で、どのようなケースで何がどのように不満なのか、
そのようなケースは頻出するのか、まずい部分を洗い出してくれ
そうすれば、その部分を改善する方法を提示できる人が現れる「かも」しれん
データ構造とアルゴリズムは連動しているので、
何をやりたいかによって遣うデータ構造も変わってくる。
オイラー角で回転させるときの軸って親の軸とオブジェクトの軸どちらを使うのが一般的なんでしょうか?
オイラー角に限らず、四元数だろうが行列直接作ろうが、回転行列欠けるときはオブジェクト基準じゃね?
親の運動に従属して動いた結果の計算、というんでもない限り。
ていうかその場合は親の新しい座標系に従って世界系での位置と姿勢を算出するだけか。
775 :
デフォルトの名無しさん:2011/09/14(水) 22:13:21.30
3頂点で構成されたポリゴンの集合体(メッシュ)をグラフで構築したとき、
ポリゴン集合体の全ての頂点を最速で巡回するいい方法ってある?
メッシュのレンダリングに使いたいんだけど。
776 :
デフォルトの名無しさん:2011/09/14(水) 22:37:19.45
それはもしや巡回セールスマン問題というやつx?
>>776 ちょっと違うだろ
メッシュのレンダリングに使うんだから、
単に巡回するんじゃなくて、三角形をひとつひとつ描くように巡回しないと
そのグラフを B-Rep や partial entity structure なんかの構造にすれば、
全ての面をたどったり、全ての頂点をたどったり、
開いているメッシュの境界線をたどったり、といったことが容易にできる
その手のメッシュ用データ構造の派生として、
Compact Array-Based Mesh Data Structures という論文に
配列ベースのコンパクトで速い方法が比較的分かりやすく書かれてた(と思う)
ありがと。
論文が英語過ぎて読めんけど頑張ってみるわ。
すまんな
日本語の解説サイトを紹介したかったんだが、
いくら探しても B-Rep とは何かというサイトしか見つからん
肝心の「どういう構造」で「どうやって使うのか」が英語しか無いんだ
C++ のソースから読み取るという手もあるが
最近はTwitterの彼女の友達と俺の友達は穴兄弟みたいな集合知検索でも使われている
グラフデーターベースっていうのがあって
Polygon-->Edge-->Vertex
みたいな構造をこいつに登録しておいて
Traverseっていう探索エージェントに条件を書いてやれば簡単に辿れるよ
俺は Scala + Neo4j でいろいろ遊んでるがおもしろいね
難しくて意味がわからん・・・
何を勉強すれば良いでしょうか
>>783 そんなんで答えが得られると思ってるのか?
甘えるな
何をやろうとして、どこまで理解できて、何が分からないのか
可能な限り具体的に質問してくれ
以上、女を堕とすテク「一度突き放しておいて、やさしく手を差しのべる」実践でした
心開いて股開く
とある海外のオープンソフトのバグを治すのに
時刻の「時」を得る部分で「分」以下を丸める必要があった。
例えば 現在時刻が5時59分59秒なら6時を得る必要がある。
現状では 時=現在時刻÷3600 という計算式(少数切捨て)なので結果は5時になってしまうんだ。
そこで修正案をこう提案した。時=(現在時刻+1800)÷3600
これがおよそ1ヶ月前。
コミュニティの掲示板には「動作テストしてみます」というレスが付いたまま放置。
数日前から「誰かテストしてください」とか「テストOKですか」とかのレスが付き始めた。
でもなかなか修正されない。かなり致命的なバグなのに・・・
ガイジンさん、なぜ1800を足せば治るのか、理屈が理解できないのかな。
「四捨五入」みたいなもんですよ。時間なら「1799捨1800入」すればいいだけじゃん。
なんでわからないんかな。そんなに難しいのかな。
説明しようと思って「四捨五入」を英語に訳そうとしたら、「round off」だって・・・そりゃわからんハズだ。
日本語の「四捨五入」なら4以下は捨てる、5以上は切り上げる、ってわかりやすいけど
英語の「round off」だと理屈を説明しずらい。
そりゃアメリカ人には理解できんハズだ。をいアメ公、一生悩んでろ!
四捨五入/切捨て/切り上げ = ceil/floor/round
それと俺だったらそんなマジックナンバー使ったメンテしにくいコードは採用しない
そして閏秒で嵌まる、と。
ROUND 1
考え方の説明なら実数でやればよい。
0.5 hour = 0.5 x 3600sec で分かるだろう。
実装はさておき、まずは仕様を理解してもらわないとダメじゃないかね。
- ceil if min >= 30 (it's half hour)
- floor otherwise
とか。
仕様はわかっているが、
秒換算の式がわからないってのが本当なら、
式の具体的な値の例を列挙すると説得できるかも。
>>786 純粋にプログラミングの為の数学と算数の話かと思ったら説明方法の話かよ
長文に期待して損した
>>790 どこから 0.5 なんて数字が出てくるんだ?それ説明するのにかえって苦労するよ
おまいは小学生かよ
それ四捨五入じゃなくて
0.4999999999999999999999999999捨0.5入
オープンソースなら修正したパッケージ作ってどっかにアップし、
コミュニティーにそのパッケージのリンク張ってやれば?
パッケージ作るとか石器時代かっつーの
git で pull リクエスト送りつけてやったらええねん
クラウド時代ですなぁ
すずしくなってくるといつももっと勉強しないといけない焦燥感に駆られる
そんな俺が圏論の勉強をはじめてみますね
カテゴリー?「5(キリッ」
5の補題か
圏論ならしりとりで説明してたブログとかが結構分かりやすかったかもしれない。
805 :
デフォルトの名無しさん:2011/10/01(土) 07:41:01.82
質問させて下さい。アークタンジェントの記述を、アークタンジェント関数がない言語に移すには何か方法がありますか?
具体的には、JavaScriptの
ans[0] = V / U;
ans[0] = atan( ans[0] ) / (Math.PI / 180);
このような記述をWindowsMobile用のMortScriptに書き直したいのです。
できないなら諦めますが、どなたかご存じの方いたらお願い致します。
>>805 atan(x) = x - x^3/3 + x^5/5 - x^7/7 ... (|x| < 1)
809 :
805:2011/10/02(日) 05:15:36.38
あの・・・す、すみません・・・。
次期バージョンのβ版に逆三角関数ありました・・・。
なんて言ったらいいのか、その、ごめんなさい。
>>809 ここは質問スレではないから気にするな。
お題を振ってみたと思えばいい。
透視変換はアフィン変換に含まれないよね?
視点から伸ばした線分(視線)上に存在する点は全て同じ点に投影されること
からも透視投影変換は同型射ではないのは明らか
そのための同次座標なんだっけ?
同次座標ベクトル(x,y,z,w)のwで割ればーってやつか。アレは目からうろこだったわ。
つぶれるアフィン変換もアフィン変換なんだから、
同型でないからアフィン変換でない、っていうのは乱暴のような
http://neilwallis.com/projects/java/water/index.php に書かれているソースのうち、aとbを求めてる以下のコードの意味が分かりません…
説明の
> We calculate an X/Y offset based on the current distance from the centre of the ripplemap and the magnitude of the ripple at this point.
に対応していて、1024は特に意味が無いんだろうなあ、という予想なんですが、
それより先、どなたか解説頂けないでしょうか。
//where data=0 then still, where data>0 then wave
data = (short)(1024-data);
//offsets
a=((x-hwidth)*data/1024)+hwidth;
b=((y-hheight)*data/1024)+hheight;
波高(data)の分だけ、テクスチャの参照位置をずらして(=offset)、そこに波があるような描画をしてるだけ。
波高が1024段階の整数で表現されてるから1024って使ってるんじゃないかな。
818 :
816:2012/03/25(日) 22:23:34.03
>>817 ありがとうございます。
a' = nx'
ただし、
a' = a - hwith
x' = x - hwith // current distance from the centre of the ripplemap
で、nが0<=n<=1を取るdata(magnitude of the ripple at this point)の関数にするために
n = 1 - data/1024 (1行目で代入する前のdata)
と決めてる、ってことですかね。
つまりdataが大きくなるにつれnが小さくなればそれっぽく見えるので
必ずしもこの関数である必要はない、というわけですかね…
んー。
a=((x-hwidth)*data/1024)+hwidth;
≒x-(hwidth*data/1024)+hwidth;
≒x+hwidth*(1-data/1024)
だってことが分かれば、そんなに理解に苦労はしないっしょ。
0 ≦ (1-data/1024) ≦ 1
だろうから、hwidthは単にエフェクトの横方向の倍率表してるだけ。
波紋エフェクトのキモになってるのは
short data = (short)((ripplemap[mapind-width]+ripplemap[mapind+width]+
ripplemap[mapind-1]+ripplemap[mapind+1])
>>1);
ここだから、他のとこは別に何でもいいっちゃいいね。
「平均」の計算法で下記のようなのって間違ってます?
int *x = { ほげ,はげ,うんこ... }; //サンプルデータの配列
int ave = 0;
for (i = 0; i < 100; i++) {
ave = (ave + x[i]) / 2;
}
printf("平均=%d", ave);
>>820 ave は int じゃダメだろ。少数点以下が切り捨てられるから。
double ave = 0.0;
で試してみてよ。
ave = (ave * i + x[i]) / (i+1); のほうがいいな
>>820 それは、例えば要素数が3つの場合、下記の等式が成り立つか、ということだろ?
(a + b + c)/3 = ((a/2 + b)/2 + c)/2
左辺は小学校で習う平均値の計算式
右辺は君が提示したプログラムを式にしたもの
左辺から右辺を引いてゼロになるか計算してみれば、質問しなくても分るだろ
で、一般の要素数 n でどうなるかは数学的帰納法で分るだろ
プログラム以前の話だよ
といっても、まさにプログラムのための数学の話だが
doubleの丸め誤差とかを考えると、一番いいのは平均の定義どおり
平均 = (総和) / (要素数)
で求めるのがいいと思うよ。
つまり822の一番上の関数。
,j;;;;;j,. ---一、 ` ―--‐、_ l;;;;;;
{;;;;;;ゝ T辷iフ i f'辷jァ !i;;;;; (集合Aの平均+集合Bの平均)÷2=AとBの平均・・・
ヾ;;;ハ ノ .::!lリ;;r゙
`Z;i 〈.,_..,. ノ;;;;;;;;> そんなふうに考えていた時期が
,;ぇハ、 、_,.ー-、_',. ,f゙: Y;;f. 俺にもありました
~''戈ヽ `二´ r'´:::. `!
>>820 加重平均の一種としてそのようなコード使うことあるな。
>>827 円周率を「3」で計算するゆとり世代ですね、わかります。
↑アホ
830 :
デフォルトの名無しさん:2012/06/08(金) 14:00:37.92
3 じゃなくて
およそ 3
だったぞ
少なからず漏れの記憶では
「ゆとり」と煽る奴は「円周率が3」の話しか知らない
>>820 逐次的に平均値を計算したいのでしょうか。
数列の先頭から要素を一つずつ取り出し、
その度にそれまでの平均値を更新していくような。
それでしたら、次の計算が使えます。
x[n] : 数列 x の n 番目の要素 (n = 1, 2, 3 ・・・)
a[n] : 数列の n 番目の要素までの平均値
a[n] = a[n-1] + (x[n] - a[n-1]) / n
>>820 のプログラムを改良するなら、こんな感じでしょう。
(まぁ、int 型なのは論外ですが)
ave = ave + (x[i] - ave) / i;
ただし、毎回丁寧に要素数で割る計算に比べて、誤差が蓄積し易いので注意。
>>827 Sn = Σ (1/2)^(n-i)Ai になるわけか。
指数関数的に過去の寄与が減ってゆくわけね。
死牙馬
スイッチヒッターで
右打ちのときは打率2割
左打ちのときは打率8割
平均すると打率5割!
右打ちした確率が 0.5 で、左打ちした確率も 0.5 なら、
5割の確率で打ったと言える。
0.5 * 0.2 + 0.5 * 0.8 = 0.1 + 0.4 = 0.5
でも、右打ちした確率が 0.7 で、左打ちした確率が 0.3 なら、
2割強の確率で打ったことになる。
0.7 * 0.2 + 0.3 * 0.3 = 0.14 + 0.09 = 0.23
と思ったんだけど、合ってるかな?
>>836 何故0.3*0.3?
そこは0.3*0.8だろ。
>>837 そうだよね、単なるミスだ
0.7 * 0.2 + 0.3 * 0.8 = 0.14 + 0.24 = 0.38
4割弱といったところか
>>836 > 右打ちした確率が 0.5 で、左打ちした確率も 0.5 なら、
そこは確率じゃなくて割合だろ…
>>830 試験は、3で計算していいだけで
教えるのは、3.14...で教えるぞ
うちのガキだってそこは知ってる
大学入試だってlog 2 = 0.3で計算しろとか出るしな。
int pi = 3.14159;
>>842 それだと、計算の最初から円周率を3として計算するから誤差が大きすぎる。
いくらゆとりでも、円周率を3として数値を出すのは最後の最後だ。
お前ら、ゆとりゆとりと馬鹿にするけど、円を同面積の正方形に
直す作図をきちんと解けるんだろうな。
846 :
デフォルトの名無しさん:2012/06/11(月) 19:52:05.11
やれるもんならやってみろ。
円周率が3だと正六角形...
円周率が3って3桁*3桁を小学校で教えなくなったからだろ?
小数点以下の桁数が2桁以上ある乗算を、必修の範囲外にした、とかだったと思うが。
いずれにしても、たとえば柱のような形状の体積は「底面積×高さ」という一般法則があるのに、
入試で「円筒の体積」の問題を出したのは範囲外だのなんだのと、「個別のルールを、法則などを
考えることは一切せずに暗記せよ」というのが教育である、という根本的な心得違いが根底に
あって、それを是正するつもりは一切ないようだから、日本が今後復活する見込みはない。
小学生の間は、背景にある意味はとりあえず脇に置いて於いて、
とにかく計算練習をさせる。
スポーツ感覚でクラス対抗やったり、計算クイズ合戦をやったり、
ご褒美を出したりして、可能な限り飽きさせない。
(クラス対抗やるなら、仲間のミスをフォローできるシステムだと尚良い)
計算練習だけさせるから、積分の計算くらいまでならできるだろ。
で、中学生になってから、そもそも君たちが使ってる「数」って何だろうね、
と言ってペアノの公理からスタートする。
こんな世界に生まれたかった。
そろばん教室が関の山だった
>>850 > 入試で「円筒の体積」の問題を出したのは範囲外
「円筒(円柱のような?)の体積はこのようにして求められる」という一言が問題に併記されていれば
問題ない気がするけど、それもなかったってことなのかなぁ。
なかったんだろうなぁ。とすれば問題の不備だなぁって思えるよ。
円周率は任意の数値を使って良い。
ただし、「回答誤差×100点点数を差し引く」
とかならきっとみんな頑張る。
>>854 間違えて円周率を虚数単位で計算しちゃった、テヘ
とかいうお茶目な生徒の点数はどうなるの?
きっと虚数の点数がもらえる
>>854 高校の頃, 持ち点100点で純粋に減点法, クラスの平均点が’マイナスなんて教師がいたな
#
3桁*3桁を小学校で教えなくなった合理的な理由は?
消費税の計算を出来なくする愚民化政策です
3桁×3桁って、明示的に習ったかなぁ?
複数桁×1桁→複数桁×複数桁という流れだったような気はするけど、
それが今2桁までしかやらないとしても、問題ないような。
割り算掛け算の筆算でずらずらずらずら書かなくていいのはチラ裏にやさしくはあるけれど。
いまどきの小学生は携帯の電卓もスマフォもカンニングも何でもありだからな
良い時代になったもんだ
電卓やカンニングが意味をなさない問題を出すべきだよな。
この一連の式変形の中で興味深い点を挙げ、その理由を述べよ。
積分を使って解く面白い文章問題を作れ。
などなど。
こういうのを数問だけ出して、部分点を細かくして採点すればいいんだよ。
それだけで、これまでの授業でどこまで理解できているのか先生も生徒も把握できる。
テスト中スマフォで問題文を掲示板に投稿する馬鹿もいるだろうから、
答案内容があやしい奴は後日、数学の時間に不意打ちで答案の詳細を述べさせる。
情報化社会にあった試験のやり方を考えるほうがいいんでないかい?
単純に解凍形式を論述の形にすればいいのだけど
そうすると採点が死ねる
この辺は自然言語処理の世界の人に頑張って欲しいな
>>862 言わんとすることはわかりつつ、野暮なツッコミをすると
> この一連の式変形の中で興味深い点を挙げ、その理由を述べよ。
これは、理解が追いついていない生徒と理解しきった生徒という対極にいる生徒が
「特に興味深い点はありません」と解答しかねない
理解しきった生徒は興味なくても適当に採点者の気に入るような「興味深い点」を取り上げる実力はある
論理的思考能力じゃなくて作文力を評価するのか?
それって数学じゃなくて国語のテストじゃね?
人に分りやすく説明できなければ本当に理解したとは言い難い
というのを、数学ガールで学んだ
漏れならロピタルの定理を使って
履修範囲外で0点になる自信がある
つかった定理の証明ごと書けばもらえるんじゃねーかな。
そもそも、採点者が理解できていないと・・・
選択でも論述でもない画期的な回答方法を世に出せばいいんだろ
ノーベル教育賞を作ったら考えてやる
n択は論理和しかない論理体系による論述と等価
874 :
uy:2012/06/19(火) 13:45:15.17
再起は、帰納法的定義・証明に使うもので、基礎中の基礎だけども、基礎過ぎてそんなに直接は使わない。
直接は散々演習でやったけどな…w
そりゃ、基礎大事だもん。
学校の演習では腐るほどやるだろ。
ってそういう話じゃないか。
>>874 callを全部unfoldしたら、recursionはY-combinatorと等価なんじゃ?
879 :
uy:2012/06/21(木) 00:04:36.31
しらね、言語処理系に聞けとしかいえない
あとそれはゴミ、
コードは更新された
def recursion &b
f = ->*n{ b[ *n , &f ] }
end
880 :
uy:2012/06/21(木) 00:06:39.30
こうしてみるとrubyも十分変態言語の素養が備わっているよなぁ。
lambda が ランバダに見える俺はバブル世代か。