IT şi electronică > Software

limbaje de programare: CAZ CONCRET. 1.

(1/3) > >>

florin_try:
 S-a discutat anterior despre limbaje de programare asa in principiu dar ma intrebam oare nu ar fi mai ilustrativ sa luam un mic exemplu concret
de exercitiu (ceva f.f. simplu) si sa il rezolvam in cit mai multe limbaje posibile, si vedem la fata locului diferenta intre limaje?

 Propun urmatorul exercitiu: Integrarea numerica prin metoda trapezelor. Asta e un exercitiu pe care fiecare elev de liceu ar putea sa il rezolve.
 
 Acest exercitiu arata cum se folosesc functii si proceduri (adica functia de integrat si procedura de integrare sa fie declarate printr-o functie de sine statatoare), ciclul repetitiv (care o fi el) , si basic IO.

 Teoria din spatele integrarii numerice e in wikipedia: http://en.wikipedia.org/wiki/Trapezoidal_rule

 Vom folosi ecuatia:

  

Datele de intrare ale problemei:
1) functia de integrare f (exemplu : f(x) = x^3 )
2) limitele de integrare a si  b (exemplu: a=2 b=4)
3) numarul de pasi de integrare n (exemplu n=1000)

Propun sa se posteze codul numai daca codul e testat ca merge si ca bonul sa ni se inedice de unde putem downloada mediul respectiv de programare free daca e posibil.

 Pseudocodul ar fi f. simplu:
1. defineste functia dfe integrat f(x)
2. defineste functia ce integreaza trapeze(f a b n)
3. calculeza integrala pentru un caz concret.


Scopul postarii e sa vedem la fata locului diferenta intre limbaje pe un caz concret.

Voi reveni cu rezolvarea pe un limbaj concret.

b12mihai:

--- Citat --- 
--- Terminare citat ---

Vad ca pe Wikipedia e putin altfel: adica suma e pana la n-1, nu pana la n...Si "ochiometric" pe grafic, sa zic asa, e pana la n-1 ca al n-lea termen al sumei din paranteza este f(a) + f(b) / 2 .

Oricum interesanta si utila regula, nu am auzit niciodata de ea, cunosti vreun site unde este si demonstrata analitic (nu numai grafic), sau explicata mai riguros?

Update, pe acelasi link de pe wikipedia am gasit implementarea in C a regulii trapezului: http://www.blikbit.com/article/42 . E buna sa ii ajute pe cei care cunosc limbajul si nu reusesc sa ii dea de cap singuri.

florin_try:
Multumesc pentru corectie.

Iata cum arata ar arata in lisp:

(defun f(x)  (* x x x) ) ; defineste functia f(x) = x^3

(defun trapez_int (f a b n)  ; asta defineste trapezele
  (let ((step (/  (- b a)  n)) ; step = (a-b)/n   
         (s0 (/  (+ (funcall f a) (funcall f b)) 2)) ; s0 = fa+fb/2
         (x a))  ; x = a
    (loop for i from 1 to (1- n) do ; for (i=0 i<n i++){}
          (incf x step) ;x=x+h
          (incf s0 (funcall f x))
     ) ; s0 = s0+f(x)
    (* s0 step ) ; trapez_int=s0*h
 ))

Ca sa o calculez i-am dat:

(trapez_int f 2 4 100) ; asa accesez integrarea de la 2 la 4 in 100 pasi.

REZULTATUL : 150003/2500
 
(trapez_int f 2 4 1000)  ; (in o mie pasi integrare)
rezultatul: 15000003/250000

Ca sa obtin rezultatul ca numar real si nu rational am inmultit totul cu 1.0 adica:

(* (trapez_int 'f 2 4 1000) 1.0)
REZULTATUL : 60.000012


-------

Am folosit lisp corman (www.cormanlisp.com/download.html ) care e free pentru 30 zile.


florin_try:

Iata-l si in javascript / html.

Tot ce trebuie facut e de salvat fisierul cu continutul de mai jos in extensia .html si de incarcat intr-un browser
textul cu rosu e scriptul de calcul
textul cu bold albastru a apelul propriu zis al functiei de integrare. Ultimul numar e numarul de pasi de incarcare.
Cu o mie pasi integrare imi da: 60.00001199999256
cu o suta pasi integrare imi da: 60.00120000000006


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <title> first test html/javascript </title>
  </head>
  <body>
 
  <div id="results"></div>

  <script>
   function f(x) { return x*x*x }
   function trapez_int(f,a,b,n){
     var step = (b-a)/n
     var s0 = (f(a)+f(b))/2
     var x=a;
     for (var i=1;i<n;i++) {
      x += step
      s0 += f(x)
     }
     return s0*step;
   }
   //alert('Int='+trapez_int(f,2,4,1000));
  </script>
 
  <script>
    x=document.getElementById('results')
 x.innerHTML='Integral='+ trapez_int(f,2,4,1000)
    document.getElementById('results').style.fontSize=26;
  </script>

  </body>
</html>

florin_try:
Iata-l si in java. Sunt mai multe moduri de a programa asta; am ales pe cel mai 'rudimentar'

Pentru java am instalat netbeansul ca mediu de programare ( http://netbeans.org/ ) si desigur aveam java instalat
(e free de la sun: http://www.java.com/en/download/index.jsp )
La 100 pasi integrare mi-a dat: Int=60.00120000000006
La 1000  pasi ntegrare a dat Int=60.00001199999256
Pasii de integrare se modifica de la textul cu albastru, ultima valoare . Nu mi-am atut capul sa le mai citesc de la consola.

codul
---------------------

package javaapplication11;

public class Main {

    public static void main(String[] args) {
        System.out.print("Int="+trapez_int( 2, 4, 100) );
    }

   private static double f( double x) { return x*x*x; };

   private static double trapez_int( double a, double b, int n) {
     double step = (b-a)/n;
     double s0 = (f(a)+f(b))/2;
     double x=a;
     for (int i=1;i<n;i++){
        x+=step;
        s0+=f(x);
     }
     return s0*step;
   };
}

Navigare

[0] Indexul de Mesaje

[#] Pagina următoare

Du-te la versiunea completă