Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
Zdravím,
mělo by stačit WA? Sumy a Produkty
Stačí tak? Děkuji.
Téma přesunu do sekce CAS (je v tom i seznam dalších nástrojů).
Offline
S Wolframem mám problémy úspěšně zadat sumu, která obsahuje produkt. Přesně chci zadat toto:
d je proměnná, která nabývá hodnot od 0 do 1...M = roundup(1/d)-1
Zajímají mě právě hodnoty té sumy pro jednotlivé hodnoty proměnné d
Offline
Tak to nevím, zda si WA poradí s takovou nabídkou indexů a proměnných. Zkusím to trochu rozluštit:
a) produkt je uvnitř sumy (doplnila jsem závorky):
b) hodnotu d budeš zadávat ručně? přičemž se bude provádět dopočet jako
a platí, že M=roundup(1/d)-1
c) suma je od do
(výpočet
je dle bodu b), produkt je od 0 do (n-1), přičemž
?
No nevím - zkus možná ještě popsat, jak to vzniklo a co máš v plánu takovým vzorcem počítat. Děkuji.
Offline
a) Jo, produkt je uvnitř sumy.... Mám pocit, že ty závorky tam být nemusí, teda aspoň takhle jsem to viděl v jedné knížce, že tam nebyly, i když by si někdo mohl myslet, že tam být mají...prostě všechno, co bylo za tou sumou se počítalo do té sumy, aji další vnořené sumy nebo produkty.
b) ano, toho právě chci dosáhnout, abych jenom měnil hodnoty d, a měnily se výsledky té sumy a já to mohl pozorovat. A to M je vlastně substituce výrazu roundup(1/d)-1, takže se to bude dělat přesně tak, jak jsi řekla.
c) ano, suma je od n=0 do n=M-1 .... Ale s tím prduktem uvntř je to jinak, pro každé n z té hlavní sumy, bude uvnitř té sumy produkt od 0 do n-1 a to n není M-1. n je nejdřív 0, pro takové n se vytvoří produkt od 0 do -1(což je prázdný součin, nebo jak se tomu říká, a ten je definován jako 1, aby se "nic nestalo"), potom je n = 1, pro takové n se vytvoří produkt od 0 do 0, potom je n = 2, pro takové n se vytvoří produkt od 0 do 1, až nakonec je n = M-1 a pro takové n se vytvoří produkt od 0 do M-1.
No, to je docela na dlouho, jak to vzniklo a co tím chci počítat, a stejně by Ti to asi moc nepomohlo v tom, jak to správně zadat do nějakého programu. Souvisí to moc s konkrétní úlohou, kterou se mi nechce vysvětlovat. Doufám, že jsem to dostatečně vysvětlil v bodech a, b, c.
Offline
Děkuji za upřesnění. Závorek možná mám více, ale tak je jednoznačně - co kam patři:
No, to je docela na dlouho, jak to vzniklo a co tím chci počítat, a stejně by Ti to asi moc nepomohlo v tom, jak to správně zadat do nějakého programu.
:-) ono v ideálním případě se může ukázat, že problém nebyl vůbec, v méně ideálním, že řešení vede jinou cestou a k jinému výsledku. Ale samozřejmě netrvám.
Tedy, pokud jsem tomu rozuměla dobře: např. pro ,
, potřebuješ počítat (něco se dá upravit, ale nechám to tak):
Podaří se rozepsat ruční výpočet? Děkuji.
Offline
Má oblíbená maxima
Nadefinuju si funkci - třeba f():
f(x):= block([M,d,j,n], d: x, M: ceiling(1/x)-1, sum((M-n)*(1-d*(M-n))*product(d*(M-j),j,0,(n-1)),n,0,(M-1)) );
a pak ji zavolám pro d=0.2:
f(0.2);
(důležitý je středník na konci každého příkazu)
a vyjde 2.4896
Je možno použít i on-line maximu, třeba zde, nebo zde.
Kde se zadá kompletní kód:
f(x):= block([M,d,j,n], d: x, M: ceiling(1/x)-1, sum((M-n)*(1-d*(M-n))*product(d*(M-j),j,0,(n-1)),n,0,(M-1)) ); f(0.2);
a dáš vyhodnotit (evaluate/calculate),
místo 0.2 dáváš postupně jiné hodnoty.
Offline
↑ mák:
Díky moc, akorát teda se mě nelíbí a myslím, že jsem se s tím setkal i u jiných programů, že například pro d=0.90 má vyjít výsledek přesně 0.1, ale program vypíše .09999999999999998, nechápu, proč to není schopný přesně vypočítat.
A úplně ideální by bylo, kdyby ten program uměl aji řešit rovnici, kde na levé straně by byl ten vzorec a na druhé straně kladné reálné číslo a program by našel d, které takové rovnici vyhovuje. Uměl by to?
A ještě poslední dotaz, jak by se dala definovat proměnná, třeba y=0.3 a potom zavolat f(y)? Díky moc.
Offline
Prvnímu dotazu:
Je to tím že při použití čísla s desetinou čárkou jej program musí převést do dvojkové soustavy, tam provede výpočet a aby jej zobrazil musí jej převést zpět do desítkové. Při převodu může nastat chyba, neboť převod pro některá čísla není jednoznačný. Aby se tomu vyhnulo, je lépe toto číslo zadat jako zlomek dvou celých čísel. Tedy místo 0.9 dát 9/10. Pak výpočet bude přesný.
Nebo je druhá možnost upravit program tak, aby se pokusil program převést toto číslo automaticky.
Upravený kód:
f(x):= block([M,d,j,n], ratprint:false, d: rat(x), M: ceiling(1/x)-1, sum((M-n)*(1-d*(M-n))*product(d*(M-j),j,0,(n-1)),n,0,(M-1)) )$ f(.9);
Pokud budeš potřebovat, aby funkce nevracela zlomek, ale desetinné číslo, pak takto:
f(x):= block([M,d,j,n,s], ratprint:false, d: rat(x), M: ceiling(1/x)-1, s: sum((M-n)*(1-d*(M-n))*product(d*(M-j),j,0,(n-1)),n,0,(M-1)), float(s) )$ f(.9);
Druhý dotaz:
Vzhledem k tomu, že se ve výpočtu zaokrouhlují hodnoty nebude zpětný výpočet jednoduchý.
Třetí dotaz:
Maxima používá pro přiřazení dvojtečku, takže takto:
y: 0.3; f(y);
Offline
Stránky: 1