Výpočet integrálu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Výpočet integrálu – C / C++ – Fórum – Programujte.comVýpočet integrálu – C / C++ – Fórum – Programujte.com

 

Pavelv0
Stálý člen
18. 1. 2014   #1
-
0
-

Zdravím,

pokusím se upřesnit svůj problém. Měřím v obvodu napětí a proud a počítám zdánlivý výkon, protože se nejedná o nijak pravidelné průběhy, je třeba to počítat přes integrál, tzn spočíst efektivní hodnoty napětí a proudu a vynásobit mezi sebou. Zasekl jsem se již na začátku, a to že nevím jak spočíst integrál. Pro jednoduchost jsem si vybral, že zkusím spočíst střední hodnotu lineárního průběhu u(t)= t. Ta se počítá jako 1/T int( u(t) )dt, když jsem to zintegroval a dosadil meze 0-4 vyšla mi střední hodnota 2, což je správně. Pak jsem to spočítal diskrétně a tedy dosadil jsem navzorkovaný data v čase[0,1,2,3,4] kterým odpovídaj hodnoty [0,1,2,3,4] vyšlo mi (0+1+2+3+4)/5 = 2 což je také správně. Tak jsem se rozhodl spočítat efektivní hodnotu metodou integrace mi vychází 2,3 což je správně, ale pokud to spočtu diskrétně, a to tak, že Uef = sqrt( 1/T int( u(t)^2 ) dt). Dosadím Uef = sqrt ((0*0+1*1+2*2+3*3+4*4)/5) a dostanu výsledek 2,45 a to je špatně, kde dělám chybu, nebo jak jinak integrál spočíst?

Nahlásit jako SPAM
IP: 212.79.110.–
sleepy
~ Anonymní uživatel
422 příspěvků
18. 1. 2014   #2
-
0
-

Ako si prisiel na to ze 1/T int (u(t), dt, a , b) = sqrt(1/Tint(u^2(t), dt, a, b). To neplati. A druha vec ty pocitas kvadraticky (alebo nieco tomu podobne) priemer nie aritmeticky, ako v prvom pripade. A to ti vzcsinou vide ine. A taka podotazka vies ako sa pocita numericky integral?

Nahlásit jako SPAM
IP: 147.175.177.–
Pavelv0
Stálý člen
18. 1. 2014   #3
-
0
-

#2 sleepy
já neříkám že to je stejné, v prvním případě se jedná o střední, ve druhém o efektivní hodnotu. Jak mam tedy spočíst efektivní hodnotu? Ano vim jak se počítá...

Nahlásit jako SPAM
IP: 212.79.110.–
sleepy
~ Anonymní uživatel
422 příspěvků
18. 1. 2014   #4
-
0
-

#1 Pavelv
Navyse existuje taky vztah medzi nimi: (Δs)^2 = |s^2(x)| - s_ap(x)^2. Kde Δs je standardna odchylka |s^2(x)| = sqrt(1/(b-a) int(f^2(x), dx, a, b)) a s_ap(x) = 1/(b-a)int(f(x),dx, a, b).

Nahlásit jako SPAM
IP: 147.175.177.–
sleepy
~ Anonymní uživatel
422 příspěvků
18. 1. 2014   #5
-
0
-

#3 Pavelv

No na to treba pouzit vzorec, napr.simpson: int (g(x), dx, a, b) ~ (a-b)/6 * [f(a) + 4*f((a+b)/2) + f(b)]. Ale mozes si vystacit aj s lychobeznikom. Len to nebude tak presne, Simpson koverguje rychlejsie. V tvojom pripade bude jeden integeral [0,1,2] a druhy [2,3,4].
Cize: 2/6 *(0 - 4*1^2+2^2) + 2/6 * (2^2 - 4*3^2 + 4^2) = 64/3 => integral predelis 5 => 64/15 => sqrt => 2.06559. Ak by som sa pokusil za u(t) = t dosadit najdendouchsiu funkciu, ktora splna [0,1,2,3,4]->[0,1,2,3,4]. Integral znov vide 64/15. Samozrejme tato funkcia nemusi, korelovat z realitou a preto pre simpsona existuje odhad chyby a to taky err f(x) ~ 1/90 * ((b-a)/2)^5 * |f^(4)(c)|, kde c patri intervalu <a,b>. Toto som vypocital s chubou 1/90 * |d^4 f(c)/dx^4|, kde c je hodnota z <a,b>. Vzdy sa pocita sup x \is <a,b> tohto, teda vybres cislo take pri ktorom vies ze bude najvacsia hodnota. A to je chyba tohoto vypoctu.

Nahlásit jako SPAM
IP: 147.175.177.–
sleepy
~ Anonymní uživatel
422 příspěvků
18. 1. 2014   #6
-
0
-

#1 Pavelv
Ale po pravde neviem z coho si vypocital to 2,3. To by si mohol napisat, lebo takto mi vychadza pre kade x_i = [0,1,2,3,4] je f(f_i) = [0,1,2,3,4], ze f(x) = x;

Nahlásit jako SPAM
IP: 147.175.177.–
Pavelv0
Stálý člen
19. 1. 2014   #7
-
0
-

#6 sleepy
sqrt( 1/T int u(x)^2 dx , 0 , 4) = sqrt ( 1/4 int x^2 dx , 0, 4) = sqrt (4^3/12 - 0) = sqrt (64/12) = 2,3

Jinak efktivní hodnota pilového průběhu, jako je tento, se dá také spočíst jako Umax/1.73. Ta konstanta je odmocnina ze 3. Ale to už odbočujem od tématu

Nahlásit jako SPAM
IP: 212.79.110.–
sleepy
~ Anonymní uživatel
422 příspěvků
19. 1. 2014   #8
-
0
-

Jaj tak tam mas 1/4  nie 1/5, popravde len som to odpisal bez uvazovania. No ale to musi sediet aj ten Simpson. Cize pouzi simpsona napr. V tomto pripdae da uplne presnu hodnotu ~ 2,309...., lebo Simpson prave pre kvadraticke funkcie dava absolutne prenu hodnotu . Je to ten isty vysledok. A Simpson pre n = 2*k bodov je nasledovny: Int(f(x)dx, a, b) ~ h/6 * ( f(x_0) + 4*f(x_1) + 2*f(x_2) + 4*f(x_3) + 2*f(x_4) + .... + 4*f(x_n-1) + f(x_n) ), ak mas rovnomerne rozlozenie bodov tak h je vzdialenost od x_j po x_j+2. V podstate ako to co som pisal vyssie, len je toho viac scitaneho do kopy. Tu ti dam link: http://en.wikipedia.org/wiki/Simpson's_rule. Inak Simpson funguje na tom principe, ze urobis kvadraticky spline a ten pointegrujes.

Nahlásit jako SPAM
IP: 147.175.177.–
Pavelv0
Stálý člen
19. 1. 2014   #9
-
0
-

#8 sleepy
Díky, musím o tom ještě něco nastudovat. Potřebuji totiž počítat výkon signálu který se trochu obdélníku podobá, takže by ta chyba nemusela být tak velká. Potřebuji to však počítat co nejjednodušeji, protože aplikace poběží na signálovém procesoru, bez FPU.

Nahlásit jako SPAM
IP: 212.79.110.–
Pavelv0
Stálý člen
19. 1. 2014   #10
-
0
-

#9 Pavelv
Ovšem jak tak koukám, simpson mi to spočte pouze z krajů, případně s definovaných hodnot, jde mi o to, že mám posloupnost cca 1000 čísel která reprezentuje nějakou funkci a potřebuji docela přesně spočítat její integrál, přesnost aspoň 99,9%

Nahlásit jako SPAM
IP: 212.79.110.–
KIIV
~ Moderátor
+43
God of flame
19. 1. 2014   #11
-
0
-

#10 Pavelv
presnost zalezi na zvolene metode a poctu kroku, ve kterych zname hodnotu..  Simpson se obvykle pocita pro sousedni prvky (ale musis byt schopen vypocitat funkcni hodnotu uprostred mezi nima - jinak bys musel postupovat po trojicich), je pro cely interval (to samy ruzny obdelnikovy metody - lepsi je asi ta, co vypocte prumer mezi sousedama a z toho udela obsah, nebo se dela obsah +-1/2 h okolo ty namereny hodnoty, nebo lichobeznikova metoda (spocita se obsah jako by mezi f(a) a f(b) byla primka))

Nahlásit jako SPAM
IP: 94.113.93.–
Program vždy dělá to co naprogramujete, ne to co chcete...
sleepy
~ Anonymní uživatel
422 příspěvků
19. 1. 2014   #12
-
0
-

#11 KIIV
Ano, ale Simpsona mozes pozuit aj tak ze, vzdialenost medzi bodmi nedas jeden interval od x_i po x_i+1, ale 2 od x_i po x_i+2. Ja som ho len spomenul pretoze ako som hovoril, on konvarguje valmi rychle O(h^5). Kdezto lychobeznik a obdlznik, konverguju pomalsie O(h^3). Ale je pravda, ze su jednoduchie, a ak to ma skorej obdlznikovy charakter Simpson nieje najlepsi kandidat, lichobeznik a obdlznik ti daju presne hodnoty. Inak k tej postupnosti ak je to parny pocet cisel, tak si zahojeny. Namiesto nasobenia mozes pouzit bitshift (su tam nasobky iba (1,2,4), ak mas pravidelne rozlozenie. Musis asi nais co ti vyhovuje najviac. Inak neviem ci sa dobre rozumieme, napisem kod ako by som to robil pre simpsona:

long I = 0.; // Zle oznacenie, ale velkym I sa oznacuje integral v Matematike
int[] y;
int length = ...
int h = // interval od x_i po x_i+2 predpoklad vsetky intervali su rovanko velke
I = y[0]
for (int j=1; j < length-1; j++){
	if ( j % 2) {
		I += (y[j]<<1) // 2*y[j]
	} else {
		I += (y[j]<<2) // 4*y[j]
	}
}
I += y[length-1];
I = (I * h)/6;

Ak 4 derivacia danej funkcie nebude prilis divoka a teda |f^(4)(x)| <= 1 a interval bude 2 tak sa do danej presnosti uplne v pohode zmestis. Ak ale potrebujes este vacsiu presnonst, a funkcia nemusi mat nutne charakter linearnej alebo kvadratickej funkcie (aspon na podintervaloch). Tak budes asi musiet siahnu po niecom silnejsom napriklad 3/8 Simpson. Inak tu su vsetky zakladne newton-cottesove http://en.wikipedia.org/wiki/Newton-Cotes_formulas vzorce pre numericky vypocet integralu. Zalezi velmi na tom ako mas definovany interval. Su tam aj vzorce pre otvorene konce.

Nahlásit jako SPAM
IP: 147.175.177.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 72 hostů

Podobná vlákna

Vypocet pi — založil Nemo_001

Výpočet na GK — založil Midnight

Vypocet v C# — založil vyhno

Vypočet faktorialu — založil robbie

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý