matlab找到两条曲线的交点

时间:2018-01-27 16:19:36

标签: matlab math matlab-figure

我需要在Matlab中找到二极管的电流,有2个方程,我找不到交点。此函数中没有真正的交叉点,但我需要找到尽可能接近的可能当前值(点后需要3个正确的数字)当前代码在这里;

clc;
close all;
clear all;
a=27;% tempature in celcius
b=2*(10.^(-14));%saturation current
q=1.6e-19;%electron charge
k=1.38e-23;%boltzman's constant
t=a+273;%temp in kelvin
v=-0.2:0.00001:0.715;%source voltage
i=b*(exp(q*v/(k*t))-1);%diode i-v characteristic formula
i2=(5-v)/1000;%kirchoff's voltage law formula
plot (v,i,v,i2)    
xlabel('Voltage -->')
ylabel('Current -->')
grid on;
axis([0.2 2 0 0.03])`

我需要找到最接近的ii2值。因为我要反复这样做,所以我必须制定它。

2 个答案:

答案 0 :(得分:1)

这个解决方案使我们得到了Get-VM | Get-Snapshot | Remove-Snapshot -RunAsync -Confirm:$false 函数,它确定了一个向量的最小值以及出现这个最小值的索引:

min

答案 1 :(得分:1)

不是通过直接将计算应用于给定范围i来以数字方式评估i2v曲线,而是可以定义两个不同的函数句柄,如下所示:

i_fun = @(v) b .* (exp((q .* v) / (k * t)) - 1);
i2_fun = @(v) (5 - v) / 1000;

完成此操作后,您可以按如下方式计算曲线值:

v = -0.2:0.00001:0.715;
i = i_fun(v);
i2 = i2_fun(v);

这将允许您使用fsolve function更轻松地检测交叉点:

diff_fun = @(v) i2_fun(v) - i_fun(v);
int_x = fzero(diff_fun,3);
int_y = feval(i_fun,int_x);

完整的工作示例:

clc;
close all;
clear all;

a = 27;
b = 2*(10.^(-14));
q = 1.6e-19;
k = 1.38e-23;
t = a + 273;

i_fun = @(v) b .* (exp((q .* v) / (k * t)) - 1);
i2_fun = @(v) (5 - v) / 1000;
diff_fun = @(v) i2_fun(v) - i_fun(v);

v = -0.2:0.00001:0.715;%source voltage
i = i_fun(v);
i2 = i2_fun(v);
int_x = fzero(diff_fun,3);
int_y = feval(i_fun,int_x);

plot(v,i,v,i2);
hold on;
plot(int_x,int_y,'ob');
hold off;

输出:

Output