MATLAB:如何在一定范围的输入压力下绘制立方表达式

时间:2016-11-15 15:09:07

标签: 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);

如果有人能提供指示,我将不胜感激。

2 个答案:

答案 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)

我建议使用两种简单的方法。

  1. 您评估Pdelta的函数,然后是plot(P,delta)。这很快又很脏,但如果你只需要一个情节就可以了。不方便的是,您可能会进行一些猜测和试验,以找到P值的正确间隔,但您也可以采用足够大的delta_max值,然后限制x轴限制情节。

  2. 您的函数是一个简单的立方体,您可以通过分析(see here if you are lost)将P(delta)反转为delta(P)