[英]How can I ask matlab to give me the value of y if I input the value of x?
[英]matlab, how do i write a statement that will give me time on xaxis from y=0.3
x=[0:.01:10];
y=(x.^2).*(exp(-x));
plot(x,y), grid
y1=max(y);
xlabel('TIME');
ylabel('CONCENTRATION IN BLOOD');
title('CONCENTRATIN OF SUSTANCE IN BLOOD vs TIME');
fprintf('(a) The maximum concentraion is %f \n',y1)
这是我的计划,我很难写一个声明,给我时间y=0.3
请协助
谢谢
这里的一个关键问题是你的情节中有多个点,其中y = 0.3
。 如果您想以简单的方式查找所有这些内容,可以按照以下步骤操作:
y
减去0.3,以便您要查找的点变为过零点。 y
值,计算值0.3所在的差值的百分比。 这基本上在过零点的两侧的两个点之间执行线性插值。 x
的对应值。 这里是代码以及显示找到的点的图表:
>> yDesired = 0.3;
>> index = find(diff(sign(y-yDesired)));
>> pctOfDiff = (yDesired-y(index))./(y(index+1)-y(index));
>> xDesired = x(index)+pctOfDiff.*(x(index+1)-x(index))
xDesired =
0.8291 3.9528
>> plot(x,y);
>> hold on;
>> plot(xDesired,yDesired,'r*')
>> xlabel('x');
>> ylabel('y');
一个简单的答案是:
find(min(abs(y- 0.3))== abs(y- 0.3))
给
ans = 84
从而
x(84)
ans = 0.83000
现在,如果您在x
增加分辨率,您还可以找到更接近分析分辨率的解决方案。
> x=[0.5:.000001:1]; y=(x.^2).*(exp(-x));
> x(find(min(abs(y- 0.3))== abs(y- 0.3)))
ans = 0.82907
编辑 :
并且为了找到全零而言:
> x=[0:.01:10]; y=(x.^2).*(exp(-x));
2> find(abs(y- 0.3)< 1e-3)
ans =
84 396
> x(find(abs(y- 0.3)< 1e-3))
ans =
0.83000 3.95000
如果在MATLAB中有符号工具箱,则可以执行以下操作
syms x
x=solve('x^2*exp(-x)=y')
x=
(-2)*lambertw(k, -((-1)^l*y^(1/2))/2)
这里lambertw
是y=x*exp(x)
,它可以在MATLAB中作为函数使用。 所以你现在可以定义一个函数,
t=@(y,k,l)(-2)*lambertw(k, -((-1)^l*y^(1/2))/2)
lambertw
是一个具有多个分支的多值函数。 变量k
允许您选择解决方案的分支。 你需要主分支,因此k=0
。 l
(小写L)只是选择y
的适当平方根。 我们需要正平方根,因此l=0
。 因此,您可以使用该函数获取t
的值或y
的任何值的时间。
因此,使用您的示例, t(0.3,0,0)
给出0.8291
。
编辑
我忘了解决方案有两个分支可以给你真正的输出(gnovice的回答让我想起了这个)。 因此,对于这两种解决方案,请使用
t(0.3,[0,-1],0)
得出0.8921
和3.9528
。
查找索引(以及x值)的更简单方法是:
[minDiff, index] = min(abs(y-0.3))
minDiff =
3.9435e-004
index =
84
x(index)
ans =
0.8300
除了已经发布的解决方案,我还要添加其他方法来解决问题:
f = @(x) (x.^2).*(exp(-x)); %# function handle
y0 = 0.3;
format long
%# find root of function near s0
x1 = fzero(@(x)f(x)-y0, 1) %# find solution near x=1
x2 = fzero(@(x)f(x)-y0, 3) %# find solution near x=3
%# find minimum of function in range [s1,s2]
x1 = fminbnd(@(x)abs(f(x)-y0), 0, 2) %# find solution in the range x∈[0,2]
x2 = fminbnd(@(x)abs(f(x)-y0), 2, 4) %# find solution in the range x∈[2,4]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.