我需要在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])`
我需要找到最接近的i
和i2
值。因为我要反复这样做,所以我必须制定它。
答案 0 :(得分:1)
这个解决方案使我们得到了Get-VM | Get-Snapshot | Remove-Snapshot -RunAsync -Confirm:$false
函数,它确定了一个向量的最小值以及出现这个最小值的索引:
min
答案 1 :(得分:1)
不是通过直接将计算应用于给定范围i
来以数字方式评估i2
和v
曲线,而是可以定义两个不同的函数句柄,如下所示:
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;
输出: