プログラミングの為の数学と算数 vol.2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG語りましょう。TIPS/Q&Aスレです。
0266デフォルトの名無しさん
2005/10/05(水) 12:11:37そのレベルなら、俺が師匠の手伝いしておごってもらった時に書いた本でも作ったな
てか、初歩の数値解析関係で、差分方程式のサンプルにまず100%含まれてる
後は、境界条件と制約条件をどうするかだけしかないな
0267デフォルトの名無しさん
2005/10/09(日) 02:17:46例で書いた数式1次元ですね。すいません
んー、3次元の非定常のプログラムがなかなかなくて・・・
参考書はほとんど二次元で終わってまして
0268デフォルトの名無しさん
2005/10/12(水) 17:21:19x^2/a^2 + y^2/b^2 = 1とネットで調べると出てくるのですが、
円の中心(本来はそういわないかもしれない)が(0,0)で
ない場合の式は、この式じゃないような気がするんですが。
0269デフォルトの名無しさん
2005/10/12(水) 17:26:540270デフォルトの名無しさん
2005/10/12(水) 17:34:17さら平行移動させたり、回転させたりすると、当然複雑になるけど、複雑にしてもメリットないでしょ?
実際に楕円描く時はその式では不便で、sin/cosの媒介変数型使うだろうし
・・・・いや、実際に楕円描く場合はベジェ曲線で近似するだろうな
0271デフォルトの名無しさん
2005/10/12(水) 18:28:16応用が効かない言い方をするならば、
中心(c,d)なら(x-c)^2/a^2+(y-d)/b^2=1と考えていい。
0272デフォルトの名無しさん
2005/10/12(水) 19:36:15曲線f(x,y)=0を x軸方向に+a, y軸方向に+b したら f(x-a,y-b)=0
x=f(t), y=g(t) だったら x=f(t)+a, y=g(t)+b だし
0273デフォルトの名無しさん
2005/10/12(水) 21:49:370274デフォルトの名無しさん
2005/10/15(土) 20:36:140275デフォルトの名無しさん
2005/10/16(日) 22:27:040276デフォルトの名無しさん
2005/10/19(水) 23:05:17一応言っておくと「楕円方程式」と「楕円の方程式」は別物ですよ
ここで言ってるのは前者ですね
0277デフォルトの名無しさん
2005/10/19(水) 23:06:430278デフォルトの名無しさん
2005/10/21(金) 20:14:160279デフォルトの名無しさん
2005/10/21(金) 23:53:520280デフォルトの名無しさん
2005/10/22(土) 00:56:25前者に決まっとる。
0281デフォルトの名無しさん
2005/10/22(土) 03:32:24どっちもどっちw
0282デフォルトの名無しさん
2005/10/24(月) 13:41:540283デフォルトの名無しさん
2005/10/24(月) 21:16:45参考:>>268
0284デフォルトの名無しさん
2005/10/26(水) 14:03:530285デフォルトの名無しさん
2005/10/26(水) 23:53:36嘘つきになる要素が・・・
0286デフォルトの名無しさん
2005/10/27(木) 13:49:130287デフォルトの名無しさん
2005/10/27(木) 14:31:050288デフォルトの名無しさん
2005/10/27(木) 15:00:160289デフォルトの名無しさん
2005/10/27(木) 22:38:310290デフォルトの名無しさん
2005/10/28(金) 00:58:510291デフォルトの名無しさん
2005/10/28(金) 01:04:290292291
2005/10/28(金) 01:05:140293デフォルトの名無しさん
2005/10/28(金) 01:10:03素数を生成するコードを書いて落ち着くんだ…
0294デフォルトの名無しさん
2005/10/28(金) 01:21:5420 N = N + 1
30 K=2
40 IF N = K THEN LPRINT N
50 IF N MOD K = 0 THEN GOTO 20
60 K = K + 1
70 GOTO 40
0295デフォルトの名無しさん
2005/10/28(金) 10:58:220296デフォルトの名無しさん
2005/11/04(金) 02:06:550297デフォルトの名無しさん
2005/11/04(金) 22:23:21「だぜ」に突っ込むか・・・。
「やれやれだぜ」自体が漫画の台詞。
ジョジョ。
0298デフォルトの名無しさん
2005/11/04(金) 23:27:220300& ◆BSGaog1Z0Q
2005/11/08(火) 14:18:52//>>294
std::ostream& dumpPrimes(std::ostream& os, int max) {
for(int n=2; n <= max; ++n){
for(int k=2; ; ++k){
if(n==k) {
os << n << "\n";
}
if(n % k == 0) {
break;
}
}
}
return(os);
}
0301デフォルトの名無しさん
2005/11/08(火) 14:36:01if(n==k){
os << n << "\n";
}
return((n % k == 0)? os: testDiv(os, n, k+1));
}
std::ostream& testNum(std::ostream& os, int max, int n){
return((n > max)? os: testNum(testDiv(os, n, 2), max, n+1));
}
std::ostream& dumpPrimes(std::ostream& os, int max) {
return(testNum(os, max, 2));
}
0302デフォルトの名無しさん
2005/11/16(水) 22:10:39> 素数は無限に存在する。
>
> エウクレイデスによる証明
> 背理法による。
> 素数が有限個しかないと仮定し、それらを次のようにおく。
>
> pi, i <= n
> ただし n は定数。
>
> q = p1p2p3...pn + 1
>
> を考えよう。q は合成数であるか素数であるかのいずれかである。
> q が合成数だとすると q は pi のいずれかを用いて積の形に表されるはずである。その一方で q は pi のいずれで割っても 1 があまり、矛盾する。
> 素数だとすると、これは pi のいずれとも異なるから素数が有限個しかないことに反する。
> Q.E.D.
この証明変だよね。
0303デフォルトの名無しさん
2005/11/16(水) 22:18:18どこで引っかかった?何が変?
0304デフォルトの名無しさん
2005/11/16(水) 22:22:32「qが合成数」も「素数が有限」も否定していいんだよ。
0305302
2005/11/16(水) 22:29:52そうとは限らない
2 + 1 =
3 is a prime.
2 x 3 + 1 =
7 is a prime.
2 x 3 x 5 + 1 =
31 is a prime.
2 x 3 x 5 x 7 + 1 =
211 is a prime.
2 x 3 x 5 x 7 x 11 + 1 =
2311 is a prime.
2 x 3 x 5 x 7 x 11 x 13 + 1 =
30031 is 509 x 59
2 x 3 x 5 x 7 x 11 x 13 x 17 + 1 =
510511 is 97 x 5263
2 x 3 x 5 x 7 x 11 x 13 x 17 x 19 + 1 =
9699691 is 27953 x 347
2 x 3 x 5 x 7 x 11 x 13 x 17 x 19 x 23 + 1 =
223092871 is 703763 x 317
0306デフォルトの名無しさん
2005/11/16(水) 22:37:59> 2 + 1 =
>3 is a prime.
2<3
> 2 x 3 + 1 =
>7 is a prime.
3<7
> 2 x 3 x 5 + 1 =
>31 is a prime.
5<31
> 2 x 3 x 5 x 7 + 1 =
>211 is a prime.
7<211
> 2 x 3 x 5 x 7 x 11 + 1 =
>2311 is a prime.
11<2311
> 2 x 3 x 5 x 7 x 11 x 13 + 1 =
>30031 is 509 x 59
13<59
> 2 x 3 x 5 x 7 x 11 x 13 x 17 + 1 =
>510511 is 97 x 5263
17<97
> 2 x 3 x 5 x 7 x 11 x 13 x 17 x 19 + 1 =
>9699691 is 27953 x 347
19<347
> 2 x 3 x 5 x 7 x 11 x 13 x 17 x 19 x 23 + 1 =
>223092871 is 703763 x 317
23<317
論外なところから値を引っ張ってきて論じようとしている。
23が「最大」の素数であれば、317は素数でも合成数でもないのでどちらにしても矛盾がしょうじる。
0307デフォルトの名無しさん
2005/11/16(水) 22:41:27この推論は「素数が有限個しかない」という偽の前提があるから、反例を持ち出してもしょうがない。
> q が合成数だとすると q は pi のいずれかを用いて積の形に表されるはずである。
これは、「合成数は有限個の素数の積で表される」という定理と「素数はpiしかない」からの帰結。
0308302
2005/11/16(水) 22:49:50> q が合成数だとすると q は pi のいずれかを用いて積の形に表されるはずである
そうでない場合もあるとは思いませんか?
そして、その場合についても論ずるべきでは?
0309デフォルトの名無しさん
2005/11/16(水) 22:57:11だから、>>307に書いたように、
> q が合成数だとすると q は pi のいずれかを用いて積の形に表されるはずである
は「素数がpiしかない」という仮定の下で証明できる。
証明できるからには、これが偽である可能性を検討する必要はない。
0310302
2005/11/16(水) 23:37:43>「合成数は有限個の素数の積で表される」という定理
を前提としているわけですか?
0311デフォルトの名無しさん
2005/11/16(水) 23:45:05群論か環論の本を読んでくださいな、素元、既約元のあたりです。あとできれば背理法についてもね。
0312デフォルトの名無しさん
2005/11/16(水) 23:57:48細かい違いはあるかも知れない(例えば、その定理の代わりに「合成数は素因数を持つ」でも十分)けど、
基本的にはその通りだと思う。
0313302
2005/11/17(木) 00:16:30> を考えよう。q は合成数であるか素数であるかのいずれかである。
> q が合成数だとすると q は pi のいずれかを用いて積の形に表されるはずである。その一方で q は pi のいずれで割っても 1 があまり、矛盾する。
> 素数だとすると、これは pi のいずれとも異なるから素数が有限個しかないことに反する。
こう変えてもいいですか?
を考えよう。q は合成数であるか素数であるかのいずれかである。
q が合成数だとすると q は pi のいずれかを用いて積の形に表されるとき、q は pi のいずれで割っても 1 があまり、矛盾する。
また q は pi のいずれかを用いて積の形に表されないとき、q は pi を超える素数を持ち、矛盾する。
素数だとすると、これは pi のいずれとも異なるから素数が有限個しかないことに反する。
0314デフォルトの名無しさん
2005/11/17(木) 00:19:56128bit暗号を解読できるくらいのを
0315デフォルトの名無しさん
2005/11/17(木) 00:31:12ちょっとおかしいところ(「piを超える素数」じゃなくて「pi以外の素因数」というべき)があるけど、大筋としてはそれでもいい。
でも、そう書き換えたところで推論の構造はほとんど変わっていないし、
「合成数は素因数をもつ」ことに依存しているのも変わらない。
0316302
2005/11/17(木) 00:46:27自分なりに納得できて助かりました。
ありがとうございました。
0317デフォルトの名無しさん
2005/11/17(木) 01:16:310318デフォルトの名無しさん
2005/11/17(木) 11:36:57いや、真っ先に背理法を理解すべきでは?
0319デフォルトの名無しさん
2005/11/17(木) 12:27:310320デフォルトの名無しさん
2005/11/17(木) 13:05:040321302
2005/11/17(木) 16:06:10素数を順番にかけるとint型では、23までしかいけなかったので
double型でやったら、途中からおかしな答えになりました。
下から2番目なんですが、答えが1大きくなりました。
なんでなんでしょう?
2 x 3 x 5 x 7 x 11 x 13 x 17 x 19 x 23 x 29 + 1 =
6469693231 is 331 x 19545901
2 x 3 x 5 x 7 x 11 x 13 x 17 x 19 x 23 x 29 x 31 + 1 =
200560490131 is a prime.
2 x 3 x 5 x 7 x 11 x 13 x 17 x 19 x 23 x 29 x 31 x 37 + 1 =
7420738134811 is 181 x 40998553231
2 x 3 x 5 x 7 x 11 x 13 x 17 x 19 x 23 x 29 x 31 x 37 x 41 + 1 =
304250263527211 is 61 x 4987709238151
2 x 3 x 5 x 7 x 11 x 13 x 17 x 19 x 23 x 29 x 31 x 37 x 41 x 43 + 1 =
13082761331670032 is 2 x 6541380665835016
2 x 3 x 5 x 7 x 11 x 13 x 17 x 19 x 23 x 29 x 31 x 37 x 41 x 43 x 47 + 1 =
614889782588491390 is 2 x 307444891294245700
0322デフォルトの名無しさん
2005/11/17(木) 16:08:500323デフォルトの名無しさん
2005/11/17(木) 17:01:31浮動小数点表現の仮数部が 52 ビットのとき、精度は 15.6 桁。
…って、計算機の初歩の初歩だろうに。
0324302
2005/11/17(木) 17:11:45レスありがとうございます。
2進数の表し方がわからなかったので、
16進数で見てますが、所々おかしなところがあり、
手直ししています。
>>323
そうでしたか、出直してきます。
0325デフォルトの名無しさん
2005/11/17(木) 21:07:29巡回セールスマン問題解くプログラム作ってるんですけど
このスレでいいっすか?
それとも数学板に行ったほうがいいですかね?
http://www.watanabe.nuie.nagoya-u.ac.jp/member/jien/lectures/tokuron/toku5.pdf
↑でとりあえず理屈はわかったんだけど
摂動行列の決め方がわからん。
ていうか
あるルート候補から次のステップのルート候補作るときに
全部シャッフルしたらさすがに効率悪そうだし
隣同士入れ替えただけだともろ局所解に引っかかりそうだし。
なんか巡回セールスマン向けのうまい方法
(あるルートXnからX(n+1)を作るアルゴリズム)
だれかしらないですか?
0326デフォルトの名無しさん
2005/11/17(木) 22:09:18アニーリング関数が適当なら、その隣同士とかでやったとして
局所的なくぼ地にはまってしまうような場合であっても
少ない確率ではあるけどそのくぼ地を乗りこえることかできるから
結局それなりにうまくいくんじゃないのかな
0327デフォルトの名無しさん
2005/11/18(金) 00:37:31つ[long long]
0328デフォルトの名無しさん
2005/11/19(土) 09:22:25つ[多倍長演算]
0329デフォルトの名無しさん
2005/11/19(土) 10:35:170330デフォルトの名無しさん
2005/11/19(土) 11:18:12OK!
0331デフォルトの名無しさん
2005/11/19(土) 11:26:320332デフォルトの名無しさん
2005/11/19(土) 11:29:020333デフォルトの名無しさん
2005/11/19(土) 13:23:14サンクス。
変換しても出てこないので違うのかなと思っていた。
0334デフォルトの名無しさん
2005/11/19(土) 13:51:31かな漢字変換辞書が全ての技術語を網羅しているわけがないだろう。
それともあれか、藻前は「へんかんできないからそんな字ない」とか言っちゃう小学生か?
0335デフォルトの名無しさん
2005/11/19(土) 19:32:310336デフォルトの名無しさん
2005/11/19(土) 20:10:17そんなにキツく言わんでも・・。
0337デフォルトの名無しさん
2005/11/20(日) 22:49:35そのタプルが大きさ N の全順列中において辞書順で何番目かを返すアルゴリズムを
実装したいんですが,どういうアルゴリズムが考えられますか?
例えば, {1, 2, 0} を与えたら 4 を返すような感じのアルゴリズムです.
0338デフォルトの名無しさん
2005/11/20(日) 22:53:590339デフォルトの名無しさん
2005/11/20(日) 23:01:25tuple
【名】 組、《コ》タプル
0340デフォルトの名無しさん
2005/11/20(日) 23:08:44それの例のまま、 {1, 2, 0} で考えると、
最初が 1 → このタプルより前には {0, *, *} がある → 前に 2! 個 = 2個 ある
次が 2 → でも1は出てる → これより前で、{0, *, *} 以外のものは {1, 0, *} → 1個
だから、{1, 2, 0} より前には3個のタプルがあるから、
{1, 2, 0} は4番目。って感じ?
1つ数字増やして {2, 3, 1, 0} とかでいくと、
最初、{0, *, *, *} と {1, *, *, *} 数えて、 3! = 6個
次、{2, 0, *, *} と {2, 1, * *} で 2×2! = 4個
次、{2, 3, 0, *} があるから 1個
計11個前にあるから {2, 3, 1, 0} は12番目。
0341デフォルトの名無しさん
2005/11/20(日) 23:10:03で、マッチングをとる。
0342デフォルトの名無しさん
2005/11/20(日) 23:17:15最後の結果も18だわ。
>>341
それだと順列生成自体が糞重たいし、コーディング結構難しくない?
0343デフォルトの名無しさん
2005/11/21(月) 00:32:410344デフォルトの名無しさん
2005/11/21(月) 01:58:190345デフォルトの名無しさん
2005/11/21(月) 11:28:06std::vector<int> src, arr;
src.push_back(1);
src.push_back(2);
src.push_back(0);
arr = src;
size_t ct = 0;
do {
#ifdef _DEBUG
std::cout << "{";
for (int i=0; i<arr.size(); i++)
std::cout << (i? ", ": "") << arr[i];
std::cout << "}" << std::endl;
#endif // _DEBUG
} while (ct++, std::prev_permutation(arr.begin(), arr.end()));
std::cout << ct << std::endl;
結果:
{1, 2, 0}
{1, 0, 2}
{0, 2, 1}
{0, 1, 2}
4
0346デフォルトの名無しさん
2005/11/21(月) 15:45:08素直に説明を読むと、
「1からNまでのN個の順列組み合わせを辞書式順序で並べたとき
各組合わせは何番目?」
という問だと思うのだが、いきなり組の要素に0があったりするのはなぜ?
0347337
2005/11/21(月) 18:58:04素直にやるなら,前から順に読んでいって現れた数字を記録しないとならないですよね.
前から順に読んで現れた数字より大きい数字を全てデクリメントしていくやり方も
あるのかな?参考になります.
>>345
これって 340 さんの考え方じゃなくてむしろ 341 さんの考え方ですよね?
>>346
すいません.最初,説明を「0 から N-1」と書いてて後で直したんですが
例を書き直すのを忘れてました.337 の正しい例は {2, 3, 1} です.
0348デフォルトの名無しさん
2005/11/22(火) 04:02:57それでいいんでね?
(1)result=0で初期化
*ここで、1〜Nの整数が、適当に並べ替えられて並んでいたとして、
(2)N=1ならresult+1を返し終了。
(3)左端の数aに対し (a-1)*(N-1)! を計算し、resultに加算。
(4)列の中で、aより大きい要素は全て1だけ減らす(小さい要素はいじらない)。
(5)先頭のaを切り落とし(N=N-1)、残った列に対し*に戻る。
0349340
2005/11/22(火) 12:02:43それ見てて思ったけど、
(3)(階乗計算)とか(4)の計算に掛かる時間を考えると、
>>345 のコードよりも計算量大きくなるかも。
>>345 だと標準ライブラリの機能そのまま使っててコード量的にも少ないし。
順列生成のアルゴリズムって、>>345 の結果見てる感じ、
バブルソートを1ステップずつやるようなものなのね。
0350デフォルトの名無しさん
2005/11/22(火) 16:31:371 から N までの N 個の異なる自然数による順序付タブル をランダムに出力せよ
0351デフォルトの名無しさん
2005/11/22(火) 18:36:000352337
2005/11/23(水) 22:03:52345 さんのコードだと平均・最悪で O(N!) な一方で
348 さんのだと平均・最悪で(階乗計算も含めて) O(N^2) ですから,
特別な事情がなければ 348 さんのを選択するのが良いと思います.
というか 348 さんのアルゴリズムで実装できました.ありがとうございました.
0353デフォルトの名無しさん
2005/11/28(月) 23:10:17フーリエ変換が趣味です。
http://hobby8.2ch.net/test/read.cgi/hobby/1133005088/
0354デフォルトの名無しさん
2005/11/29(火) 19:35:47べての方程式を解くことは困難なので、そのプログラムで解ける範囲を指定し記述せよ。』
この問題のアルゴリズムと、ソースを書いてくれませんか?
ここで悩んでいるので是非とも力を貸してください!!お願いします。
0355デフォルトの名無しさん
2005/11/29(火) 19:36:390356デフォルトの名無しさん
2005/11/29(火) 19:36:55○答え教えろ
0357デフォルトの名無しさん
2005/11/29(火) 20:08:28とりあえずオイラー法を用意して、それで解ける範囲を明示しておけばレポート通るんじゃね?
0358デフォルトの名無しさん
2005/11/30(水) 01:23:230359デフォルトの名無しさん
2005/12/07(水) 23:46:24上記のサイトで、Sinをテイラー展開で求めているようですが、
sin(0.00) = NaN (非数値)
sin(0.01) = NaN (非数値)
sin(0.02) = NaN (非数値)
・
・
となってしまいます。どこが間違っているのでしょうか?
0360デフォルトの名無しさん
2005/12/08(木) 00:11:24double Sin(double x)
{
double xx = -x * x;
double fact = 1;
double sin = x;
for(int i=1; i<100; )
{
fact *= ++i; fact *= ++i;
x *= xx;
sin += x / fact;
}
return sin;
}
0361デフォルトの名無しさん
2005/12/08(木) 00:16:080362359
2005/12/08(木) 00:39:53なるほど! 数学関連の話で、何が合っていてどこから手をつけていいものか
困り果てているところでした。非常にお早いレス感服いたします。
ありがとうございました。
>>361
すみません。いくつか間違いがみられ、一応メールアドレスを探してみた
のですがわかりやすい位置になかったので、すぐに断念してしまいました。
0363デフォルトの名無しさん
2005/12/08(木) 00:42:210364デフォルトの名無しさん
2005/12/08(木) 01:32:540365340
2005/12/08(木) 11:29:34トップページたどれって。
全ページに連絡先入れといた方がいいのか?
>>363
それいいだすとさ、
π/2 の範囲に収まるように mod 2π とか三角関数の公式使って変換して、
sin と cos のどちらか選んで計算するとか、凝りだすときりない。
餅は餅屋と言う奴で、そういうのは数値計算屋さんにお任せしないと。
0366デフォルトの名無しさん
2005/12/08(木) 22:43:03ウェブページの作り方的な話なら、
全ページにaddress要素は入れるのが基本
address要素内には連絡先として通常メールアドレスが入る
■ このスレッドは過去ログ倉庫に格納されています