Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Tema Metode Numerice
Enunt :
O curba plana este delimitate de semiunda sinusoidei sinx=y si axa OX. Sa se determine volumul corpului generat prin rotirea curbei in jurul axei OX folosind formula Simpson.Tema va contine:
a) Prezentarea metodei de rezolvare
b) Schema logica a algoritmului pentru integrare
c) Rezolvarea in foaia de calcul
d) Procedura VB pentru automatizarea rezolvarii in foaia de calcul
e) Programul de rezolvare a problemei de integrare prin metoda Simpson folosind unul din limbajele C++ sau FT95
Etapele de rezolvare:
1.Formularea problemei si alegerea metodei de rezolvare
2.Eloborarea algoritmului de calcul si a schemei logice
3.Elaborarea foii de calcul Excel,automatizare VB
4.Elaborarea programului C++
5.Observatii asupra rezolvarii
1.Formularea problemei si alegerea metodei de rezolvare:
Se pune problema calcularii volumului de rotatie al unei curbe plane cunoscute in jurul axei OX impunandu-se ca in calculul acestuia sa se foloseasca metoda Simpson de integrare.Aceasta foloseste urmatoarea formula de calcul:
I=
Se pot face urmatoarele precizari :
a) h reprezinta distanta dintre puncte (deci punctele sunt echidistante).
h=(x2-x1)/(n-1)
b) n reprezinta nr de puncte si trebuie sa fie impar.
c) coeficientul are calori diferite : 1 pentru i=1 sau i=n, 2 pentru i par, 4 pentru i impar.
Se observa insa ca metoda Simpson nu rezolva problema .Astfel se cauta o formula ce face legatura intre integrala unei functii si volumul de rotatie.
Ne ajuta analiza matematica cu urmatoarea formula:
V= dx
Astfel problema este rezolvata.Se va calcula patratul functiei sinus,iar cu ajutorul metodei Simpson vom calcula integrala acesteia,deci volumul de rotatie.
Deci V obtinut prin rotatia curbei sinx in jurul axei OX se obtine ci formula:
V= dx=
2.Eloborarea algoritmului de calcul si a schemei logice
Date de intrare:
a- limita inferioara a intervalului (x1)
b- limita superioara a intervalului (x2)
n- nr de noduri
Etape:
-citire date
-calculare h
-creare vectori x(i)=x(i-1)+h
y(i)=sinx(i)
c(i)=
-evaluarea sumei suma=
3.Elaborarea foii de calcul Excel ,automatizare VB
Foaia de calcul urmareste principiul schemei logice .Astfel dupa introducerea datelor n(b3),a(b4),b(b5) se calculeaza valoarea pasului h(b6)=(B5-B4)/(B3-1).
Se calculeaza vectorul x(i)= x(i-1)+$B$6,se calculeaza vectorul alfa: =IF(OR(B8=1,B8=$B$3),1,(IF(MOD(B8,2)=0,2,4)))
Se calculeaza patratul vectorului si produsul acestuia cu vectorul y(i)=B12*B12*B14 pe linia 16.
Apoi se calculeaza suma acestei linii ce reprezinta volumul intermediar: =SUM(B16:N16).
Pentru a obtine rezultatul final se aplica formula: =B6*PI()*B18/3.
Verificarea din C27 are baza matematica dupa ce s-a calculat matematic volumul de rotatiei a functiei sin pe domeniul ales anterior.
Rezultatul macro are la baza o procedura VB ce a fost relationata cu foaia Excel prin intermediul butonului Macro Simpson .Codul procedurii este urmatorul si urmareste principiile exprimate in schema logica:
Option Base 1
Sub VolRot()
Dim x(100) As Double
Dim y(100) As Double
Dim c(100) As Integer
Dim h As Double
Dim i As Integer
Dim suma As Double
Dim a As Double
Dim b As Double
Dim n As Integer
n = Application.InputBox('NR de puncte: ')
If (n Mod 2 = 0) Then
MsgBox 'N trebuie sa fie impar!! '
Exit Sub
End If
a = Application.InputBox('limita inferioara: ')
b = Application.InputBox('limita superioara: ')
h = (b - a) / (n - 1)
x(1) = a
For i = 2 To n Step 1
x(i) = x(i - 1) + h
Next i
For i = 1 To n Step 1
y(i) = Sin(x(i))
Next i
For i = 1 To n Step 1
If ((i = 1) Or (i = n)) Then
c(i) = 1
ElseIf (i Mod 2 = 0) Then
c(i) = 2
Else
c(i) = 4
End If
Next i
suma = 0
For i = 1 To n Step 1
suma = suma + y(i) * y(i) * c(i)
Next i
suma = h * suma * Application.WorksheetFunction.Pi() / 3
Application.Worksheets('sheet1').Cells(24, 3).Value = suma
End Sub
4.Elaborarea programului C++
Programul C++ urmeaza acelas principiu exprimat in schema logica,si urmat in procedure VB cu diferenta de limbaj:
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
void main()
cout<<'Dati limita inferioara: ';
cin>>a;
cout<<'Dati limita superioara: ';
cin>>b;
h=(b-a)/(n-1);
x[1]=a;
for(i=2;i<=n;i++)
for(i=1;i<=n;i++)
for(i=1;i<=n;i++)
suma=0;
for(i=1;i<=n;i++)
suma=suma*h*acos(-1)/3;
cout<<'Volumul de rotatie este: '<<suma;
line100:
getch();
5.Observatii asupra rezolvarii
O atentie speciala s-a acordat citirii numarului de noduri n ce trebuie sa fie impar ,aceasta conditie s-a impus prin metode specifice in fiecare limbaj,insa acest fapt poate fi ignorat in foaia de calcul deci ATENTIE!
Difernta de rezultat poate fi cauzata de erorile acceptate de fiecare limbaj sau de datele aproximative introduse de utilizator(de ex valoarea lui in limbajul C++ in momentul citirii valorii superioare a intervalului),totusi eroarea este de valori de ordinal a .
Verificarea din foaia de calcul excel are la baza rezolvarea analitica a acestei probleme de calcul.
Copyright © 2024 - Toate drepturile rezervate