mingmingtree 发表于 2012-3-28 16:15

在线等:怎么把输出的x和y的一一对应的数保存为txt呢?

%函数文件 gs01.m
function []=gs01()
for t=1513:0.005:1515
    y=lfg2(t);
    fprintf('%4d %6.4f\n',t,y);
end

function y=lfg2(x) %子函数
a=1;
b=1513;
c=0.3;
y=a*exp(-4*log2((x-b)/c)^2);
%plot(x,y)


用dlmwrite('data.txt',y,'newline', 'pc','precision','%.14f')
或者
    save fy.txt y -ascii貌似都不行呢。还有,为何我的代码最后一行plot显示的图看不到坐标点呢?

xiezhh 发表于 2012-3-29 09:43

回复 1 # mingmingtree 的帖子

这样就行了
a = 1;
b = 1513;
c = 0.3;
lfg2 = @(x)a*exp(-4*log2((x-b)/c).^2);
t = 1513:0.005:1515;
y = lfg2(t);
plot(t,y,'-*')
dlmwrite('datademo.txt',,'newline','pc');

mingmingtree 发表于 2012-3-29 10:28

本帖最后由 mingmingtree 于 2012-3-29 10:36 编辑

回复 2 # xiezhh 的帖子

{:3_53:}太谢谢了!plot成功显示信号图形了。继续请教:
为了能把401个点的y和t的值以txt格式保存下来,我加了 fprintf('%6.4f %6.4f\n',y,t)这条语句,输出的点仍然是按照401行2列排列,我想要的是第一列是y的值(值的大小从0到1再到0的高斯分布),第二列是t的值(值的大小从1513到1515),然而程序运行后为何是先把y值排列完(前200行加第201行的第一列)再排t的值呢??怎么样才能输出我想要的并以txt保存呢?

xiezhh 发表于 2012-3-29 12:00

你没看到这条命令吗?
dlmwrite('datademo.txt',,'newline','pc');
从当前路径下找文件datademo.txt即可。

mingmingtree 发表于 2012-3-29 14:31

回复 4 # xiezhh 的帖子

太抱歉了,给您回复才看到。
恩,这条命令实现了保存为txt文档,现在这个程序是只设置了一个峰值,如果要在t属于1510-1590内设置4个峰值的话,是不是多设置几个函数就可以了呢?我正在尝试着修改程序。下午有点儿忙,不好意思回复晚了,希望接下来还可以向您请教呢,真的非常感激!((em:12))

wfyyf 发表于 2012-3-29 14:59

帮你顶一下。。。。。。。

mingmingtree 发表于 2012-3-29 16:11

回复 6 # wfyyf 的帖子

谢谢!{:{01}:}

mingmingtree 发表于 2012-3-29 18:45

本帖最后由 mingmingtree 于 2012-3-29 19:08 编辑

回复 4 # xiezhh 的帖子

请问:我想沿着横坐标延伸的方向连续绘四个高斯脉冲,用的是同一个高斯分布函数来生成,只是四个峰的高矮胖瘦不全相同,因此要设置每个高斯脉冲函数的参数,并且要把各个y与x对应的点一一保存为txt。我的程序如下,为何plot只显示第二个峰(后面那个plot的)还没有第一个峰呢(程序里暂时只设置了两个峰,打算以后再弄四个)?我的和plotyy的不是同一种哦。不知道我这样描述清楚了没,菜鸟还在求进步。见谅啊!!不是用两个图来分别显示,而是让两个峰显示在同一个图中哦,怎么用plot(x,y1,'r',x,y2,'b')也是一样的效果?
a = 1;
b1 = 1513;b2=1535;
c1 = 0.3;c2=0.2;
g1 = @(t)a*exp(-4*log2((t-b1)/c1).^2);
g2 = @(t)a*exp(-4*log2((t-b2)/c2).^2);
x = 1513:0.005:1550;
y1 = g1(x);
y2 = g2(x);
plot(x,y1,'r')
hold on
plot(x,y2,'b')
xlabel('wavelength'),ylabel('guangqiang');
hold off
dlmwrite('datademo11.txt',,'newline','pc');
dlmwrite('datademo12.txt',,'newline','pc');

mingmingtree 发表于 2012-3-29 20:02

回复 4 # xiezhh 的帖子

我刚刚把图放大了,看到了红色和蓝色部分都有,证明两段函数都显示了,而不像我上面问到的说只显示一个峰。然而,奇怪的是第二个峰值并不像第一个那样分布,纵坐标的波动范围竟然达到-5e+35至 5e+35 这么大的值,而不是像第一个峰的纵坐标在1之内。我是按照需要设置了b2和c2的值啊,难道我哪里又弄错了?{:{13}:}代码还是
a = 1;
b1 = 1513;b2=1535;
c1 = 0.3;c2=0.2;
g1 = @(t1)a*exp(-4*log2((t1-b1)/c1).^2);
g2 = @(t2)a*exp(-4*log2((t2-b2)/c2).^2);
x1 = 1513:0.005:1515;
x2 = 1515:0.005:1550;
y1 = g1(x1);
y2 = g2(x2);
plot(x1,y1,'r',x2,y2,'b')

mingmingtree 发表于 2012-3-29 20:40

回复 4 # xiezhh 的帖子

我刚刚把b2改成1515,运行后显示的图就是我想要的了(和第一个峰相似的峰);看来程序应该是差不多这样了,然而数值计算方面还要学习一下,明天去请教一下老师。
还是很感激您哦!{:{51}:}

xiezhh 发表于 2012-3-29 21:03

回复 10 # mingmingtree 的帖子

看来问题已经解决了,挺好!

mingmingtree 发表于 2012-3-29 21:54

回复 11 # xiezhh 的帖子

总之,多亏您的指点哦!
旧问题是解决了,再往前走,肯定还有新的问题不断出现,恩,不管怎样,都要勇敢面对,坚持走下去。
希望以后来请教您的时候,不要嫌弃我呢!{:{27}:}

ChaChing 发表于 2012-4-1 00:15

本帖最后由 ChaChing 于 2012-4-1 00:16 编辑

mingmingtree 发表于 2012-3-28 16:15 http://www.chinavib.com/static/image/common/back.gif
... save fy.txt y -ascii貌似都不行呢 ...

假日比较有空学习, 试了下好像也可以, 例如2F谢老师的这行 dlmwrite('datademo.txt',,'newline','pc');换成 aa=; save datademo2.txt aa -ascii

ChaChing 发表于 2012-4-1 00:37

个人习惯上很少使用dlmwrite, 所以试试学习下
发现dlmwrite2的precision default好像是%g, 所以提醒下LZ看下LZ的*.txt档
1513, 1513.005, ...1513.045全变成1513了
可能需设定下precision参数, save反而没这问题

mingmingtree 发表于 2012-4-1 09:10

回复 14 # ChaChing 的帖子

好感动!
论坛不但有高手,还有这么多真心愿意乐于助人的,受教了。

恩恩,我私下自己多练练,以后有问题希望能再拿出来讨论哦!
页: [1] 2
查看完整版本: 在线等:怎么把输出的x和y的一一对应的数保存为txt呢?