Lezione del 12/5/2014¶
Uso dei blocchi in Ruby
File blocchi.rb
1#!/usr/bin/env ruby
2#-------------------------------------------------------------------------#
3# Esercitazioni in Laboratorio per il Corso di #
4# Fondamenti di Informatica e Calcolo Numerico, AA 2013/2014 #
5# #
6# Autori: Enrico Bertolazzi e Carlos Maximiliano Giorgio Bort #
7# Dipartimento di Ingeneria Industriale, Universita` di Trento #
8# Sito web: http://www.ing.unitn.it/~bertolaz/ #
9# #
10# Contatti: enrico.bertolazzi@unitn.it, cm.giorgiobort@unitn.it #
11# #
12# Copyright (c) 2014 E.Bertolazzi e C.M. Giorgio Bort #
13#-------------------------------------------------------------------------#
14
15#ary = [11,22,33,44,55]
16#ary.each do |el|
17# puts el
18#end
19#
20#ary.each{|el| puts el }
21
22class Array
23 def ogni() # each
24 puts "2. Entrato nella funzione ogni"
25 for i in 0...self.size
26 puts "3. Inizio chiamata blocco"
27 yield(self[i])
28 yield(i)
29 puts "4. Fine chiamata blocco"
30 end
31 puts "5. Uscita dalla funzione ogni"
32 end
33
34 def ogni_con_indice() # each_with_index
35 for i in 0...self.size
36 yield(self[i], i)
37 end
38 end
39end
40
41module ValutaOperazioni
42 def self.sqrt(x)
43 return Math::sqrt(x)
44 end
45
46 def self.pow2(x)
47 return x*x
48 end
49end
50
51
52
53module StampaOperazioni
54 def self.sqrt(x)
55 puts Math::sqrt(x)
56 end
57
58 def self.pow2(x)
59 puts x*x
60 end
61end
62
63
64
65bary = ['11','22','33','44']
66#puts "1. Definito array bary"
67#bary.ogni do |el|
68# puts el
69#end
70#puts "6. Uscita dal programma"
71bary.ogni_con_indice do |el, indx|
72 res = StampaOperazioni::pow2( el.to_f )
73 puts "#{el} -> #{res.inspect}"
74end
Integrazione col metodo dei trapezi (versione senza blocchi)
File trapezi_semplice.rb
1#!/usr/bin/env ruby
2#-------------------------------------------------------------------------#
3# Esercitazioni in Laboratorio per il Corso di #
4# Fondamenti di Informatica e Calcolo Numerico, AA 2013/2014 #
5# #
6# Autori: Enrico Bertolazzi e Carlos Maximiliano Giorgio Bort #
7# Dipartimento di Ingeneria Industriale, Universita` di Trento #
8# Sito web: http://www.ing.unitn.it/~bertolaz/ #
9# #
10# Contatti: enrico.bertolazzi@unitn.it, cm.giorgiobort@unitn.it #
11# #
12# Copyright (c) 2014 E.Bertolazzi e C.M. Giorgio Bort #
13#-------------------------------------------------------------------------#
14
15#
16# Esempio di integrazione numerica,
17# uso della formula dei trapezi per integrare
18# x*sin(x) nell'intervallo [1,10]
19#
20
21def f(x)
22 return x*Math::sin(x)
23end
24
25#
26# Metodo dei trapezi
27# a = estremo sinistro intervallo di integrazione
28# b = estremo destro intervallo di integrazione
29# n = numero di intervalli
30#
31def trapezi( a, b, n )
32 h = (b.to_f-a.to_f)/n.to_f
33 res = (f(a)+f(b))/2
34 for i in 1...n do
35 xi = a+i*h # calcolo nodo di quadratura interno
36 res += f(xi) ;
37 end
38 return res*h
39end
40
41# integrale esatto calcolato "a mano"
42esatto = Math::sin(10)-10*Math::cos(10)
43
44a = 0
45b = 10
46
47n = 10
48trap = trapezi(a,b,n)
49puts "trapezi(#{a},#{b},#{n}), I = #{trap}, Errore = #{trap-esatto}"
50
51n = 20
52trap = trapezi(a,b,n)
53puts "trapezi(#{a},#{b},#{n}), I = #{trap}, Errore = #{trap-esatto}"
54
55n = 40
56trap = trapezi(a,b,n)
57puts "trapezi(#{a},#{b},#{n}), I = #{trap}, Errore = #{trap-esatto}"
58
59n = 80
60trap = trapezi(a,b,n)
61puts "trapezi(#{a},#{b},#{n}), I = #{trap}, Errore = #{trap-esatto}"
62
63n = 160
64trap = trapezi(a,b,n)
65puts "trapezi(#{a},#{b},#{n}), I = #{trap}, Errore = #{trap-esatto}"
Integrazione col metodo dei trapezi (versione CON i blocchi)
1#!/usr/bin/env ruby
2#-------------------------------------------------------------------------#
3# Esercitazioni in Laboratorio per il Corso di #
4# Fondamenti di Informatica e Calcolo Numerico, AA 2013/2014 #
5# #
6# Autori: Enrico Bertolazzi e Carlos Maximiliano Giorgio Bort #
7# Dipartimento di Ingeneria Industriale, Universita` di Trento #
8# Sito web: http://www.ing.unitn.it/~bertolaz/ #
9# #
10# Contatti: enrico.bertolazzi@unitn.it, cm.giorgiobort@unitn.it #
11# #
12# Copyright (c) 2014 E.Bertolazzi e C.M. Giorgio Bort #
13#-------------------------------------------------------------------------#
14
15#
16# Esempio di integrazione numerica,
17# uso della formula dei trapezi per integrare
18# x*sin(x) nell'intervallo [1,10]
19#
20
21def f(x)
22 return x*Math::sin(x)
23end
24
25#
26# Metodo dei trapezi
27# a = estremo sinistro intervallo di integrazione
28# b = estremo destro intervallo di integrazione
29# n = numero di intervalli
30#
31def trapezi( a, b, n ) # argomento nascosto: blocco
32 h = (b.to_f-a.to_f)/n.to_f
33 res = (f(a)+f(b))/2
34 for i in 1...n do
35 xi = a+i*h # calcolo nodo di quadratura interno
36 res += yield(xi) ;
37 end
38 return res*h
39end
40
41# integrale esatto calcolato "a mano"
42esatto = Math::sin(10)-10*Math::cos(10)
43
44a = 0
45b = 10
46
47n = 10
48trap = trapezi(a,b,n){ |x| x*Math::sin(x) }
49puts "trapezi(#{a},#{b},#{n}), I = #{trap}, Errore = #{trap-esatto}"
50
51n = 20
52trap = trapezi(a,b,n){ |x| x*Math::sin(x) }
53puts "trapezi(#{a},#{b},#{n}), I = #{trap}, Errore = #{trap-esatto}"
54
55n = 40
56trap = trapezi(a,b,n){ |x| x*Math::sin(x) }
57puts "trapezi(#{a},#{b},#{n}), I = #{trap}, Errore = #{trap-esatto}"
58
59n = 80
60trap = trapezi(a,b,n){ |x| x*Math::sin(x) }
61puts "trapezi(#{a},#{b},#{n}), I = #{trap}, Errore = #{trap-esatto}"
62
63n = 160
64trap = trapezi(a,b,n){ |x| x*Math::sin(x) }
65puts "trapezi(#{a},#{b},#{n}), I = #{trap}, Errore = #{trap-esatto}"