< návrat zpět

MS Excel


Téma: Řešení soustavy rovnic s proměnným počtem rovnic rss

Zaslal/a 5.3.2016 17:01

Ahoj,

řeším v Excelu takový problém. Potřeboval bych nějaký způsobem nastavit řešič soustavy rovnic s proměnným počtem rovnic, který by byl omezený jenom maximální počtem rovnic/neznámých, ale zároveň by byl schopný soustavu vyřešit, i když je poslední řádek a sloupec vynulovaný (je snížen počet neznámých a tudíž rovnic v soustavě). Snažím se to řešit přes inverzní matici, jenomže mám problém s tím, že když vynuluji poslední řádek a sloupec matice, tak Excel není schopný vytvořit inverzní matici. Je nějaká možnost, jak říct excelu, aby nepovažoval nulový řádek a sloupec za součást matice a řešil tedy inverzní matici jakoby v původní matici nulové řádky a sloupce vůbec nebyly? Za jakékoliv návrhy budu rád. Předem díky za pomoc.

Zaslat odpověď >

#030601
avatar
Ja v tom nevidím žiadny problém.citovat
#030602
avatar
A mohl bys mi teda poradit nebo mi to jen oznamuješ...? 1 Vytvořím obecnou matici pro deset rovnic, ale podle vstupních dat můžu ve výsledku mít jen 8 rovnic a 8 neznámých (záleží na tom, co na začátku uživatel zadá), pak už ale nefunguje inverzní matice, která je vytvořena obecně pro všech deset rovnic. Nejsem žádný expert na excel a nejspíš bych použil za normálních okolností matlab. Můžu teda dostat radu, co s tím? 1citovat
#030603
avatar
A v čom by som ti mal poradiť? Ja jasnovidec nie som. Na tvoje matice nedovidím.citovat
#030607
avatar
Dyť to píšu už v tom první dotazu... Jak to udělat, aby excel vynechávat nulové sloupce a řádky. Tzn, že například, když mu nadefinuji pole 3x3, ale po zadání vstupních hodnot vznikne následující pole:

1 2 0
0 0 0
1 1 0

tak vynechá nulové řádky a sloupce a bude to považovat za takovouto matici:

1 2
1 1

a z toho poté vytvoří inverzní matici.citovat
icon #030610
avatar
To pôvodné nezredukované pole zapíš do pomocného sheetu a použi funkcie sum, min a max. Zredukuj a vráť späť do poľa.

Ja načítam dáta do poľa z oblasti začínajúcej v A1, za pomoci nasledovného kódu potom pole zredukujem:Sub ArrayReduced()
Dim myRng As Range, tmpSh As Workbook, i As Integer, j As Integer, myArr
Set myRng = [A1].CurrentRegion
Set tmpSh = Workbooks.Add(xlWBATWorksheet)
With tmpSh.Sheets(1)
myRng.Copy .[A1]
Set myRng = .[A1].CurrentRegion
With myRng
For i = .Rows.Count To 1 Step -1
If WorksheetFunction.Sum(.Rows(i)) = 0 And WorksheetFunction.Min(.Rows(i)) = 0 And WorksheetFunction.Max(.Rows(i)) = 0 Then .Rows(i).Delete
Next i
For i = .Columns.Count To 1 Step -1
If WorksheetFunction.Sum(.Columns(i)) = 0 And WorksheetFunction.Min(.Columns(i)) = 0 And WorksheetFunction.Max(.Columns(i)) = 0 Then .Columns(i).Delete
Next i
End With
End With
myArr = myRng
tmpSh.Close False
For i = LBound(myArr, 1) To UBound(myArr, 1)
For j = LBound(myArr, 2) To UBound(myArr, 2)
Debug.Print myArr(i, j)
Next j
Next i
End Sub
Následne si ešte musíš poriešiť tú inverznú maticu, kód rieši akurát redukciu, ale s tým snáď poradíš, keď nie si schopný dať sem prílohu, na čo sa sanžil upozorniť ťa marjankaj.citovat
#030742
avatar
Díky moc za skript. Nakonec jsem to ale vyřešil jinak. S VB moc neumím a učit se mi nechce, takže jsem si raději pomohl matlabem. Matice exportuju do něj, kde je jednoduchý skript vyřeší a zapíše do vybraných buněk v Excelu řešení. Jinak opravdu netuším, k čemu bych ty matice měl nahrávat sem. Každý kdo vychodil alespoň SŠ ví, jak vypadá matice a co je nulový řádek, případně sloupec. 1citovat
icon #030749
avatar
Jinak opravdu netuším, k čemu bych ty matice měl nahrávat sem.
Trebárs preto, že žiadaš radu zadarmo. Máš asi dojem, že povinnosťou ľudí tuná je radiť bez toho, aby sa autor dotazu aspoň trochu snažil sám, trebárs tým, že vloží prílohu, aby si ju riešiteľ nemusel tvoriť miesto pohodlného žiadateľa o radu. Ono by sa tieto diskusie prestali veľmi rýchlo diať, keby všetci riešitelia začali žiadať za radu nejakú platbu, to by sa žiadatelia viac začali snažiť a prestali trochu hlúpo kecať..
No, a druhý dôvod "prečo" si uviedol vo svojej odpovedi vlastne sám. Makro, ktoré ti niekto napíše, nakoniec ani nie si schopný do svojho riešenia zakomponovať, píšeš sám, že VBA sa učiť nechceš. To je potom naozaj trochu zbytočné unúvať sa s akoukoľvek snahou o pomoc.citovat
#030750
avatar

JD80 napsal/a:

Jak to udělat, aby excel vynechávat nulové sloupce a řádky.

a z toho poté vytvoří inverzní matici.


Takto?

=INVERZE(INDEX($A$1:$C$3;{1;3};{1\2}))citovat
#030752
avatar

AL napsal/a:

Trebárs preto, že žiadaš radu zadarmo. Máš asi dojem, že povinnosťou ľudí tuná je radiť bez toho, aby sa autor dotazu aspoň trochu snažil sám, trebárs tým, že vloží prílohu, aby si ju riešiteľ nemusel tvoriť miesto pohodlného žiadateľa o radu.


Podívej se frajere, laskavě se dej do klidu, a když máš potřebu za svoje rady dostat zaplaceno, tak neraď veřejně na internetu. Opravdu nevím, k čemu by bylo sem nahrávat moje matice 10x10, když jsem chtěl jen obecné řešení (viz odpověď luba, který mi na konkrétní příklad poslal konkrétní řešení, ale já jsem potřeboval obecné řešení, proto je udání konkrétního příkladu naprosto k ničemu). Stačilo napsat: "Něco takového se musí udělat přes makra, v excelu na to příkaz není." Případně poslat ilustrační makro třeba na matici 3x3. Za takovou věcnou radu bych byl neskonale vděčný a to makro si buď upravil nebo ho nepoužil. Jinak jsem psal, že za jakékoliv návrhy budu rád a že za ně moc děkuji. Co víc chceš? Přeposlat peníze na účet?

AL napsal/a:


Ono by sa tieto diskusie prestali veľmi rýchlo diať, keby všetci riešitelia začali žiadať za radu nejakú platbu, to by sa žiadatelia viac začali snažiť a prestali trochu hlúpo kecať..


Jediný, kdo tady hloupě kecá jsi ty. Asi si léčíš nějaký mindrák, ale já na tvoje moralizování fakt nejsem zvědavý a jak jsem napsal výše, pokud chceš za rady platit, tak neraď ve veřejné diskuzi.

AL napsal/a:

Makro, ktoré ti niekto napíše, nakoniec ani nie si schopný do svojho riešenia zakomponovať, píšeš sám, že VBA sa učiť nechceš. To je potom naozaj trochu zbytočné unúvať sa s akoukoľvek snahou o pomoc.


To, že jsem nepoužil tvoje makro na 25 řádků, když jsem si sám napsal skript na 8, který vyřeší uplně stejný problém je snad důvod mi neporadit nebo mě zrovna odsuzovat? Hledal jsem nejjednodušší a nejefektivnější možné řešení. Tvoje řešení to bohužel nebylo, tak jsem ho nepoužil, ale i přes to ti za ochotu byl vděčný. Je to naprosto normální a pochopitelné.

Prostě jsem hledal nejefektivnější řešení, tudíž jsem o radu poprosil na fóru, které se excelu přímo věnuje. Opravdu jsem ale netušil, jak tato komunita funguje. I když... Spíš jednotlivci...

Tímhle tuto debatu za sebe končím. Hezký den.
//

Lubo, bohužel nevím, kde se ty nulové řádky budou v matici vyskytovat, potřeboval jsem obecné řešení, ale i tak moc díky. Každopádně, jak píšu v předchozím příspěvku, problém jsem už vyřešil.citovat
icon #030761
avatar
Zmyslom môjho príspevku bolo poskytnúť riešenie. Bol som si vedomý toho, že s jeho aplikáciou môže byť problém, mimo iné z dôvodu, že zo zadania nie je úplne zrejmé, čo presne potrebuješ riešiť a preto som upozorňoval, podobne ako marjankaj, na to, že na základe prílohy by to bolo jednoduchšie, rýchlejšie a celkovo efektívnejšie. Miesto toho, aby si prílohu poskytol, tak si opakovane spochybňoval dôvody, prečo by si ju sem mal dať, keďže podľa teba je predsa jasné, čo chceš. Jasné to nie je a skončilo to podľa predpokladov: riešenie aplikovať nedokážeš (poradil si si nakoniec inak, v poriadku), úplne zbytočne špekuluješ nad mojimi mindrákami a celkovo mi prídeš, že frajera zo seba robíš ty.citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje