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)); %模拟信号

没有错呀!用MATLAB运行时可以:
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语言知识讲堂

1)C语言之数据类型、变量、常量

以上是关于MATLAB程序 找错的主要内容,如果未能解决你的问题,请参考以下文章

关于MATLAB程序

关于matlab的一个程序问题

请教matlab程序错误

如何在远程服务器上运行matlab程序

如何将lingo中的程序在matlab中运行

matlab程序 BP神经网络预测 程序如下: