Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
introduction to modern numerical analysis
Search
N@N
December 19, 2015
Technology
0
140
introduction to modern numerical analysis
数物セミナー冬の大談話会2015 in 大阪での発表資料
N@N
December 19, 2015
Tweet
Share
More Decks by N@N
See All by N@N
Finite Automaton equivalents to Regular Expression
spark6251
0
110
Programmer and English
spark6251
0
110
Let's go to the study session
spark6251
0
93
Quantum Computation
spark6251
0
260
Introduction to use Grunt
spark6251
0
79
Introduction to Regular Expression
spark6251
0
330
Introduction to SCSS+COMPASS
spark6251
0
260
Introduction to Psychology
spark6251
1
250
Introduction to HTML5
spark6251
0
260
Other Decks in Technology
See All in Technology
3年でバックエンドエンジニアが5倍に増えても破綻しなかったアーキテクチャ そして、これから / Software architecture that scales even with a 5x increase in backend engineers in 3 years
euglena1215
9
3.7k
Storage Browser for Amazon S3
miu_crescent
1
300
社内イベント管理システムを1週間でAKSからACAに移行した話し
shingo_kawahara
0
200
多様なメトリックとシステムの健全性維持
masaaki_k
0
120
事業貢献を考えるための技術改善の目標設計と改善実績 / Targeted design of technical improvements to consider business contribution and improvement performance
oomatomo
0
160
レンジャーシステムズ | 会社紹介(採用ピッチ)
rssytems
0
290
WACATE2024冬セッション資料(ユーザビリティ)
scarletplover
0
330
メンタル面でもつよつよエンジニアになる/登壇資料(井田 献一朗)
hacobu
0
120
ハイテク休憩
sat
PRO
2
180
pg_bigmをRustで実装する(第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
shinyakato_
0
120
[Oracle TechNight#85] Oracle Autonomous Databaseを使ったAI活用入門
oracle4engineer
PRO
1
140
2024年にチャレンジしたことを振り返るぞ
mitchan
0
150
Featured
See All Featured
A Philosophy of Restraint
colly
203
16k
Building Adaptive Systems
keathley
38
2.3k
Raft: Consensus for Rubyists
vanstee
137
6.7k
Faster Mobile Websites
deanohume
305
30k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
KATA
mclloyd
29
14k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Producing Creativity
orderedlist
PRO
342
39k
YesSQL, Process and Tooling at Scale
rocio
170
14k
The World Runs on Bad Software
bkeepers
PRO
66
11k
The Cult of Friendly URLs
andyhume
78
6.1k
Transcript
None
• • •
• • • • • •
•
• • •
• • • •
! #include <iostream> int fact(int n) { if(n == 0)
{ return 1; } return n*fact(n-1); } int main() { std::cout<<fact(10); } fact(10) -> 10 * fact(9) -> 10 * 9 * fact(8) -> 10 * ... * 1 * 1 -> 10! = 3628800
! #include <iostream> int fact(int n) { if(n == 0)
{ return 1; } return n*fact(n-1); } int main() { std::cout<<fact(10); } fact 0 = 1 fact n = n*fact(n-1) main = do print $ fact 10
! int fact(int n) { if(n == 0) { return
1; } else if(n < 0) { return -1; } return n*fact(n-1); } fact 0 = 1 fact n | n > 0 = n*fact(n-1)
•
• • • • • •
• • • • •
• • • •
• •
• •
• • • • •
• • • • • •
• • • • •
• • •
, , ∈ ℤ; 1 ≤ , , ≤ 1000
, ,
( ∈ ℤ) ∈ ℤ≥0 ; 1 ≤ ≤ =
+ +1 + ⋯ + +−1 1 ≤ ≤ − + 1
0 = 0 + 1 + ⋯ + −1 1
= 1 + 2 + ⋯ + ⋮ = + + ⋯ + + ⋮ −+1 = −+1 + −+2 + ⋯ + • × − + 1
0 = 0 + 1 + ⋯ + −1 1
= 1 + 2 + ⋯ + = 0 − 0 + ⋮ = −1 − −1 + ⋮ = −1 − −1 + • 2 − •
None
std::cin std::cout
• • •
• •
• • constexpr • #define a b • const constexpr
None
None
op binary decimal 1 0000 0001 1 1 << 6
0100 0000 64 78 0100 1110 78 78 << 5 1100 0000 192
#include <iostream> #define N 1 << 8 // 1<<8 is
256. int main() { std::cout << N * 2; } 1. 512 (256 * 2) 2. 65536 (1<<16) 3.
#include <iostream> #define N 1 << 8 // 1<<8 is
256. int main() { std::cout << N * 2; } // -> 116
#include <iostream> #define N 1 << 8 int main() {
std::cout << N*2; } // -> 116 #include <iostream> int main() { std::cout<<1<<8*2; } // -> 116
#include <iostream> #define N 1 << 8 int main() {
std::cout << N*2; } // -> 116 #include <iostream> int main() { std::cout<<1<<8*2; } // -> 116 #define
#include <iostream> int main() { constexpr int N = 1
<< 8; std::cout << N * 2; } // -> 512
#define N (1 << 8)
•
auto x = 1; // x : int auto x
= 1.3; // x : double auto x; // error!
#include <iostream> #include <vector> int main() { std::vector<int> vec =
{0, 1, 2}; for(auto const& v : vec) { std::cout << v << " "; } } // 0 1 2
•
#include <iostream> int main() { std::cout << [](int x, double
y) { return x + y; }(3, 2.2); }
#include <iostream> int main() { auto add = [](int x,
double y) {return x + y;}; std::cout << add(3, 2.2); }
#include <iostream> int main() { auto add = [](auto x,
auto y) { return x + y; }; std::cout << add(3, 2.2); }
• func(int x) • func(int &x) • func(const int &x)
#include <iostream> void func(int x) { x++; } int main()
{ int a = 42; func(a); std::cout << a << std::endl; // =>42 }
#include <iostream> void func(int &x) { x++; } int main()
{ int a = 42; func(a); std::cout << a << std::endl; // =>43 }
#include <iostream> void func(const int &x) { x++; // error!
read-only! } int main() { int a = 42; func(a); std::cout << a << std::endl; }
std::vector<int> v(10e7); // void func(std::vector<int> x) {} // void func(const
std::vector<int> &x) {}
• • • • • •
• • • • • • • • •
• •
• + −1 −1 −1 + ⋯ + 0 =
• + −1 −1 −1 + ⋯ + 0 = 0 ,
• • • • Δ
≔ lim Δ→0 + Δ − Δ Δ , ≈
+ Δ − Δ + Δ = + , Δ Δ = 0 + 0 , Δ = 0 2Δ = Δ + Δ , Δ Δ, ⋯
• • • • Δ +1 •
+1 = + Δ 6 ,1 + 2,2 + 2,3
+ ,4 , ∈ ℕ 0 = 0 ,1 = , ,2 = + 1 2 Δ, + 1 2 Δ,1 ,3 = + 1 2 Δ, + 1 2 Δ,2 ,4 = + Δ, + Δ,3
• • • • • •
• • • • •
• • • •
• • • • • #include <boost/numeric/odeint.hpp>
void ode(const T &x, T &dxdt, const double t) {
dxdt = ~~~~; } void output(const T &x, const double t) { std::cout << ~~~~; } int main() { T x; boost::numeric::odeint::integrate( ode, x, 0.0, 10.0, 0.1, output); } ∶ 0 → 10, Δ = 0.1
using namespace boost::numeric::odeint; boost::numeric::odeint::integrate integrate
using namespace std; std::cout cout
= − = − − = − , ,
= − = − − = − dxdt[0] = sigma
* ( x[1] - x[0] ); dxdt[1] = x[0] * (rho - x[2]) - x[1]; dxdt[2] = x[0] * x[1] - beta * x[2];
typedef array<double, 3> T; constexpr double sigma = 10.0; constexpr
double rho = 28.0; constexpr double beta = 8.0 / 3.0;
void ode(const T &x, T &dxdt, const double t) {
dxdt[0] = sigma * (x[1] - x[0]); dxdt[1] = x[0] * (rho - x[2]) - x[1]; dxdt[2] = x[0] * x[1] - beta * x[2]; } void output(const T &x, const double t) { cout << t << '¥t' << x[0] << '¥t' << x[1] << '¥t' << x[2] << endl; } int main() { T x0 = {10.0, 1.0, 1.0}; // initial condition integrate(ode, x0, 0.0, 25.0, 0.1, output); }
None
std::ofstream ofs("lorenz.dat", std::ios::binary);
• • http://qiita.com/ignis_fatuus/items/74c b32815753d891a716
• http://qiita.com/ignis_fatuus/items/74c b32815753d891a716
= 1 + −1 + 1 + −1 2 ,
∈ ℝ
typedef complex<double> T; constexpr complex<double> i(0.0, 1.0); void ode(const T
&x, T &dxdt, const double t) { dxdt=(1.0+eta*i)*x+(1.0+alpha*i)*norm(x)*x; } int main() { T x(5.3, -2.0); }
+ −1 −1 −1 + ⋯ + 0 = 0
• 1 1 = , 2 = , ⋯ , = −1 −1 1 = 2 , 2 = 3 , ⋯ , −1 = = − −1 + −2 −1 + ⋯ + 0 1
2 2 + + = N ⋅ s2 m ,
N ⋅ s m , N m
2 2 + + = = = − − +
• • #include <boost/units/systems/si.hpp> #include <boost/units/io.hpp> std::ostream
= 2 m, s m2, m/s 5.5 [m]
• m + m = + m • m ×
m = × m2 • m + kg → • Ω = Ω ⋅ m × m m2 • •
• [s] • [m] • [kg] • [A] • [K]
• [mol] • [cd]
#include <boost/units/systems/si/prefixes.hpp> 1012 si::tera 102 si::hecto 10−3 si::milli 10−15 si::femto
using namespace boost::units; boost::units::si::length si::length
quantity<si::length, int> len; len = 1 * si::meters; // default
: double quantity<si::length> len2(5.0*si::meter); quantity<si::mass> mass; mass = 5.0 * si::kilogram;
quantity<si::length> len(10*si::meter); quantity<si::length> len2(5.0*si::meter); cout << len + len2; //
15 m
quantity<si::length> len(10*si::meter); quantity<si::length> len2; len2 = 5.0 * si::kilo *
si::meters; cout << len + len2; // 5010 m
quantity<si::length> len(10*si::meter); quantity<si::time> time(10*si::second); cout << len / time; //
10 m s^-1
quantity<si::length> len(10*si::meter); cout << len; // 10 m s^-1 cout
<< len.value(); // 10 cout << len; // 10 m s^-1
quantity<si::mass> len(5.0*si::meter);
quantity<si::length> len(10*si::meter); quantity<si::time> time(10*si::second); cout << len + time; //
error!
#include <boost/units/pow.hpp> quantity<si::acceleration> acc(10*si::meter / pow<2>(si::second)); cout << acc; //
10 m s^-2
#include <boost/units/pow.hpp> quantity<si::acceleration> acc(10*si::meter / si::second); // error! length time2
• • • •
• • • • • http://kaworu.jpn.org/cpp/
• • http://qiita.com/hmito/items/483445ac0d4 2fb4428a5 • • http://qiita.com/t_uda/items/7712671389e 016d24df6 • •
http://qiita.com/ignis_fatuus/items/74cb 32815753d891a716
• č • • http://www.slideshare.net/konn/haskell- 6-32258528 • • • •
• • • • •
• •
• • • http://nalab.mind.meiji.ac.jp/~mk/labo/t ext/
•