То, что вы хотите это functional inverse вашего выражения, то есть, δ как функция P. Так как это cubic polynomial, вы можете ожидать до трех решений (корней) для значения значения P. Тем не менее, я предполагаю, что вас интересуют только реальные решения и неотрицательные значения P. В этом случае существует только один реальный корень для каждого значения P.
Учитывая значения ваших параметров, имеет смысл решить эту проблему с помощью fzero
. Используя имена параметров в коде (в отличие от уравнений):
t = 0.335*1e-9;
r = 62*1e-6;
delta = 1.2*1e9;
E = 1e12;
v = 0.17;
f = @(w,p)2*E*t*w.^3/((1-v)*r^4)+4*delta*t*w/r^2-p;
P = 0:100:5000;
w0 = [0 1]; % Bounded initial guess, valid up to very large values of P
w_sol = zeros(length(P),1);
for i = 1:length(P)
w_sol(i) = fzero(@(w)f(w,P(i)),w0); % Find solution for each P
end
figure;
plot(P,w_sol);
Вы также можете решить это с помощью символической математики:
syms w p
t = 0.335*sym(1e-9);
r = 62*sym(1e-6);
delta = 1.2*sym(1e9);
E = sym(1e12);
v = sym(0.17);
w_sol = solve(p==2*E*t*w^3/((1-v)*r^4)+4*delta*t*w/r^2,w);
P = 0:100:5000;
w_sol = double(subs(w_sol(1),p,P)); % Plug in P values and convert to floating point
figure;
plot(P,w_sol);
Из-за ваших числовых значений параметров, solve
возвращает ответ с точки зрения три RootOf objects, первая из которых - настоящая, которую вы хотите.
Большое спасибо @horchler Именно то, что я хотел. Вы мужчина – TechySupport