вычисление системы произвольных уравнений в octave(matlab)
я пишу универсальный скрипт для решения определённых задач и столкнулся с проблемой, я получаю набор функций(которые можно составить в систему уравнений) и хочу найти все переменные которые возможно, как это сделать? вот пример моего кода:
pkg load symbolic
% запишите значения из дано, а если значение не известно обозначте его как []
g_c = 9.8;
Va_c = [];
Vb_c = [];
_a_c = pi/6;
l_c = [];
tb_c = 0.5;
tc_c = [];
f_c = 0.1;
d_c = 2;
h_c = 3;
_b_c = [];
syms N0 m _a f g t tb tc Va C1 C2 C3 C4 C5 C6 real;
Ftr = f*N0;
Fx1 = m*g*sin(_a) - Ftr;% <- укажите все силы в проэкции на ость x1 влияющие на тело на участке AB, для силы трения используйте `Ftr` а для силы реакции опоры используйте `N0`
Fy1 = m*g*cos(_a) - N0;% <- укажите все силы в проэкции на ость y1 влияющие на тело на участке AB, для силы трения используйте `Ftr` а для силы реакции опоры используйте `N0`
x1_0 = 0;
dx1_0 = Va;
ddx1 = Fx1/m;
ddy1 = Fy1/m;
N = solve(0 == ddy1, N0);
w = simplify(subs(ddx1, N0, N));
ddx1 = w;
dx1 = int(ddx1, t) + C1;
x1 = int(dx1, t) + C2;
C1f = solve(dx1_0 == dx1, C1);
C1f = subs(C1f, t, 0);
C2f = solve(x1_0 == x1, C2);
C2f = subs(C2f, t, 0);
dx1 = subs(dx1, C1, C1f);
x1 = subs(x1, C1, C1f);
x1 = subs(x1, C2, C2f)
l = subs(x1, t, tb);
Vb = subs(dx1, t, tb);
ddx = 0;% <- укажите все силы в проэкции на ость x1 влияющие на тело на участке BC
ddy = -g;% <- укажите все силы в проэкции на ость y1 влияющие на тело на участке BC
x_0 = 0;
dx_0 = Vb*cos(_a);
y_0 = 0;
dy_0 = Vb*sin(_a);
dx = int(ddx, t) + C3;
x = int(dx, t) + C4;
C3f = solve(dx_0 == dx, C3);
C3f = subs(C3f, t, 0);
C4f = solve(x_0 == x, C4);
C4f = subs(C4f, t, 0);
x = subs(x, C3, C3f);
x = subs(x, C4, C4f)
dy = int(ddy, t) + C5;
y = int(dy, t) + C6;
C5f = solve(dy_0 == dy, C5);
C5f = subs(C5f, t, 0);
C6f = solve(y_0 == y, C6);
C6f = subs(C6f, t, 0);
y = subs(y, C5, C5f);
y = subs(y, C6, C6f)
h = -subs(y, t, tc);
d = subs(x, t, tc);
_b = atan(h/d);
fprintf("[=============]\n");
foo = {l, Vb, h, d , _b };
foo_c = {l_c, Vb_c, h_c, d_c, _b_c};
foo_s = {"l", "Vb", "h", "d", "_b"};
v = {g, tb, f, _a, Va, tc };
v_c = {g_c, tb_c, f_c, _a_c, Va_c, tc_c};
v_s = {"g", "tb", "f", "_a", "Va", "tc"};
for k = 1:length(foo)
for i = 1:length(foo)
for j = 1:length(v)
if ~isempty(v_c{j})
foo{i} = subs(foo{i}, v{j}, sym(v_c{j}, 'r'));
end
end
end
for i = 1:length(foo)
if isempty(foo_c{i})
try
foo_c{i} = double(foo{i});
fprintf("%s = %f\n", foo_s{i}, foo_c{i});
catch e
end
else
for j = 1:length(v)
if isempty(v_c{j})
try
v_c{j} = double(solve(foo_c{i} == foo{i}, v{j}));
fprintf("%s = %f\n",v_s{j}, v_c{j});
catch e
end
end
end
end
end
end
необходимая система уравнений выглядит примерно так:
l = l_c
Vb = Vb_c
h = h_c
d = d_c
_b = _b_c