Help with subs command and symbolic variables

5 Ansichten (letzte 30 Tage)
kyle lyth
kyle lyth am 17 Apr. 2013
i have written a piece of code,(apologises for it not being that quick or tidy) but the symbolic values between lines 72 and 78 won't substitute in for the prescribed values above?.. and i have no idea what im missing or could be wrong :(
function assignment_3_5
clc
close all
syms m1p m2p a1p a2p k1 k2 d1p d2p Fp m1q m2q c1 c2 a2q a1q v1q v2q dt F1 Fq
k1 = 1; k2 = 0.1; c1=0.1; c2=1;
m1p = 3; m2p=1.5;
m1q = 2; m2q=1;
EQN1=[m1p 0;0 m2p]*[a1p;a2p]+[(k1+k2) -k2; -k2 k2]*[d1p;d2p] -[F1;Fp]
EQN2=[m1q 0;0 m2q]*[a1q;a2q]+[(c1+c2) -c2; -c2 c2]*[v1q;v2q] -[0;Fq]
syms diss1q1 diss1q2 veloc1q diss1p1 diss1p2 veloc1p
a1q = (((diss1q2 - diss1q1)/dt^2)-(veloc1q/dt));
a1p = (((diss1p2 - diss1p1)/dt^2)-(veloc1p/dt));
v1q = ((diss1q2 - diss1q1)/dt);
syms diss2q1 diss2q2 veloc2q diss2p1 diss2p2 veloc2p
a2q = (((diss2q2 - diss2q1)/dt^2)-(veloc2q/dt));
a2p = (((diss2p2 - diss2p1)/dt^2)-(veloc2p/dt));
v2q= ((diss2q2 - diss2q1)/dt);
d1p = diss1p2;
d2p = diss2p2;
EQN1 = subs(EQN1);
EQN2 = subs(EQN2);
%p
eqn1 = EQN1(1,1);
eqn2 = EQN1(2,1);
%q
eqn3 = EQN2(1,1);
eqn4 = EQN2(2,1);
%simplify equations 4 sep eqns in for expanded system
eqn1=simplify(eqn1);
eqn2=simplify(eqn2);
eqn3=simplify(eqn3);
eqn4=simplify(eqn4);
%
% pretty(eqn1)
% pretty(eqn2)
% pretty(eqn3)
% pretty(eqn4)
%%%system Q
%%%solve eqn3 for diss1Q2
diss1q2 = solve(eqn3,diss1q2);
Fq = solve(eqn4,Fq);
Fq = subs(Fq)
%%%System P
%%%subs Fq into eqn2 for Fp
Fp = -Fq;
disp('System p')
diss1p2 = solve(eqn1,diss1p2);
diss2p2 = solve(eqn2,diss2p2);
diss1p2 = subs(diss1p2)
DT=linspace(0,50,100);
%assume known dissplacment of balls 1 and 2
diss1p1 = 0;diss2p1 = 0;
diss1q1 = 0;diss2q1 = 0; diss2q2 = 1;
%assume known velocityies of balls 1 and 2
veloc1p = 0;veloc2p = 0;
veloc1q = 0;veloc2q = 0;
F1=0;
temp = subs(diss1p2)
for i = 1:100
dt = DT(i);
plt(i) = subs(temp);
%plt(i) = (-1200 -1860*dt -500*dt^2 - 682*dt^3 - 22*dt^4) / ((11*dt + 20)*(2*dt^4 + 39*dt^2 + 90));
end
plot(DT,plt)
end
  1 Kommentar
Walter Roberson
Walter Roberson am 17 Apr. 2013
Is it dt that is not being substituted?
Have you tried
plt(i) = double( subs(temp, 'dt', dt) );

Melden Sie sich an, um zu kommentieren.

Antworten (0)

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by