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ám problém. Dělám na bakalářce a při vytváření rovnic statické rovnováhy (FSI VUTBR) mám v rovnicích napsané řekněme:
fcx + fdx - fe1x + fe2x = 0 -fay + fby - fcy + fdy - fe1y + fe2y = 0 -fay*|x1-xe| + fby*|xb-xe| + Mb - Fcy*xc-xe| + Fcx*|yc-ye| + Fdy*|xd-xe| + fdx*|yd-ye| = 0
Ale abych ty -už tak dlouhé- rovnice neměl ještě delší, potřeboval bych definovat (nejspíš nad ně) cca toto:
fcx = fc*cos(alpha_c) fcy = fc*sin(alpha_c) fdx = fd*cos(alpha_d) fdy = fd*cos(alpha_d)
Poté bych potřeboval nějak vyřešit soustavu 21 rovnic, které jsou právě vyjádřeny "fcx" "fcy", ale potřeboval bych, aby je matlab přebral jako "fc*cos(alpha_c)" "fc_sin(alpha_c)",
bohužel mi vrací:
Error in ==> otazka at 54 F_C_x = F_C * dcos(alpha_C);
Snad jsem to zde popsal dobře.
Ještě zjednodušeně:
Mám soustavu rovnic
a + b + c - d + e= 0
2a - 3b + c + e= 0
5a + b - 4c - d = 0 |
Ale:
a = 5z, b=3z, c=5x, d=-3x, e=12x
A rád bych, by to matlab viděl jako:
5z + 3z + 5x + 3x + 12x = 0
2*5z - 3*3z + 5x + 12x = 0
5*5z + 3z - 4*5x + 3x = 0
Jde to nějak napsat? Koukal jsem na "sym ..." a "subs ...", ale nějak se mi to nevedlo.
Rád bych se to naučil, baví mě to, jen jsem se teď opravdu kousl.
P.S. Pokud budu chtít výše zmíněnou rovnici vyřešit, stačí příkaz "Linsolve", nebo to mám udělat jakože přes 2 matice, jedna vlevo, druhá nulová a poté (myslím) inverzně vynásobit?
Děkuji za případnou pomoc. Jsem tu nový, tak jsem to snad napsal dobře :-)
Offline
↑ SonGokussj4:
Neviem osobne teda, či matlab ovláda implicitne prácu s výrazmi. Skôr by som na to použil Mathematicu. Nikdy som nič podobné neriešil, ale asi je matlabu potrebné zadávať konkrétny systém na riešenie.
Offline
Předpokládám, že řešíš soustavu lineárních rovnic, tzn. že koeficienty u neznámých jako třeba cos(alfa) atd. jsou čísla a ne funkce. Takový soustavy jsem v Matlabu řešil prakticky pokaždý obyčejnou inverzí, pročež potřebuješ akorát zapsat danou soustavu rovnic do maticovýho tvaru A.x=b, kde matice A je tvořena koeficienty u neznámých, x je vektor neznámých, b je "vektor pravé strany" (v tvojí úloze jsou neznámé zřejmě reakční síly v jednotlivých vazbách a vektor b bude tvořen osamělými akčními silami).
Pro názornost to ukážu na jednoduchym příkladu. Mějme soustavu ve tvaru
fx*cos(alfa)+fy*sin(alfa)+Q=0
fx*sin(beta)-fy*cos(beta)-M=0
V maticovém zápisu (použiju teď konvenci z Matlabu)
A=[cos(alfa) sin(alfa);
sin(beta) -cos(beta)];
x=[fx;fy];
b=[-Q;M];
Vektor neznámých x potom dostaneš inverzí zleva, tedy x=inv(A)*b.
Pokud bys měl ty koeficienty u neznámých nějaký hodně ošklivý a bylo by pracný je zapisovat do tý matice, tak si je pochopitelně můžeš zadefinovat jako další proměnné, takže např. pro soustavu
fx*cos(alfa)*(1-tg(beta)+ln(gama))+fy*sin(alfa)+Q=0
fx*sin(beta)-fy*cos(beta)-M=0
si první koeficient zadefinuješ jako
c1=*cos(alfa)*(1-tg(beta)+ln(gama));
a matici A potom zapíšeš ve tvaru
A=[c1 sin(alfa);
sin(beta) -cos(beta)];
Doufám, že je to takhle jasný resp. že jsem správně pochopil tvůj dotaz ;-)
Offline
Děkuji, matlab jsem používal teprve asi týden, tak jsem to moc nechápal. Vyřešil jsem to, jak jsi psal :-)
Ze začátku jsem si dal
docasna = ...
a pak v rovnici dosazoval
bla bla + docasna*(alpha) ...
Nevím, proč mě to nenapadlo dříve.
ALE dospěl jsem k dalšímu problému.
Pokud mám totiž
M8f = M9f_max - T9f_max*R_2*sind(phi_8) - N9f_max*R_2*(1-cosd(phi_8));
kde "phi_8 = 0 : beta_8/50 : beta_8"
dostanu tedy fci, která má 50 různých hodnot po sobě rostoucí / klesající.
Rád bych dospěl k tomu, že budu mít:
M8f_max = M8f (substituce phi_8 = beta_8) neboli: M8f_max = M9f_max - T9f_max*R_2*sind(beta_8) - N9f_max*R_2*(1-cosd(beta_8));
Potřebuji udělat maximum ~ jednu hodnotu. Našel jsem fci SUBS ale nějak mi nefunguje...
psal jsem to:
M8f_max = subs(M8f,phi_8,beta_8)
Ale to mi vrátí -naprosto stejné hodnoty- co M8f... Ale já potřebuji jen tu poslední.
Tak to řeším tím dlouhým zápisem bohužel. Netušil by prosím někdo?
Offline
Stránky: 1