2016-11-15 2 views
0

У меня есть кубическое выражение: здесь,MATLAB: Как построить кубическое выражение для определенного диапазона входного давления

cubic expression here

Я пытаюсь определить и участок б в выражении для P значения от 0,0 до 5000. Я действительно пытаюсь получить выражение для δ с точки зрения давления P.

clear all; 
close all; 

t = 0.335*1e-9; 
r = 62*1e-6; 
delta = 1.2*1e+9; 
E = 1e+12; 
v = 0.17; 
P = 0:100:5000 

P = (4*delta*t)*w/r^2 + (2*E*t)*w^3/((1-v)*r^4); 

Я был бы признателен, если бы кто-нибудь мог указать указатели.

ответ

0

То, что вы хотите это 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, первая из которых - настоящая, которую вы хотите.

+0

Большое спасибо @horchler Именно то, что я хотел. Вы мужчина – TechySupport

0

Предлагаю два простых метода.

  1. Вы оцениваете P как функцию delta то plot(P,delta). Это быстро и грязно, но если все, что вам нужно, это сюжет, который он сделает. Неудобство в том, что вы можете сделать некоторые догадки, чтобы найти правильный интервал значений P, но вы также можете взять достаточно большое значение delta_max, а затем ограничить ограничение по оси x графика.

  2. Ваша функция - простая кубика, которую вы можете решить аналитически (see here if you are lost), чтобы инвертировать P(delta) в delta(P).

+0

Спасибо @Emerald по достоинству – TechySupport

+0

Добро пожаловать. –

Смежные вопросы