Matlab 如何编写代码来判断结果是实数还是复数,并将其存储在向量中?
如果我想计算二次方程的根,如下所示:Matlab 如何编写代码来判断结果是实数还是复数,并将其存储在向量中?,matlab,Matlab,如果我想计算二次方程的根,如下所示: A=0.07; B=1.50+1.31*x_1; C=-1.37*x_1+1.08*x_1^2-0.15; x_2=(-B+sqrt(B^2-4*A*C))/(2*A) 其中x_1是一个参数,我想从网格linspace(-1.5,2.5200)中选择x_1。如果x_2的值是实数,那么我将该值存储在向量ra中,否则,x_2是复数,忽略它。最后,我将得到一个向量ra=[x_21,x_22,x_23,…x_2k]。我被困在如何编写代码来完成它 %I
A=0.07;
B=1.50+1.31*x_1;
C=-1.37*x_1+1.08*x_1^2-0.15;
x_2=(-B+sqrt(B^2-4*A*C))/(2*A)
其中x_1
是一个参数,我想从网格linspace(-1.5,2.5200)
中选择x_1
。如果x_2
的值是实数,那么我将该值存储在向量ra
中,否则,x_2
是复数,忽略它。最后,我将得到一个向量ra=[x_21,x_22,x_23,…x_2k]
。我被困在如何编写代码来完成它
%I try to write such a code as follows but I am confused about this for loop.
for x_1=linspace(-1.5,2.5,200)
if isreal(x_2)=1
ra==x_2
elseif isreal(x_2)=0
end
使用元素操作评估所有元素的二次函数可能是一种选择。这里,我评估
x_2
中向量/网格元素的所有索引x_1
。执行此操作后,可以使用~isreal
创建for循环以消除所有非实(复杂组件),其中~
表示非/函数的补充。在这种情况下,可以将其视为非真实。在这里,我用占位符NaN
(不是数字)替换任何复杂的组件,但是您可以通过此代码段下面的替代代码轻松地只存储实数
方法1:用NaN(非数字)占位符替换复数
方法2:仅实数(可选代码段) 使用MATLAB R2019b运行
x_1 = linspace(-1.5,2.5,200);
A = 0.07;
B = 1.50 + 1.31.*x_1;
C = -1.37.*x_1 +1.08.*x_1.^2 - 0.15;
x_2 = (-B + sqrt(B.^2-4.*A.*C))./(2.*A);
x_2 = x_2.';
for Value = 1: length(x_2)
if ~isreal(x_2(Value))
x_2(Value) = NaN;
end
end
x_2
x_1 = linspace(-1.5,2.5,200);
A = 0.07;
B = 1.50 + 1.31.*x_1;
C = -1.37.*x_1 +1.08.*x_1.^2 - 0.15;
x_2 = (-B + sqrt(B.^2-4.*A.*C))./(2.*A);
x_2 = x_2.';
Row = 1;
for Value = 1: length(x_2)
if isreal(x_2(Value))
x_2_Result(Row,1) = x_2(Value);
Row = Row + 1;
end
end
x_2_Result