Ahoj lidi, potřeboval bych poradit s jedním programem.
Mám zadání:
Napište program pro přibližný výpočet určitého integrálu z funkce
f(x) = arctg(x2+1)/(2+x4)
na intervalu [-2,1] pomocí levé obdélníkové formule, interval rozdělte na N stejně dlouhých úseků. V programu použijte procedury nebo funkce. Program proveďte pro N=10, 100, 1000.
No a nevím jak napsat ten integrál. Funkci jsem si přepsal jako [(1/(sin/cos))(x sqr+1)]/(2+x sqr sqr) ale s tím jak to celé zapsat už si rady nevím. Budu rád za jakoukoliv radu. Díky za pomoc. Pomeranc
Fórum › Delphi
Integral v Delphi - poraďte prosím :)
V Delphi si napíšeš pár funkcí a máš to :-)
type TInterval = record
a : double;
b : double;
end;
function MojeFunkce(x:double):double;
begin
result := ArcTan(...;
end;
function VratIntegral(Interval: TInterval; N: integer): double;
var dx : double;
X, F, S : double;
begin
if N = 0 then
begin
raise Exception('Pocet kroku musi byt nenulovy');
end;
dx := (Interval.b - Interval.a) / N;
S := 0;
X := Interval.a;
for i := 0 to N-1 do
begin
F := MojeFunkce(X);
S := S + F * dx;
X := X + dx;
end;
result := S;
end;
Pak staci volat funkci VratIntegral pro zadany interval a pocty kroku.
Double je typ real, který má větší rozsah.
Exception - vyhodí chybu. Místo toho můžeš třeba vrátit nulu a skončit, je to ošetření hraničního případu.
A nespoléhej se při učení programování jen na to, co vám řeknou ve škole, existuje i nápověda a spousta informací na webu.
Ahoj, potřeboval bych aspoň nějak naťuknout ohledně programu na výpočet integrálu odlélníkovou metodou se středními hodnotami. Potřebujem to do školy a tohle je pro mne španělská vesnice, skoro nechápu, jak to funguje a tak, jelikož to učitel moc neumí vysvětlit a asi 9/10 lidí z toho neudělá zápočet. Máme N postupně zvyšovat na dvojnásobek tak, aby přesnost byla na 4 desetinná místa s předem daným výsledek té funkce. Rád bych to dělal sám, jenže i kdybych nad tím seděl do Vánoc, nevymyslím snad nic, tak kdyby se někdo ochotný našel a nějak mi s tím pomohl, byl bych moc rád.
Děkuju moc za ochotu, snad se ještě najdou lidé, kteří pomohou.
To Petr
Nejdříve je třeba si uvědomit co znamená výpočet určitého integrálu.
Je to vlastně plocha pod funkcí f(x) v mezích a,b. To je plocha omezená
fcí f(x) a přímkami x=a, x=b a y=0.
Protože integrál je dán předpisem Integrál(f(x0)dx) je zřejmé, že ho můžeme v nějakém přiblížení
nahradit součtem ploch obdélníčků, které mají jednu stranu dlouhou y=f(x) a druhou dx.
(to platí pro obdélníkovou metodu)
Pozn. 1. U lichoběžníkové metody se počítá místo s obdélníky s lichoběžníky.
2.Znak integrálu vznikl "narovnáním" znaku pro sumu (velké řecké sigma)
Pro tvůj případ, kdy máš počítat obdélníkovou metodou se střední hodnotou, počítáš první stranu obdélníka
y0=f(a+dx/2) tj. v polovičce intervalu vzniklého tak, že dx= (b-a)/n, kde n je počet dělení. Délka druhé
strany je pak dx. V cyklu pak projdeš všechny úseky (od 0 do n-1) kdy k předešlému x přičteš dx (x := x+dx)
Takto vypočítáš jednotlivé plochy a ty sečteš a máš přibližnou hodnotu integrálu. (můžeš sčítat přímo v cyklu, S:=S+f(x)*dx)
K druhé otázce, tj. počítání na určitou přesnost (metoda se jmenuje "metoda půlení intervalu")
1. v nějaké opakující se podmínce (while nebo repeat) porovnáváš vypočtenou hodnotu integrálu s tou přesně zadanou
do té doby, dokud absolutní hodnota jejich rozdílu je větší než požadovaná přesnost. (jde to dělat i tak, že počítáš
rozdíl mezi dvěma následujícími hodnotami výpočtu integrálu - to když nemáš zadanou přesnou hodnotu)
2.Vlastní algoritmus metody půlení intervalu.
Začneš s počtem dělení n=1, tj. dx=(b-a)/1.
Vypočítáš integrál a porovnáš ho s danou přesnou hodnotou. Pokud rozdíl bude větší než přesnost zvýšíš počet dělení
na n := 2*n (v druhém kroku tedy bude n=2*1=2, atd.)
Takto pokračuješ v podmíněném cyklu až do doby, kdy rozdíl přesné hodnoty a vypočteného integrálu bude menší
než požadovaná přesnost.
Pozn. U tvého případu je ještě vhodné, pro případ, že bys zadal špatně tu přesnou hodnotu do toho podmíněného cyklu
dát omezení, počtu kroků, aby se podmínka nezacyklila.
Takový malý nástin programu:
Mějme n - počet dělení, x - hodnota (číslo), ve kterém počítáme hodnotu fce f(x),
dx - velikost kroku, vysl-přesná hodnota integrálu, tol - požadovaná přesnost, S - výsledek (hodnota integrálu)
a nadefinovanou funkci function VypHod(x: Extended): Extended; //Funkce pro výpočet hodnoty pro dané x
begin
Result := napsat funkci,která je zadaná (s neznámou x)
end;
Pak pro celý výpočet to může vypadat asi takto:
{vysl := ....; //Zadat přesný výsledek
tol := ...; //Zadat toleranci}
n := 1; //Začínáme s dělením 1 - obdélníková metoda
S := 1035.1234; //Počáteční hodnota integrálu - jenom aby na začátku nebyla splněna podmínka
while (abs(S-vysl)>tol)and(n<100000) do //(n<100000) tam je jenom proto, aby se to
begin //nemohlo zacyklit, když se spleteme s přesnou hodnotou
S := 0;
dx := (b-a)/n;
x := a+dx/2;
for i := 0 to n-1 do //Výpočet integrálu složenou obdelníkovou metodou
begin
S := S+VypHod(x)*dx;
x := x+dx;
end;
n := 2*n;
end;
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
INTEGRÁL, poraďte někdo, prosím. — založil marek5
úkol, v delphi poraďte prosím s úpravou matice — založil Martenzit
Integrál v delphi — založil lusishka
Prosím poraďte — založil 14 letý kid
Prosím poraďte... — založil V. S.