找回密码
 注册
Simdroid-非首页
查看: 131|回复: 16

Matlab 脚本形式的M文件编程如何保存TXT格式的数据

[复制链接]
发表于 2012-4-8 09:54:31 | 显示全部楼层 |阅读模式 来自 广西桂林
求助各位,我在matlab进行script的M文件编程求一些角度值,需要保存成txt格式的文件,但不成功!求解答
发表于 2012-4-8 19:46:26 | 显示全部楼层 来自 大连理工大学
Simdroid开发平台
直接把后缀改成txt,应该就行了吧
回复 不支持

使用道具 举报

 楼主| 发表于 2012-4-8 22:43:41 | 显示全部楼层 来自 广西桂林
本帖最后由 Rnavy 于 2012-4-8 22:44 编辑
h6star 发表于 2012-4-8 19:46
直接把后缀改成txt,应该就行了吧

哦,我没说清楚。是在M文件中编程求一系列的角度值,之后想把求得角度值保存在一个txt文件中,不知道是否可行?我不懂如何进行实现。有人说可以用save(‘A1.txt’,A1),其中A1.txt是保存的文件名,A1是所求变量名,这样可行么?急求答案!查看了好多资料都找不到
回复 不支持

使用道具 举报

发表于 2012-4-8 22:51:26 | 显示全部楼层 来自 陕西西安
fid=fopen('path\A1.txt','wt');
fprintf(fid,A1);

回复 不支持

使用道具 举报

发表于 2012-4-9 21:25:40 | 显示全部楼层 来自 大连理工大学
那用dlmwrite就行了
回复 不支持

使用道具 举报

 楼主| 发表于 2012-4-10 10:39:32 | 显示全部楼层 来自 广西桂林
本帖最后由 Rnavy 于 2012-4-10 10:42 编辑

楼上的两位,你们的方法我试过了,但是好像都只保留一个值,可能我是菜鸟级别,目前还不清楚编程格式。先贴上程序,请求鞭笞。A1,A2,A3,A4 ,A5,A6都是需要求的变量,想保存都矩阵的形式中去。

  1. d2=85;X0=85;Y0=0;Z0=149.9999879082;  %常量定义
  2. syms Px Py Pz
  3. Px=X0;Pz=Z0;
  4. for t=0:0.2:1;  %时间段
  5.    Nx=-1;Oy=1;Az=-1;Ny=0;Nz=0;Ox=0;Oz=0;Ax=0;Ay=0;
  6. Py=Y0+t*0.5;
  7. A1=atan2(Py,Px)-atan2(d2,sqrt(Px+Py-(d2)^2));
  8. fid=fopen('E:\ADAMS0\navy7\A1.txt','w');
  9. fprintf(fid,'%6.2f  %6.2f\n',A1);
  10. fclose(fid);
  11. %dlmwrite('A1.txt',A1);%这里是引用楼上的方法之一
  12. S1=sin(A1);C1=cos(A1);
  13. A2=atan2((Px*C1+Py*S1),(Pz));
  14. C2=cos(A2);S2=sin(A2);
  15. A3=S2*(C1*Px+S1*Py)+C2*Pz;
  16. A4=atan2((Ax*(-S1)+C2*Ay),C2*(C1*Ax+S1*Ay)-S2*Az);
  17. S4=sin(A4);C4=cos(A4);
  18. A5=atan2((C4*(C2*(C1*Ax+S1*Ay)-S2*Az)...
  19.     +S4*(C1*Ay-S1*Ax)),(S2*(C1*Ax+S1*Ay)+C2*Az));
  20. S5=sin(A5);C5=cos(A5);
  21. A6=atan2(((-C5*(C4*(C2*(C1*Ox+S1*Oy)-S2*Oy)+S4*(-S1*Ox+C1*Oy))...
  22.     +S5*(S2*(C1*Ox+S1*Oy))+C2*Oz)),(-S4*(C2*(C1*Ox+S1*Oy))+C4*(-S1*Ox+C1*Oy)));
  23. end
复制代码
回复 不支持

使用道具 举报

发表于 2012-4-10 16:18:21 | 显示全部楼层 来自 大连理工大学
你先写个矩阵储存这些数据,如A=[A1,A2,A3,A4,A5,A6];
然后再用dlmwrite保存就行了
回复 不支持

使用道具 举报

 楼主| 发表于 2012-4-10 16:49:05 | 显示全部楼层 来自 广西桂林
h6star 发表于 2012-4-10 16:18
你先写个矩阵储存这些数据,如A=[A1,A2,A3,A4,A5,A6];
然后再用dlmwrite保存就行了 ...

嗯~~我想A1到A6都是单独的矩阵
回复 不支持

使用道具 举报

发表于 2012-4-10 16:53:28 | 显示全部楼层 来自 大连理工大学
你这个算出来,A1就仅仅是一个数啊
回复 不支持

使用道具 举报

 楼主| 发表于 2012-4-10 16:54:00 | 显示全部楼层 来自 广西桂林
cherryjjss 发表于 2012-4-8 22:51
fid=fopen('path\A1.txt','wt');
fprintf(fid,A1);

请问能否存储成矩阵形式?
回复 不支持

使用道具 举报

发表于 2012-4-10 17:00:09 | 显示全部楼层 来自 大连理工大学
实在不懂你的意思,如果你的A是矩阵,存出来的就是矩阵
回复 不支持

使用道具 举报

发表于 2012-4-10 23:37:42 | 显示全部楼层 来自 陕西西安
d2=85;X0=85;Y0=0;Z0=149.9999879082;  %常量定义
syms Px Py Pz
Px=X0;Pz=Z0;


% for t=0:0.2:1;  %时间段
%    Nx=-1;Oy=1;Az=-1;Ny=0;Nz=0;Ox=0;Oz=0;Ax=0;Ay=0;
% Py=Y0+t*0.5;
% A1()=atan2(Py,Px)-atan2(d2,sqrt(Px+Py-(d2)^2));
for i=1:5
t=i/5;  %时间段
   Nx=-1;Oy=1;Az=-1;Ny=0;Nz=0;Ox=0;Oz=0;Ax=0;Ay=0;
Py=Y0+t*0.5;
A1(i)=atan2(Py,Px)-atan2(d2,sqrt(Px+Py-(d2)^2));

dlmwrite('A1.txt',A1);%这里是引用楼上的方法之一
S1=sin(A1);C1=cos(A1);
A2=atan2((Px*C1+Py*S1),(Pz));
C2=cos(A2);S2=sin(A2);
A3=S2*(C1*Px+S1*Py)+C2*Pz;
A4=atan2((Ax*(-S1)+C2*Ay),C2*(C1*Ax+S1*Ay)-S2*Az);
S4=sin(A4);C4=cos(A4);
A5=atan2((C4*(C2*(C1*Ax+S1*Ay)-S2*Az)...
    +S4*(C1*Ay-S1*Ax)),(S2*(C1*Ax+S1*Ay)+C2*Az));
S5=sin(A5);C5=cos(A5);
A6=atan2(((-C5*(C4*(C2*(C1*Ox+S1*Oy)-S2*Oy)+S4*(-S1*Ox+C1*Oy))...
    +S5*(S2*(C1*Ox+S1*Oy))+C2*Oz)),(-S4*(C2*(C1*Ox+S1*Oy))+C4*(-S1*Ox+C1*Oy)));
end
fid=fopen('F:\share\matlaB\a.txt','wt');
fprintf(fid,'%6.2f ',A1);
fclose(fid);



我改了一部分,下面自己再改下

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2012-4-11 16:07:30 | 显示全部楼层 来自 广西桂林
本帖最后由 Rnavy 于 2012-4-11 16:11 编辑
cherryjjss 发表于 2012-4-10 23:37
d2=85;X0=85;Y0=0;Z0=149.9999879082;  %常量定义
syms Px Py Pz
Px=X0z=Z0;

首先谢谢您了!这样的保存方式基本符合了我的期望。我改了剩下的部分,调试没通过。
d2=85;X0=85;Y0=0;Z0=149.9999879082;  %常量定义
syms Px Py Pz
Px=X0;Pz=Z0;
for i=1:5
t=i/5;  %时间段
   Nx=-1;Oy=1;Az=-1;Ny=0;Nz=0;Ox=0;Oz=0;Ax=0;Ay=0;
Py=Y0+t*0.5;
theta1(i)=atan2(Py,Px)-atan2(d2,sqrt(Px+Py-(d2)^2)); %#ok<*SAGROW>
dlmwrite('A1.txt',theta1);
S1=sin(theta1);C1=cos(theta1);
theta2(i)=atan2((Px*C1+Py*S1),(Pz));
C2=cos(theta2);S2=sin(theta2);
dlmwrite('A2.txt',theta2);
theta3(i)=S2*(C1*Px+S1*Py)+C2*Pz;
dlmwrite('A3.txt',theta3);
theta4(i)=atan2((Ax*(-S1)+C2*Ay),C2*(C1*Ax+S1*Ay)-S2*Az);
S4=sin(theta4);C4=cos(theta4);
dlmwrite('A4.txt',theta4);
theta5 (i)=atan2((C4*(C2*(C1*Ax+S1*Ay)-S2*Az)...
    +S4*(C1*Ay-S1*Ax)),(S2*(C1*Ax+S1*Ay)+C2*Az));
S5=sin(theta5);C5=cos(theta5);
dlmwrite('A5.txt',theta5);
theta6(i)=atan2(((-C5*(C4*(C2*(C1*Ox+S1*Oy)-S2*Oy)+S4*(-S1*Ox+C1*Oy))...
    +S5*(S2*(C1*Ox+S1*Oy))+C2*Oz)),(-S4*(C2*(C1*Ox+S1*Oy))+C4*(-S1*Ox+C1*Oy)));
end
fid=fopen('E:\ADAMS0\navy7\A1.txt','wt');
fprintf(fid,'%6.2f ',theta1);
fclose(fid);
fid=fopen('E:\ADAMS0\navy7\A2.txt','wt');
fprintf(fid,'%6.2f ',theta2);
fclose(fid);
fid=fopen('E:\ADAMS0\navy7\A2.txt','wt');
fprintf(fid,'%6.2f ',theta3);
fclose(fid);
fid=fopen('E:\ADAMS0\navy7\A2.txt','wt');
fprintf(fid,'%6.2f ',theta4);
fclose(fid);
fid=fopen('E:\ADAMS0\navy7\A2.txt','wt');
fprintf(fid,'%6.2f ',theta5);
fclose(fid);
fid=fopen('E:\ADAMS0\navy7\A2.txt','wt');
fprintf(fid,'%6.2f ',theta6);
fclose(fid);
调试过程中出现了这样的错误:
> In Test2 at 8
In an assignment  A(I) = B, the number of elements in B and I must be the same.

Error in Test2 (line 11)
theta2(i)=atan2((Px*C1+Py*S1),(Pz));
编程红色部分都会出现这样的问题。
回复 不支持

使用道具 举报

 楼主| 发表于 2012-4-11 16:13:35 | 显示全部楼层 来自 广西桂林
h6star 发表于 2012-4-10 17:00
实在不懂你的意思,如果你的A是矩阵,存出来的就是矩阵

可能我的表达有误,是这样子的。我是想在时间t的范围内,每一个步长求出A1~A6的值,并且分别存到以A1.txt~A6.txt的文件中去。望解答!
回复 不支持

使用道具 举报

发表于 2012-4-11 19:04:01 | 显示全部楼层 来自 大连理工大学
Rnavy 发表于 2012-4-11 16:13
可能我的表达有误,是这样子的。我是想在时间t的范围内,每一个步长求出A1~A6的值,并且分别存到以A1.txt ...

d2=85;X0=85;Y0=0;Z0=149.9999879082;  %常量定义
%  syms Px Py Pz
Px=X0;Pz=Z0;
for i=1:5
t=i/5;  %时间段
    Nx=-1;Oy=1;Az=-1;Ny=0;Nz=0;Ox=0;Oz=0;Ax=0;Ay=0;
Py=Y0+t*0.5;
theta1=atan2(Py,Px)-atan2(d2,sqrt(Px+Py-(d2)^2)); %#ok<*SAGROW>
dlmwrite('A1.txt',theta1,'delimiter','\t','newline','pc','-append');
S1=sin(theta1);C1=cos(theta1);
theta2=atan2((Px*C1+Py*S1),(Pz));
C2=cos(theta2);S2=sin(theta2);
dlmwrite('A2.txt',theta2,'delimiter','\t','newline','pc','-append');
theta3=S2*(C1*Px+S1*Py)+C2*Pz;
dlmwrite('A3.txt',theta3,'delimiter','\t','newline','pc','-append');
theta4=atan2((Ax*(-S1)+C2*Ay),C2*(C1*Ax+S1*Ay)-S2*Az);
S4=sin(theta4);C4=cos(theta4);
dlmwrite('A4.txt',theta4,'delimiter','\t','newline','pc','-append');
theta5=atan2((C4*(C2*(C1*Ax+S1*Ay)-S2*Az)+S4*(C1*Ay-S1*Ax)),(S2*(C1*Ax+S1*Ay)+C2*Az));
S5=sin(theta5);C5=cos(theta5);
dlmwrite('A5.txt',theta5,'delimiter','\t','newline','pc','-append');
theta6=atan2(((-C5*(C4*(C2*(C1*Ox+S1*Oy)-S2*Oy)+S4*(-S1*Ox+C1*Oy))+S5*(S2*(C1*Ox+S1*Oy))+C2*Oz)),(-S4*(C2*(C1*Ox+S1*Oy))+C4*(-S1*Ox+C1*Oy)));
dlmwrite('A6.txt',theta6,'delimiter','\t','newline','pc','-append');
end
那这样,不知道是否满足你要求了
回复 不支持

使用道具 举报

发表于 2012-4-11 19:07:52 | 显示全部楼层 来自 大连理工大学
Rnavy 发表于 2012-4-11 16:13
可能我的表达有误,是这样子的。我是想在时间t的范围内,每一个步长求出A1~A6的值,并且分别存到以A1.txt ...

帮你修改了一下,不知道能满足你要求不
d2=85;X0=85;Y0=0;Z0=149.9999879082;  %常量定义
%  syms Px Py Pz
Px=X0;Pz=Z0;
for i=1:5
t=i/5;  %时间段
    Nx=-1;Oy=1;Az=-1;Ny=0;Nz=0;Ox=0;Oz=0;Ax=0;Ay=0;
Py=Y0+t*0.5;
theta1(i)=atan2(Py,Px)-atan2(d2,sqrt(Px+Py-(d2)^2)); %#ok<*SAGROW>

S1=sin(theta1(i));C1=cos(theta1(i));
theta2(i)=atan2((Px*C1+Py*S1),(Pz));
C2=cos(theta2(i));S2=sin(theta2(i));

theta3(i)=S2*(C1*Px+S1*Py)+C2*Pz;

theta4(i)=atan2((Ax*(-S1)+C2*Ay),C2*(C1*Ax+S1*Ay)-S2*Az);
S4=sin(theta4(i));C4=cos(theta4(i));

theta5(i)=atan2((C4*(C2*(C1*Ax+S1*Ay)-S2*Az)+S4*(C1*Ay-S1*Ax)),(S2*(C1*Ax+S1*Ay)+C2*Az));
S5=sin(theta5(i));C5=cos(theta5(i));

theta6(i)=atan2(((-C5*(C4*(C2*(C1*Ox+S1*Oy)-S2*Oy)+S4*(-S1*Ox+C1*Oy))+S5*(S2*(C1*Ox+S1*Oy))+C2*Oz)),(-S4*(C2*(C1*Ox+S1*Oy))+C4*(-S1*Ox+C1*Oy)));
end
dlmwrite('A1.txt',theta1);
dlmwrite('A2.txt',theta2);
dlmwrite('A3.txt',theta3);
dlmwrite('A4.txt',theta4);
dlmwrite('A5.txt',theta5);
dlmwrite('A6.txt',theta6);

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2012-4-11 20:37:02 | 显示全部楼层 来自 广西桂林
h6star 发表于 2012-4-11 19:07
帮你修改了一下,不知道能满足你要求不
d2=85;X0=85;Y0=0;Z0=149.9999879082;  %常量定义
%  syms Px Py  ...

非常感谢!基本上是这样子了,我还想问下对于
%  syms Px Py Pz
这里为什么可以不用定义?羞愧……
除此之外,若是在另外的时间段t=i/5(i>5)所求得的A1~A6还是添加到原来的矩阵中,又不能覆盖原来的是否可以用dlmwtite('An.txt','An','-append')这个命令?
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-7-5 10:55 , Processed in 0.067016 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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