我觉得前面回答的貌似已经可以了,难道你是想看到屏幕输出“y1=1;y2=4;y3=9;”,那你可以试试这个:
for i=1:3
y(i)=i^2;
fprintf(1,['y' num2str(i) '=%d;'],y(i));
end
fprintf(1,'\n');
结果是:
y1=1;y2=4;y3=9;
>>
1、matlab是一个功能强大的软件,不仅仅在数据处理方面很优秀,在界面编程方面同样优秀,这里简单介绍下matlab界面编程的基础步骤。
2、在打开的matlab程序中,点击new---graphic user interface,打开创建gui向导--我们选择blank gui,创建空白的gui界面---选择左侧我们需要的控件,如下图,我们选择一个button---将控件拖入到gui界面的合适的位置,双击打开设置属性的界面---设计好界面后,我们先不要编写函数内容,先运行界面---他会提醒我们激活界面将保存界面和代码,我们选择yes---输入文件名,点击保存---我们回到界面编辑界面,点击button右键打开右键菜单,点击view callbacks---callback,来跳转到该控件的回调函数---我们在该函数中输入代码---这时,我们运行程序,点击按钮,即可以在命令窗口中看到button执行的效果。
3、先运行界面,使得matlab给我们创建界面的代码,然后在view callback。
程序:
wlp = 035pi;
whp = 065pi;
wc = [wlp/pi,whp/pi];
N = ceil(8/015);
n=0:N-1;
window= hanning(N);
[h1,w]=freqz(window,1);
subplot(411);
stem(window); %画窗函数
axis([0 60 0 12]);
grid;
xlabel('n');
title('Hanning窗函数');
subplot(412);
plot(w/pi,20log(abs(h1)/abs(h1(1)))); %画Hanning窗频谱图
axis([0 1 -350 0]);
grid;
xlabel('w/pi');
ylabel('幅度(dB)');
title('Hanning窗函数的频谱');
hn = fir1(N-1,wc, hanning (N));%基于窗函数的 FIR 滤波器
[h2,w]=freqz(hn,1,512); %freqz是用离散傅里叶变换的标准公示计算的 fft使用快速傅里
subplot(413);
stem(n,hn);
axis([0 60 -025 025]);
grid;
xlabel('n');
ylabel('h(n)');
title('Hanning窗函数的单位脉冲响应');
subplot(414);
plot(w/pi,20log(abs(h2)/abs(h2(1))));
grid;
xlabel('w/pi');
ylabel('幅度(dB)');
title('滤波器相对幅度响应')
结果:
function y=Disfrft(f,a,p)
% Computes discrete fractional Fourier transform
% of order a of vector x
% p (optional) is order of approximation, default N/2
N = length(f); even = ~rem(N,2);
shft = rem((0:N-1)+fix(N/2),N)+1;
f = f(:);
if (nargin==2), p = N/2; end;
p = min(max(2,p),N-1);
E = dFRFT(N,p);
y(shft,1)=E(exp(-jpi/2a([0:N-2 N-1+even]))'(E'f(shft)));
function E=dFRFT(N,p)
%function E=dFRFT(N,a,p) returns the NxN eigenvectors of the
%Fourier transform matrix
%The optional argument p is the order of approximation
global E_saved p_saved
if (length(E_saved) ~= N | p_saved ~= p),
E = make_E(N,p);
E_saved = E; p_saved = p;
else
E = E_saved;
end;
function E = make_E(N,p)
%Returns sorted eigenvectors and eigenvalues of corresponding vectors
%Construct matrix H, use approx order ord
d2 = [1 -2 1]; d_p = 1; s = 0; st = zeros(1,N);
for k = 1:p/2,
d_p = conv(d2,d_p);
st([N-k+1:N,1:k+1]) = d_p; st(1) = 0;
temp = [1:k;1:k]; temp=temp(:)'/[1:2k];
s = s + (-1)^(k-1)prod(temp)2st;
end;
% H = circulant + diagonal
col = (0:N-1)'; row = (N:-1:1);
idx = col(:,ones(N,1)) + row(ones(N,1),:);
st = [s(N:-1:2)';s(:)];
H = st(idx)+diag(real(fft(s)));
%Construct transformation matrix V
r = floor(N/2);
even = ~rem(N,2);
V1 = (eye(N-1)+flipud(eye(N-1)))/sqrt(2);
V1(N-r:end,N-r:end) = -V1(N-r:end,N-r:end);
if (even), V1(r,r)=1; end
V = eye(N); V(2:N,2:N) = V1;
% Compute eigenvectors
VHV = VHV';
E = zeros(N);
Ev = VHV(1:r+1,1:r+1); Od = VHV(r+2:N,r+2:N);
[ve,ee]=eig(Ev); [vo,eo]=eig(Od);
%malab eig returns sorted eigenvalues
%if different routine gives unsorted eigvals, then sort first
%[d,inde] = sort(diag(ee)); [d,indo] = sort(diag(eo));
%ve = ve(:,inde'); vo = vo(:,indo');
E(1:r+1,1:r+1) = fliplr(ve); E(r+2:N,r+2:N) = fliplr(vo);
E = VE;
%shuffle eigenvectors
ind = [1:r+1;r+2:2r+2]; ind = ind(:);
if (even), ind([N,N+2])=[]; else ind(N+1)=[]; end
E = E(:,ind');
用function函数,再在主程序中调用就可以。
举个简单的例子建立一个myfunctionm,然后在文件中写。
functiony=myfunction(a,b)
其中a,b是输入函数的参数,y是函数返回的值。当需要返回多个值时,可以将y看作一个数组,或者直接将函数的开头写成如function [x,y]=myfunction(x,y)的形式。
然后就是定义函数的内容,通俗的说就是怎样由输入参数a,b得到返回值y。比如最简单的y=a+b。
总结一下,将下面的代码
function y=myfunction(a,b)
y=a+b;
保存为一个m文件myfunctionm,调用方式如下。
num=myfunction(3,4);
这样就可以由函数中的y=a+b得到num的值是3+4=7。
matlab 程序的文件代码是以m文件的形式呈现的。将matlab代码编写进m文件内然后运行即可。
例子:
建立一个 helloworldm
文件内包括内容如下:
fprintf('Hello World!');
使用快捷键F5直接运行,然后可以在控制台下看到打印的:
Hello World!
循环不占内存,而化为矩阵需要更加多的内存
反而觉得你的文件读 *** 作 fid1的打开和关闭为什么要写在循环里面
这样每次循环都要打开和关闭文件一次很不合理
造成你内存不够的主要原因是你定义的 tyty元胞数组,其大小是50000x50000的所以很占内存
实际相等的字符不会有那么多,把代码改成以下那样吧
fid=fopen('read1txt','r');
fid1=fopen('read11txt','r');
k=0;tyty={};
for i=1:1:50000
qq=fgetl(fid);
for j=1:1:50000
weixin=fgetl(fid1);
if strcmp(qq,weixin)
k=k+1;
tyty{k}=qq;
end
end
end
sta=fclose(fid1);
sta1=fclose(fid);
将模拟频率转化为数字频率,设取样时间为T(要满足抽样定理) Ωp=2πfpT Ωs=2πfsT 过渡带宽度△Ω=Ωp-Ωs 阻带衰减已经超过74db,要选用Kaiser窗了,Kaiser的参数可变,要根据公式确定滤波器的参数一般都选用Ⅰ型线性相位滤波器即滤波器阶数M为偶数,程序如下: wp=;ws=;Ap=1;As=100; Rp=1-10^(-005Ap);Rs=10^(-005As); f=[fp fs]; a=[0 1]; dev=[Rp Rs]; [M,wc,beta,ftype]=kaiserord(f,a,dev); M=mod(M,2)+M; h=fir1(M,wc,ftype,kaiser(M+1,beta)); omega=linspace(0,pi,512); mag=freqz(h,[1],omega); plot(omega/pi,20log10(abs(mag))); grid; omega1=linspace(0,wp,512); h1=freqz(h,[1],omega1); omega2=linspace(ws,pi,512); h2=freqz(h,[1],omega2); fprintf('Ap=%4f\n',-20log10(min(abs(h1)))); fprintf('As=%4f\n',-20log10(max(abs(h2)))); 运行程序可以得到滤波器的通阻带衰减,画出频率响应,若同阻带衰减不满足要求还可以使用滤波器的优化,一般使用的等波纹FIR进行优化
以上就是关于很简单的程序,用matlab的for循环应该怎么编写啊全部的内容,包括:很简单的程序,用matlab的for循环应该怎么编写啊、matlab的程序应该怎么写、MATLAB中的窗函数程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)