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

Dobrý den, n00b here.
Pokud mám
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?
Druhý problém,
když kreslím graf, mám ho složen z 9 intervalů a abych ho vyplnil barevně, je na to kód
N = length(x1p);
verts = [x1p(:), M1(:); x1p(:) zeros(N,1)];
q = (1:N-1)';
faces = [q, q+1, q+N+1, q+N];
p = patch('Faces', faces, 'Vertices', verts, 'FaceVertexCData', [M1(:); M1(:)], 'FaceColor', 'interp', 'EdgeColor', 'none');
N = length(x2p);
verts = [x2p(:), M2(:); x2p(:) zeros(N,1)];
q = (1:N-1)';
faces = [q, q+1, q+N+1, q+N];
p = patch('Faces', faces, 'Vertices', verts, 'FaceVertexCData', [M2(:); M2(:)], 'FaceColor', 'interp', 'EdgeColor', 'none');A pokračuje to dál až do x9p M9
Prakticky jediné veličiny, které se v tomto (dle mého zbytečně mnohořádkovém) kódu mění jsou:
xip a Mi
nedá se to nějak udělat cyklem, že pro
for i = 1 : 9 N = length(xip); verts = [xip(:), Mi(:); xip(:) zerost (N,1)];
Atd? Chápu, že by to fungovalo, kdybych měl místo Mi pojmenovanou hodnotu -jen- i.
Ale pokud mám v celém (už docela "velkém") programu dost hodnot pojmenovaných M9, které jsou ještě propojené s M9p a M9f, šlo by tato čísla "uvnitř názvu proměnné" charakterizovat proměnlivým číslem?
Děkuji za každou pomoc.
Offline

Tak kamarád (IT) mi doporučil tuto syntaxi:
x = [x1p;x2p;x3p;x4p;x5p;x6p;x7p;x8p;x9p];
M = [M1;M2;M3;M4;M5;M6;M7;M8;M9]
for i = 1:length(x),
N = length(x);
verts = [x(i,:), M(i,:); x(i,:) zeros(N,1)];
q = (1:N-1)';
faces = [q, q+1, q+N+1, q+N];
p = patch('Faces', faces, 'Vertices', verts, 'FaceVertexCData', [M(i,:); M1(i,:)], 'FaceColor', 'interp', 'EdgeColor', 'none');
endMyslel jsem si i že by to mohlo jít, avšak sekli jsme se na jednom problému.
Pokud dám příkaz:
length(x)
Vrátí mi to hodnotu 51.
Pokud dám
i = 1 : length(x)
vrátí mi to hodnotu 1 2 3 4 .. 51
Jestliže ALE spustím tento příkaz, ztroskotá to na tom, že
face = 0
q = 0
verts = 0
N = 1
A pokud si dám i, tak mi taky ukáže, že i = 1.
Přitom čerpá v první kroku z
i = 1 : length(x1p)
což je právě 1 : 51, ale nevím proč vyjde i = 1... zde je kámen úrazu a netuším proč.
Offline

Vyřešeno :-)
Pro ty, koho by to zajímalo.
xip = [x1p;x2p;x3p;x4p;x5p;x6p;x7p;x8p;x9p]; %vektor 9 x 1
Ni = [N1;N2;N3;N4;N5;N6;N7;N8;N9]; %vektor 9 x 1
vel_int = size(xip); % hodí hodnotu 9 x 1
interval = vel_int(1); % vrátí hodnotu 9
for i = 1 : 1 : interval %takže 1 2 3 4 5 6 7 8 9
N = length(xip(i,:));
verts = [xip(i,:)', Ni(i,:)'; xip(i,:)' zeros(N,1)];
q = (1:N-1)';
faces = [q, q+1, q+N+1, q+N];
p = patch('Faces', faces, 'Vertices', verts, 'FaceVertexCData', ...
[Ni(i,:)'; Ni(i,:)'], ...
'FaceColor', 'interp', 'EdgeColor', 'none');
endOffline
Stránky: 1