在MATLAB中由矢量输入绘制复数并转换为lagscale

piv4azn7  于 2023-01-31  发布在  Matlab
关注(0)|答案(1)|浏览(148)

我有一个包含Target1、Target2和VDD的csv数据文件。每个数据都有x值和y值。X值是标量或真实的,但Y是复数。对于Target1和Target2,没有复数,因为它们在图中是直线。但VDD的Y值是复数。在csv数据中,Y有真实的部和复部两部分,VDD的Y值由复数(实部和虚部)的两个实值部分分开。
因此,Target1、Target2和VDD的绘图将是2D的,所有3个参数的x轴点相同。我尝试绘图,但VDD未按预期绘图,因为VDD y部分的csv文件中的值与绘图中的值不匹配,并且有一条警告消息显示我无法解决该问题。
稍后我还将数据转换为logscle。
有谁能帮我吗?这里是CSV data。我的MATLAB代码和警告如下。
MATLAB代码:

% open data file
fid = fopen('parametric_Test-Copy.csv');

% Read data in from csv file
%readHeader = textscan(fid,'%s %s','Headerlines',0,'Delimiter',',');
readData = textscan(fid,'%f %f %f %f %f %f %f %f %f','Headerlines',1,'Delimiter',',');

% Extract data from readData
target1x = readData{1,1}(:,1);
target1y = readData{1,2}(:,1);
target2x = readData{1,4}(:,1);
target2y = readData{1,5}(:,1);
vddx = readData{1,7}(:,1);
vddy_Re = readData{1,8}(:,1);
vddy_Im = readData{1,9}(:,1);

vddz = complex(vddy_Re, vddy_Im);

% Plot Data
f1 = figure(1);
cla; hold on; grid on;
plot(target1x,target1y,'r-');
hold on;
plot(target2x,target2y,'b-');
hold on;
plot(vddx,vddz,'g-');
%set(gca,'yscale','log');
%set(gca,'xscale','log');
%xlim([0 3*10^9])

警告:

Warning: Imaginary parts of complex X and/or Y arguments ignored
In parametric_Test (line 26)
syqv5f0l

syqv5f0l1#

你需要定义一个复数大于或小于另一个复数的标准。一种方法是忽略虚部(MATLAB默认是这样做的);或者你可以使用abs来取模/复量值;另一种方法是使用字典顺序。
阅读this post from math.stackexchange.com了解更多信息。
如果你想使用第一种方法(即忽略虚部),使用real来避免警告消息。在我看来,完全关闭警告消息不是一个好主意,但你可以使用:

warning('off','MATLAB:plot:IgnoreImaginaryXYPart');

您可以通过以下方式再次打开它:

warning('on','MATLAB:plot:IgnoreImaginaryXYPart');

阅读文档中的Suppress Warnings以了解更多详细信息。

    • 实施其中两种方法:**

因此,如果您在绘图时将realvddz向量(即real(vddz))一起使用(即

plot(vddx,real(vddz),'g-');

或者如果你关闭警告(或者不关闭),你会得到(你已经得到的):

既然你认为上面的图是不正确的,那么很明显你会想用其他的标准来比较复数。用absvddz对你来说确实是个窍门,你在评论中也证实了这一点。

plot(vddx,abs(vddz),'g-');

其给出:

P. S它与对数标度无关。

相关问题