我有一个立方表达式
我试图在 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 :(得分: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的形式返回答案,其中第一个是您想要的真实答案。
答案 1 :(得分:0)
我建议使用两种简单的方法。
您评估P
是delta
的函数,然后是plot(P,delta)
。这很快又很脏,但如果你只需要一个情节就可以了。不方便的是,您可能会进行一些猜测和试验,以找到P
值的正确间隔,但您也可以采用足够大的delta_max
值,然后限制x轴限制情节。
您的函数是一个简单的立方体,您可以通过分析(see here if you are lost)将P(delta)
反转为delta(P)
。