MATLAB程序 找错
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB程序 找错相关的知识,希望对你有一定的参考价值。
MATLAB程序实现如下:
%采样定理例题
Dt=0.00005;
t=-0.005:Dt:0.005;
xa=exp(-1000*abs(t)); %模拟信号
Wmax=2*pi*2000;
K=500;k=0:1:K;
W=k*Wmax/K;
Xa=xa*exp(-j*t'*W)*Dt;
Xa=real(Xa); %连续时间傅立叶变换
W=[-fliplr(W),W(2:501)]; %频率从-Wmax to Wmax
Xa=[fliplr(Xa), Xa(2:501)]; %Xa介于-Wmax to Wmax
subplot(421)
plot(t*1000,xa)
xlabel('时间(毫秒)')
ylabel('xa(t)')
title('模拟信号')
subplot(422)
plot(W/(2*pi*1000),Xa*1000)
xlabel('频率(kHz)')
ylabel('Xa(jw)')
title('连续时间傅立叶变换')
Ts=0.0002;n=-25:1:25; x=exp(-1000*abs(n*Ts)); %离散信号
K=500; k=0:1:K; w=pi*k/K;
X=x*exp(-j*n'*w); X=real(X); %离散时间傅立叶变换
w=[-fliplr(w), w(2:K+1)];
X=[fliplr(X), X(2:K+1)];
subplot(423)
stem(n*Ts*1000,x)
xlabel('时间(毫秒)')
ylabel('xl(n)')
title('离散信号Ts=0.2毫秒')
subplot(424)
plot(w/pi, X)
xlabel('频率(弧度)')
ylabel('Xl(w)')
title('离散时间傅立叶变换')
Ts=0.0005;n=-10:1:10; x=exp(-1000*abs(n*Ts)); %离散信号
K=500; k=0:1:K; w=pi*k/K;
X=x*exp(-j*n'*w); X=real(X); %离散时间傅立叶变换
w=[-fliplr(w), w(2:K+1)];
X=[fliplr(X), X(2:K+1)];
subplot(425)
stem(n*Ts*1000,x)
xlabel('时间(毫秒)')
ylabel('xl(n)')
title('离散信号Ts=0.5毫秒')
subplot(426)
plot(w/pi, X)
xlabel('频率(弧度)')
ylabel('Xl(w)')
title('离散时间傅立叶变换')
Ts=0.001;n=-5:1:5; x=exp(-1000*abs(n*Ts)); %离散信号
K=500; k=0:1:K; w=pi*k/K;
X=x*exp(-j*n'*w); X=real(X); %离散时间傅立叶变换
w=[-fliplr(w), w(2:K+1)];
X=[fliplr(X), X(2:K+1)];
subplot(427)
stem(n*Ts*1000,x)
xlabel('时间(毫秒)')
ylabel('xl(n)')
title('离散信号Ts=1毫秒')
subplot(428)
plot(w/pi, X)
xlabel('频率(弧度)')
ylabel('Xl(w)')
title('离散时间傅立叶变换')
下面这条语句错在哪儿了?
xa=exp(-1000*abs(t)); %模拟信号
Dt=0.00005;
t=-0.005:Dt:0.005;
xa=exp(-1000*abs(t));
>> disp(xa)
Columns 1 through 9
0.0067 0.0071 0.0074 0.0078 0.0082 0.0087 0.0091 0.0096 0.0101
Columns 10 through 18
0.0106 0.0111 0.0117 0.0123 0.0129 0.0136 0.0143 0.0150 0.0158 参考技术A 可能是你的百分号是用全角输入的,试一下把百分号删了,再用半角输入一个 参考技术B xa=exp(-1000.*abs(t)); %1000的右下脚加一个点
程序员如何调试?如何找错?
前言:
本篇文章内容概念较多,但确非常重要,望君细细观看,必能让您从此获益
开发环境win10环境,编译器为visual studio 2017(下面的结果依赖于这个环境,visual studio2013~2019都行)
首先说一下这次我们要调试的程序代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int i = 0;
int arr[10] = { 0 };
for (i = 0; i <= 12; i++)
{
arr[i] = 0;
printf("hehe\\n");
}
return 0;
}
常见的错误分类:
编译型错误
编译型错误
运行时错误:
需要进行调试
调试:
1、调试环境的准备:选择DEBUG模式
release版本对我们来说是无法进行调试的,测试开发人员才会使用它
2、使用快捷键:
第一对快捷键:F5与F9
第2对快捷键F10与F11
第3个快捷键ctrl+F5
执行你的程序,不进行调试
上面就是我们要调试的代码
再次拷贝一下
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int i = 0;
int arr[10] = { 0 };
for (i = 0; i <= 12; i++)
{
arr[i] = 0;
printf("hehe\\n");
}
return 0;
}
运行该程序就会发现会陷入死循环
数一数输出了多少hehe?
不用怀疑确实陷入了死循环,来,我们通过调试找出这个原因
提示:一定要在win10下且用visual studio系列的编译器哦
打好断点并按F5如图
在调试状态下那么就可以调出监视窗口,记住一定要在调试状态下,不然是不会有监视选项的
在监视窗口输入arr与i
接下来按F10或者F11进行调试
当按下多次F10或F11到达这一步
好家伙,i终于到了12,是不是for循环结束了呀?再按一下F10或F11
这是啥情况?怎么i又变为0了?大白天见乌龟了呀!!!
继续添加调试的变量
发现i与arr[12]的地址是相同的,也就是说他们有一个共同的家(内存空间),
他们的值是相同的,当i=12时,arr[12]被赋值为0,那么i又变回0了!!!
解决办法:换成release
或者改成这样:
好了通过调试终于解决了问题,至于为什么要这样改我会在C语言知识讲堂上细讲,附上第一节的C语言知识讲堂
以上是关于MATLAB程序 找错的主要内容,如果未能解决你的问题,请参考以下文章