Rnavy 发表于 2012-4-8 09:54:31

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

求助各位,我在matlab进行script的M文件编程求一些角度值,需要保存成txt格式的文件,但不成功!求解答

h6star 发表于 2012-4-8 19:46:26

直接把后缀改成txt,应该就行了吧

Rnavy 发表于 2012-4-8 22:43:41

本帖最后由 Rnavy 于 2012-4-8 22:44 编辑

h6star 发表于 2012-4-8 19:46 static/image/common/back.gif
直接把后缀改成txt,应该就行了吧
哦,我没说清楚。是在M文件中编程求一系列的角度值,之后想把求得角度值保存在一个txt文件中,不知道是否可行?我不懂如何进行实现。有人说可以用save(‘A1.txt’,A1),其中A1.txt是保存的文件名,A1是所求变量名,这样可行么?急求答案!查看了好多资料都找不到

cherryjjss 发表于 2012-4-8 22:51:26

fid=fopen('path\A1.txt','wt');
fprintf(fid,A1);

h6star 发表于 2012-4-9 21:25:40

那用dlmwrite就行了

Rnavy 发表于 2012-4-10 10:39:32

本帖最后由 Rnavy 于 2012-4-10 10:42 编辑

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

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));
fid=fopen('E:\ADAMS0\navy7\A1.txt','w');
fprintf(fid,'%6.2f%6.2f\n',A1);
fclose(fid);
%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

h6star 发表于 2012-4-10 16:18:21

你先写个矩阵储存这些数据,如A=;
然后再用dlmwrite保存就行了

Rnavy 发表于 2012-4-10 16:49:05

h6star 发表于 2012-4-10 16:18 static/image/common/back.gif
你先写个矩阵储存这些数据,如A=;
然后再用dlmwrite保存就行了 ...

嗯~~我想A1到A6都是单独的矩阵

h6star 发表于 2012-4-10 16:53:28

你这个算出来,A1就仅仅是一个数啊

Rnavy 发表于 2012-4-10 16:54:00

cherryjjss 发表于 2012-4-8 22:51 static/image/common/back.gif
fid=fopen('path\A1.txt','wt');
fprintf(fid,A1);

请问能否存储成矩阵形式?

h6star 发表于 2012-4-10 17:00:09

实在不懂你的意思,如果你的A是矩阵,存出来的就是矩阵

cherryjjss 发表于 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);



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

Rnavy 发表于 2012-4-11 16:07:30

本帖最后由 Rnavy 于 2012-4-11 16:11 编辑

cherryjjss 发表于 2012-4-10 23:37 static/image/common/back.gif
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 assignmentA(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));
编程红色部分都会出现这样的问题。

Rnavy 发表于 2012-4-11 16:13:35

h6star 发表于 2012-4-10 17:00 static/image/common/back.gif
实在不懂你的意思,如果你的A是矩阵,存出来的就是矩阵

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

h6star 发表于 2012-4-11 19:04:01

Rnavy 发表于 2012-4-11 16:13 static/image/common/back.gif
可能我的表达有误,是这样子的。我是想在时间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
那这样,不知道是否满足你要求了

h6star 发表于 2012-4-11 19:07:52

Rnavy 发表于 2012-4-11 16:13 static/image/common/back.gif
可能我的表达有误,是这样子的。我是想在时间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);

Rnavy 发表于 2012-4-11 20:37:02

h6star 发表于 2012-4-11 19:07 static/image/common/back.gif
帮你修改了一下,不知道能满足你要求不
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')这个命令?
页: [1]
查看完整版本: Matlab 脚本形式的M文件编程如何保存TXT格式的数据