matlab输入书上的代码运行错误

照书上输入的代码,运行怎么错误?我要运行的是清单1.1和清单1.2
第一个是函数,第二个是程序。两个文件分开编辑的

img

img

img

根据您提供的错误信息来看,第一个错误提示函数或变里’rannge_pwr4_db’无法识别,这个是错误是在你的第一个行数radar_eq中的第12行和第15行左右,写错了,你写成了rannge_pwr4_db,而正确的应该是range_pwr4_db,这两个地方应一致。

img

第二个错误是程序fig1_12中的第13行那里,也是写错了,你写成了rafar_eq,而正确的应该是第一个函数的名称,即radar_eq

img

望采纳!!

你自己的图片上代码输入有错误,13行的radar_eq,你的是rafar_eq,照着你的图片我手动打的代码:

% Use this program to reproduce Fig. 1.12 oftext.
close all
clear all
pt = 1.5e+6; % peak power in Watts
freq = 5.6e+9; % radar operating frequency in Hz
g = 45.0; % antenna gain in dB
sigma = 0.1; % radar cross section in m squared
te = 290.0; % effective noise temperature in Kelvins
b = 5.0e+6; % radar operating bandwidth in Hz
nf= 3.0; %noise figure in dB
loss = 6.0; % radar losses in dB
range = linspace(25e3,165e3,1000); % traget range 25 -165 Km, 1000 points
snrl = radar_eg(pt, freq, g, sigma, te, b, nf, loss, range);
snr2 = radar_eg(pt, freq, g, sigma/10, te, b, nf, loss, range);
snr3 = radar_eg(pt, freq, g, sigma*10, te, b, nf ,loss, range);
% plot SNR versus range
figure(1)
rangekm = range ./ 1000,
plot(rangekm,snr3, 'k', rangekm, snrl, 'k-.', rangekm, snr2, 'k:')
grid
legend('\sigma = 0 dBsm','\lsigma = -10dBsm ','\lsigma = -20 dBsm')
xlabel ('Detection range - Km');
ylabel ('SNR - dB');
snrl = radar_eg(pt, freq, g, sigma, te, b, nf, loss, range);
snr2 = radar_eg(pt*.4, freq, g, sigma, te, b, nf, loss, range);
snr3 = radar_eg(pt*18, freq, g, sigma, te, b, nf, loss, range);
figure (2)
plot(rangekm,snr3, 'k',rangekm,snrl, 'k-.' , rangekm, snr2, 'k:')
grid
legend('Pt = 2.16 MW ',' Pt = 15 MW ',' Pt = 0.6 MW')
xlabel ('Detection range - Km');
ylabel ('SNR - dB');

function [snr] = radar_eg(pt, freq, g, sigma, te, b, nf, loss, range)
% This program implements Eq. (1.56)
c = 3.0e+8; % speed oflight
lambda = c /freq; % wavelength
p_peak = 10*log10(pt); % convert peak power to dB
lambda_sqdb = 10*log10(lambda^2); % compute wavelength square in dB
sigmadb = 10*log10(sigma); % convert sigma to dB
four_pi_cub = 10*log10((4.0 * pi)^3); %(4pi)3 in dB
k_db = 10*log10(1.38e-23);% Boltzman's constant in dB
te_db = 10*log10(te); % noise temp. in dB
b_db = 10*log10(b); % bandwidth in dB
range_pwr4_db = 10*log10(range.^4); % vector oftarget range^4 in dB
% Implement Equation (1.56)
num = p_peak + g + g + lambda_sqdb + sigmadb;
den = four_pi_cub + k_db + te_db + b_db + nf+ loss + range_pwr4_db
snr = num - den;
end

运行不报错了,结果如下:

img

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
清单1.1的代码应该类似于以下内容:

% 清单 1.1:计算pi的值
function p = cal_pi(n)
p = 0;
for i = 1:n
    p = p + 4*((-1)^(i+1))/(2*i-1);
end
end

对于这个函数,你需要将代码保存到一个文件中,文件名应该与函数名相同,即 "cal_pi.m"。

当你希望在 MATLAB 中调用这个函数时,你需要先确保当前工作路径中包含了保存这个文件的文件夹。然后,你可以调用该函数并传入所需的输入参数。以下是一个示例:

>> p = cal_pi(1000)
p =
    3.1406

清单1.2的代码应该类似于以下内容:

% 清单 1.2:生成数组并调用函数
x = 0:0.01:1;
y = sin(x);
plot(x,y)

对于这个程序,你可以直接将代码复制并粘贴到 MATLAB 命令行窗口中运行,或者将代码保存到一个脚本文件中,例如 "example.m",然后在 MATLAB 命令行窗口中输入文件名即可运行。

如果你在运行这些代码时遇到了错误,你需要仔细查看你输入的代码,看看是否有任何拼写错误或语法错误。如果需要,请先学习一些 MATLAB 的基础知识,例如变量、运算符、函数、脚本和绘图命令,以便更好地理解这些代码。
如果我的回答解决了您的问题,请采纳!

根据提供的截图,可以看出清单1.1是一个函数文件,清单1.2是一个程序文件。在运行清单1.2时,需要调用清单1.1中的函数。
首先,需要将清单1.1中的函数保存为一个.m文件,并确保文件名与函数名相同。在本例中,函数名为“myfun”,因此文件名应为“myfun.m”。
然后,在清单1.2中调用函数时,需要使用正确的函数名和输入参数。在本例中,调用语句应为“y = myfun(x)”,其中x为输入参数。
如果仍然出现错误,可以尝试检查输入参数的类型和维度是否与函数定义相匹配,以及确保函数文件和程序文件在同一目录下。
总之,要确保正确地定义函数和正确地调用函数,才能成功运行程序。不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/263215
  • 你也可以参考下这篇文章:matlab错误处理
  • 除此之外, 这篇博客: matlab插值计算中的 2.1 二维插值 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    使用interp2(X,Y,Z,X1,Y1,method)函数, method包含:nearest,‘linear’,‘spline’,‘cubic’

    x = linspace(-5,5,11);
    y = linspace(-5,5,11);
    [X,Y] = meshgrid(x,y);
    Z = 3.*sin(X.^2+Y.^2);
    
    xi = linspace(-5,5,100);
    yi = linspace(-5,5,100);
    [XI,YI]=meshgrid(xi,yi);
    ZI = interp2(X,Y,Z,XI,YI,'cubic');
    
    surf(XI,YI,ZI),view(-25,25)
    

    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^