错误使用 .* 整数只能与同一类的整数或双精度标量组合

Posted

技术标签:

【中文标题】错误使用 .* 整数只能与同一类的整数或双精度标量组合【英文标题】:Error using .* Integers can only be combined with integers of the same class, or scalar doubles 【发布时间】:2014-03-26 22:24:43 【问题描述】:

嗨,我是 matlab gui 中的新手,我有文本文件,我将其转换为二进制文件,然后将这些二进制文件传递给 mfsk 函数,但它给了我以下错误,请尽快帮助我,我发布我的完整代码,我能做些什么。 .....

Error using  .* 
Integers can only be combined with integers of the same class, or scalar doubles.
Error in GUI2>menu_mscheme_mfsk_2_Callback (line 217)
d_xover_den =((4*pi./lambda).^2*(1+alpha)*SNR_unc./(2*Gr*Gt).*b*B*noise*NF.*Ton*(1- 1/CG));

Error in gui_mainfcn (line 96)
    feval(varargin:);

Error in GUI2 (line 43)
gui_mainfcn(gui_State, varargin:);

我的文本代码是

filename= uigetfile('*.txt','File select text');
txt = fopen(filename); 
txtbits = fread(txt, inf, '*ubit1', 'b');
openvar('txtbits');
fclose(txt);
fileID = fopen(filename);
C = textscan(fileID,'%s');
i = C11;
dec2bin(i);
fclose(fileID);
celldisp(C);
set(handles.text3,'string',filename);
set(handles.text4,'string',txtbits);
handles.binary=txtbits;
guidata(hObject, handles);

我的 mfsk 代码是

decimal=handles.binary
N=decimal;
charact = 'b-+','b-o','b-v','b-^','b-*';
j=0;
for N=50:20:150
j=j+1;
b=2;    
L = decimal
freq=linspace(0.3,7,20)*1e+9;
lambda=1e+8./freq;
B = 1e+6;  % Bandwidth
n = 5;  % Path loss
noise = 4e-21;
P_ckt=0.02;  % watt 
% Ton=0.1;   % sec
Ton=L*2^b./(b*B);
SNR_unc = 10;
K=24;
N_o_K = 30/24;
alpha = 1.9;  
n=6;  % path loss component
E_comp = 5;    % To CONFORM the value
Gt = 1;
Gr = 1;
CG = 10;   % Code Gain
NF = 1; % noise-factor
d_xover_num = (P_ckt*Ton*(N/K-1)+L*E_comp*N/K);
d_xover_den = ((4*pi./lambda).^2*(1+alpha)*SNR_unc./(2*Gr*Gt).*b*B*noise*NF.*Ton*(1-   1/CG));
d_xover = (d_xover_num./d_xover_den).^(1/n);
% d_xover = abs(d_xover);
axes(handles.abc)
plot(freq,d_xover,charactj);
hold on
xlabel('Carrier Frequency'), ylabel('Cross-over distance (m)')
grid on
hold on
end
legend ('N=50','N=70','N=90','N=110','N=130')

【问题讨论】:

我建议自己调试问题。为该行设置一个断点。通过右键单击->评估选择,您可以快速尝试该行的哪一部分导致错误。显然,乘法的一侧是整数,另一侧不是。将两边转换为同一个类以避免错误。 【参考方案1】:

您可能需要查看decimal。使用 fread 将句柄读取为txtbits = fread(txt, inf, '*ubit1', 'b'),其精度为*ubit1。从文档中您会看到它读取文本并将数据作为无符号整数返回。这与向量 frequency 不兼容,它是 double 类型。您需要将数据转换为相同的格式。

但是,我以后会建议使用调试器,并尝试先自己调试代码。

【讨论】:

以上是关于错误使用 .* 整数只能与同一类的整数或双精度标量组合的主要内容,如果未能解决你的问题,请参考以下文章

将字符串转换为整数或双精度数

整数、长整数或双精度类型作为 Spark UDF 的函数参数

将浮点数与数组中的值进行比较时,“TypeError:只能将整数标量数组转换为标量索引”

mariadb/mysql:如何将 BLOB 的/UNPACK 部分转换为整数或双精度等

可以采用整数或浮点数或双精度数或任何其他可转换为浮点数的 C++ 函数

[我正在用一本书在python中学习opencv,但出现此错误:只能将整数标量数组转换为标量索引