Algortimus funkce cos(x) – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Algortimus funkce cos(x) – C / C++ – Fórum – Programujte.comAlgortimus funkce cos(x) – C / C++ – Fórum – Programujte.com

 

V0
Duch
28. 5. 2017   #1
-
0
-


Dobrý den, do školy jsem dostala, pro mě neřešitelný, úkol v programu Microsoft Visual C#. Mám sestavit algoritmus, který vypočte se zadanou přesností hodnotu funkce cos(x). Přiložila jsem obrázek této funkce. Budu ráda za každou pomoc nebo řešení. 

Připojen obrázek.

Připojen obrázek.

Nahlásit jako SPAM
IP: 2a00:1028:9198:875a:d176:...–
gna
~ Anonymní uživatel
1853 příspěvků
28. 5. 2017   #2
-
0
-

Neumíš napsat cyklus na násobky dvou a otáčení znaménka?

Jinak teda i tu první jedničku můžeš napsat jako další kroky, pokud půjdeš od nuly: 0^0 / 0! = 1 / 1.
To otáčení znaménka můžeš udělat násobením 1 nebo -1 a to zase můžeš spočítat podle kroku cyklu.

Takže úplně obecně takhle:

sum = 0;
for (i = 0; i <= max; i++)
    sum += (pow(-1, i) * pow(x, i * 2)) / fac(i * 2);

Milionkrát řešená věc, kterou by nějak měl zvládnout každý.

Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1853 příspěvků
28. 5. 2017   #3
-
0
-

Teda x^0 / 0! = 1 / 1.

Nahlásit jako SPAM
IP: 213.211.51.–
Kit+15
Guru
28. 5. 2017   #4
-
0
-

#2 gna
A teď ještě jednou bez použití neefektivních funkcí pow() a fac(), protože jinak jí to učitel určitě omlátí o hlavu.

Nahlásit jako SPAM
IP: 81.19.2.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
28. 5. 2017   #5
-
+1
-
Zajímavé
Kit +

#4 Kit
Jen doplním:

4! = 2! * 3 * 4
6! = 4! * 5 * 6

a podobně s mocninama
x^4 = x^2 * x^2
x^6 = x^4 * X^2

kde x^2 je x*x

Určitě to jde udělat v cyklu. V podstatě jsou třeba 3 proměnné - jedna si pamatuje "okamžitou" mocninu x, druhá "okamžitý" faktoriál a třetí znaménko jako "okamžitou" mocninu -1

hu

Nahlásit jako SPAM
IP: 193.86.81.–
gna
~ Anonymní uživatel
1853 příspěvků
28. 5. 2017   #6
-
+1
-
Zajímavé
Kit +

O hlavu jí to neomlátí, protože to nejspíš je přesně to, co chtěl. Využití předchozích hodnot se samo nabízí a zase je to věc, nad kterou není potřeba přemýšlet. 

double mycos(double x)
{
	unsigned long f = 1;
	double sum = 0.0, p = 1.0;
	for(int i = 2, s = 1; i <= max2; i += 2, s = -s)
	{
		p *= x * x;
		f *= i * (i-1);
		sum += s * p / f;
	}
	return 1.0 - sum;
}
Nahlásit jako SPAM
IP: 213.211.51.–
Kit+15
Guru
28. 5. 2017   #7
-
0
-

#6 gna
Ještě se to dá drobet zjednodušit:

double mycos(double x)
{
	double p = 1.0;
	double sum = 1.0;
	for(int i = 2, s = -1; abs(p) < eps; i += 2, s = -s)
	{
		p *= x * x / i / (i-1);
		sum += s * p;
	}
	return sum;
}
Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
gna
~ Anonymní uživatel
1853 příspěvků
28. 5. 2017   #8
-
0
-

#7 Kit
Pěkný.

Nahlásit jako SPAM
IP: 213.211.51.–
peter
~ Anonymní uživatel
3981 příspěvků
29. 5. 2017   #9
-
0
-

Mne by teda zajimalo, kde v te funkci mate definovane max2 nebo eps :)

Nahlásit jako SPAM
IP: 2001:718:2601:26c:4dbc:38...–
Kit+15
Guru
29. 5. 2017   #10
-
0
-

#9 peter
To už necháváme na schopnostech V, eps by měla znát z matematiky.

Nahlásit jako SPAM
IP: 85.93.112.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ovrscout
~ Anonymní uživatel
113 příspěvků
29. 5. 2017   #11
-
0
-

#7 Kit
emh, jsi si jistý? Možná na ten svůj kód ještě koukni.

Nahlásit jako SPAM
IP: 193.165.79.–
peter
~ Anonymní uživatel
3981 příspěvků
29. 5. 2017   #12
-
0
-

ok. PS, tyhle zapisy nemam moc rad, protoze se z nich hur da vycist, co ovlada cyklus a co je mimo nej nezavisle. Jakoze, kdyz bys chtel zvysit pocet cyklu, tak musis zkouknout vsechno a najit tu promenou, kterou je treba zmenit.

for(int i = 2, s = 1; i <= max2; i += 2, s = -s)

Tady vidis, ze cyklus je ovladany ickem a max2

s = 1;
for (int i = 2; i <= max2; i += 2)
{
s = -s;

 

 

Nahlásit jako SPAM
IP: 2001:718:2601:26c:60db:c4...–
peter
~ Anonymní uživatel
3981 příspěvků
29. 5. 2017   #13
-
0
-

#12 peter
Jo, a uplne nejvic mam ted v oblibe zapisy s while, hlavne proto, ze while je v js rychlejsi nez for. A to, ikdyz tam napises konstantni cisla. 

start  = 0;
end    = query_all.length;
while(i<end)
	{
	...;
	++i;
	}
Nahlásit jako SPAM
IP: 2001:718:2601:26c:60db:c4...–
Kit+15
Guru
29. 5. 2017   #14
-
0
-

#11 Ovrscout
Mohl jsem v tom udělat chybu. Psal jsem to z hlavy bez testů.

Nahlásit jako SPAM
IP: 85.93.112.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
29. 5. 2017   #15
-
0
-

#12 peter
Tento cyklus je nutné ovládat přes eps a nikoli přes i. Potřebujeme nějakou přesnost výsledku a nikoli počet opakování cyklu.

While je v tomto případě asi lepší.

Nahlásit jako SPAM
IP: 85.93.112.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
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, 3 hosté

Podobná vlákna

Cos na -1 — založil maartyyyy

Cos — založil drizz

Sin a cos — založil Jiří

F-ce Sin, Cos ... — založil Lodhart

Chyba v COS, počítá nesmisly — založil Coal_Asasin

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ý