声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2550|回复: 19

[编程技巧] 在线等:怎么把输出的x和y的一一对应的数保存为txt呢?

[复制链接]
发表于 2012-3-28 16:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
%函数文件 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显示的图看不到坐标点呢?
回复
分享到:

使用道具 举报

发表于 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',[t',y'],'newline','pc');

评分

2

查看全部评分

 楼主| 发表于 2012-3-29 10:28 | 显示全部楼层
本帖最后由 mingmingtree 于 2012-3-29 10:36 编辑

回复 2 # xiezhh 的帖子

太谢谢了!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保存呢?
发表于 2012-3-29 12:00 | 显示全部楼层
你没看到这条命令吗?
dlmwrite('datademo.txt',[y',t'],'newline','pc');
从当前路径下找文件datademo.txt即可。
 楼主| 发表于 2012-3-29 14:31 | 显示全部楼层
回复 4 # xiezhh 的帖子

太抱歉了,给您回复才看到。
恩,这条命令实现了保存为txt文档,现在这个程序是只设置了一个峰值,如果要在t属于1510-1590内设置4个峰值的话,是不是多设置几个函数就可以了呢?我正在尝试着修改程序。下午有点儿忙,不好意思回复晚了,希望接下来还可以向您请教呢,真的非常感激!
发表于 2012-3-29 14:59 | 显示全部楼层
帮你顶一下。。。。。。。
 楼主| 发表于 2012-3-29 16:11 | 显示全部楼层
回复 6 # wfyyf 的帖子

谢谢!
 楼主| 发表于 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',[x',y1'],'newline','pc');
dlmwrite('datademo12.txt',[x',y2'],'newline','pc');
 楼主| 发表于 2012-3-29 20:02 | 显示全部楼层
回复 4 # xiezhh 的帖子

我刚刚把图放大了,看到了红色和蓝色部分都有,证明两段函数都显示了,而不像我上面问到的说只显示一个峰。然而,奇怪的是第二个峰值并不像第一个那样分布,纵坐标的波动范围竟然达到-5e+35至 5e+35 这么大的值,而不是像第一个峰的纵坐标在1之内。我是按照需要设置了b2和c2的值啊,难道我哪里又弄错了?代码还是
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')
 楼主| 发表于 2012-3-29 20:40 | 显示全部楼层
回复 4 # xiezhh 的帖子

我刚刚把b2改成1515,运行后显示的图就是我想要的了(和第一个峰相似的峰);看来程序应该是差不多这样了,然而数值计算方面还要学习一下,明天去请教一下老师。
还是很感激您哦!
发表于 2012-3-29 21:03 | 显示全部楼层
回复 10 # mingmingtree 的帖子

看来问题已经解决了,挺好!
 楼主| 发表于 2012-3-29 21:54 | 显示全部楼层
回复 11 # xiezhh 的帖子

总之,多亏您的指点哦!
旧问题是解决了,再往前走,肯定还有新的问题不断出现,恩,不管怎样,都要勇敢面对,坚持走下去。
希望以后来请教您的时候,不要嫌弃我呢!
发表于 2012-4-1 00:15 | 显示全部楼层
本帖最后由 ChaChing 于 2012-4-1 00:16 编辑

假日比较有空学习, 试了下好像也可以, 例如2F谢老师的这行
  1. dlmwrite('datademo.txt',[t',y'],'newline','pc');
复制代码
换成
  1. aa=[t' y']; save datademo2.txt aa -ascii
复制代码
发表于 2012-4-1 00:37 | 显示全部楼层
个人习惯上很少使用dlmwrite, 所以试试学习下
发现dlmwrite2的precision default好像是%g, 所以提醒下LZ看下LZ的*.txt档
1513, 1513.005, ...1513.045全变成1513了

可能需设定下precision参数, save反而没这问题
 楼主| 发表于 2012-4-1 09:10 | 显示全部楼层
回复 14 # ChaChing 的帖子

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

恩恩,我私下自己多练练,以后有问题希望能再拿出来讨论哦!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-6 23:48 , Processed in 0.071108 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表