Matematické Fórum

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

#1 12. 03. 2013 22:47

SonGokussj4
Zelenáč
Příspěvky: 8
Škola: FSI VUTbr
Pozice: Student
Reputace:   
 

Matlab - definování "rovností"

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:

Code:

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:

Code:

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í:

Code:

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

  • (téma jako vyřešené označil(a) SonGokussj4)

#2 16. 03. 2013 21:53

lukaszh
Místo: Bratislava
Příspěvky: 2314
Reputace:   37 
 

Re: Matlab - definování "rovností"

↑ 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.


"The mathematical rules of the universe are visible to men in the form of beauty."
John Michel

Offline

 

#3 18. 03. 2013 14:11 — Editoval KapitanLaska (18. 03. 2013 14:22)

KapitanLaska
Zelenáč
Příspěvky: 1
Reputace:   
 

Re: Matlab - definování "rovností"

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

 

#4 28. 03. 2013 06:52

SonGokussj4
Zelenáč
Příspěvky: 8
Škola: FSI VUTbr
Pozice: Student
Reputace:   
 

Re: Matlab - definování "rovností"

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ž

Code:

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:

Code:

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:

Code:

 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

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson