24小时热门版块排行榜    

查看: 2816  |  回复: 14

cw277

木虫 (正式写手)

[求助] 求帮忙啊~ matlab一多项式结果太长,怎么写到txt里?

当i=600时,结果可以输出。
但当i>=700  这个char就卡住了,可能是没办法转换了。。
求高手指教啊。。  我应该怎么办??

程序如下

clc
clear
tic;

S(1)=sym('k1');
S(2)=sym('k2');
S(3)=sym('k3');
S(4)=sym('k4');
S(5)=sym('k5');
S(6)=sym('k6');
S(7)=sym('k7');
S(8)=sym('k8');
S(9)=sym('k9');
S(10)=sym('k10');
S(11)=sym('k11');
S(12)=sym('k12');
S(13)=sym('k13');
S(14)=sym('k14');
S(15)=sym('k15');
S(16)=sym('k16');
S(17)=sym('k17');
S(18)=sym('k18');
S(19)=sym('k19');
S(20)=sym('k20');
S(21)=sym('k21');
S(22)=sym('k22');
S(23)=sym('k23');
S(24)=sym('k24');
S(25)=sym('k25');
S(26)=sym('k26');
S(27)=sym('k27');
S(28)=sym('k28');
S(29)=sym('k29');
S(30)=sym('k30');
S(31)=sym('k31');
S(32)=sym('k32');
S(33)=sym('k33');
S(34)=sym('k34');
S(35)=sym('k35');
S(36)=sym('k36');
S(37)=sym('k37');
S(38)=sym('k38');
S(39)=sym('k39');
S(40)=sym('k40');
S(41)=sym('k41');
S(42)=sym('k42');
S(43)=sym('k43');
S(44)=sym('k44');
S(45)=sym('k45');
S(46)=sym('k46');
S(47)=sym('k47');
S(48)=sym('k48');
S(49)=sym('k49');
S(50)=sym('k50');
S(51)=sym('k51');
S(52)=sym('k52');
S(53)=sym('k53');
S(54)=sym('k54');
S(55)=sym('k55');
S(56)=sym('k56');
S(57)=sym('k57');
S(58)=sym('k58');
S(59)=sym('k59');
S(60)=sym('k60');
S(61)=sym('k61');
S(62)=sym('k62');
S(63)=sym('k63');
S(64)=sym('k64');
S(65)=sym('k65');
S(66)=sym('k66');
S(67)=sym('k67');
S(68)=sym('k68');
S(69)=sym('k69');
S(70)=sym('k70');
S(71)=sym('k71');
S(72)=sym('k72');
S(73)=sym('k73');
S(74)=sym('k74');
S(75)=sym('k75');
S(76)=sym('k76');
S(77)=sym('k77');
S(78)=sym('k78');
S(79)=sym('k79');
S(80)=sym('k80');
S(81)=sym('0');
S(82)=sym('0');
S(83)=sym('0');
S(84)=sym('0');
S(85)=sym('0');
S(86)=sym('0');
S(87)=sym('0');
S(88)=sym('0');
S(89)=sym('0');
S(90)=sym('0');
S(91)=sym('0');
S(92)=sym('0');
S(93)=sym('0');
S(94)=sym('IV1');
S(95)=sym('IV2');
S(96)=sym('IV3');
S(97)=sym('IV4');
S(98)=sym('IV5');
S(99)=sym('IV6');
S(100)=sym('IV7');
S(101)=sym('IV8');
S(102)=sym('IV9');
S(103)=sym('IV10');
S(104)=sym('IV11');
S(105)=sym('IV12');
S(106)=sym('IV13');
S(107)=sym('IV14');
S(108)=sym('IV15');
S(109)=sym('IV16');
S(110)=sym('IV17');
S(111)=sym('IV18');
S(112)=sym('IV19');
S(113)=sym('IV20');
S(114)=sym('IV21');
S(115)=sym('IV22');
S(116)=sym('IV23');
S(117)=sym('IV24');
S(118)=sym('IV25');
S(119)=sym('IV26');
S(120)=sym('IV27');
S(121)=sym('IV28');
S(122)=sym('IV29');
S(123)=sym('IV30');
S(124)=sym('IV31');
S(125)=sym('IV32');
S(126)=sym('IV33');
S(127)=sym('IV34');
S(128)=sym('IV35');
S(129)=sym('IV36');
S(130)=sym('IV37');
S(131)=sym('IV38');
S(132)=sym('IV39');
S(133)=sym('IV40');
S(134)=sym('IV41');
S(135)=sym('IV42');
S(136)=sym('IV43');
S(137)=sym('IV44');
S(138)=sym('IV45');
S(139)=sym('IV46');
S(140)=sym('IV47');
S(141)=sym('IV48');
S(142)=sym('IV49');
S(143)=sym('IV50');
S(144)=sym('IV51');
S(145)=sym('IV52');
S(146)=sym('IV53');
S(147)=sym('IV54');
S(148)=sym('IV55');
S(149)=sym('IV56');
S(150)=sym('IV57');
S(151)=sym('IV58');
S(152)=sym('IV59');
S(153)=sym('IV60');
S(154)=sym('IV61');
S(155)=sym('IV62');
S(156)=sym('IV63');
S(157)=sym('IV64');
S(158)=sym('IV65');
S(159)=sym('IV66');
S(160)=sym('IV67');
S(161)=sym('IV68');
S(162)=sym('IV69');
S(163)=sym('IV70');
S(164)=sym('IV71');
S(165)=sym('IV72');
S(166)=sym('IV73');
S(167)=sym('IV74');
S(168)=sym('IV75');
S(169)=sym('IV76');
S(170)=sym('IV77');
S(171)=sym('IV78');
S(172)=sym('IV79');
S(173)=sym('IV80');
S(174)=sym('0');
S(175)=sym('0');
S(176)=sym('0');
S(177)=sym('0');
S(178)=sym('0');
S(179)=sym('0');
S(180)=sym('0');
S(181)=sym('0');
S(182)=sym('0');
S(183)=sym('0');
S(184)=sym('0');
S(185)=sym('0');
S(186)=sym('0');
S(187)=sym('0');
S(188)=sym('0');
S(189)=sym('0');
S(190)=sym('0');
S(191)=sym('0');
S(192)=sym('0');
S(193)=sym('0');
S(194)=sym('0');
S(195)=sym('0');
S(196)=sym('0');
S(197)=sym('0');
S(198)=sym('0');
S(199)=sym('0');
S(200)=sym('0');
S(201)=sym('0');
S(202)=sym('0');
S(203)=sym('0');
S(204)=sym('0');
S(205)=sym('0');
S(206)=sym('0');
S(207)=sym('0');
S(208)=sym('0');
S(209)=sym('0');
S(210)=sym('0');
S(211)=sym('0');
S(212)=sym('0');
S(213)=sym('0');
S(214)=sym('0');
S(215)=sym('0');
S(216)=sym('0');
S(217)=sym('0');
S(218)=sym('0');
S(219)=sym('0');
S(220)=sym('0');
S(221)=sym('0');
S(222)=sym('0');
S(223)=sym('0');
S(224)=sym('0');
S(225)=sym('0');
S(226)=sym('0');
S(227)=sym('0');
S(228)=sym('0');
S(229)=sym('0');
S(230)=sym('0');
S(231)=sym('0');
S(232)=sym('0');
S(233)=sym('0');
S(234)=sym('0');
S(235)=sym('0');
S(236)=sym('0');
S(237)=sym('0');
S(238)=sym('0');
S(239)=sym('0');
S(240)=sym('0');
S(241)=sym('0');
S(242)=sym('0');
S(243)=sym('0');
S(244)=sym('0');
S(245)=sym('0');
S(246)=sym('0');
S(247)=sym('0');
S(248)=sym('0');
S(249)=sym('0');
S(250)=sym('0');
S(251)=sym('0');
S(252)=sym('0');
S(253)=sym('0');
S(254)=sym('0');
S(255)=sym('0');
S(256)=sym('0');
S(257)=sym('0');
S(258)=sym('0');
S(259)=sym('0');
S(260)=sym('0');
S(261)=sym('0');
S(262)=sym('0');
S(263)=sym('0');
S(264)=sym('0');
S(265)=sym('0');
S(266)=sym('0');
S(267)=sym('0');
S(268)=sym('0');
S(269)=sym('0');
S(270)=sym('0');
S(271)=sym('0');
S(272)=sym('0');
S(273)=sym('0');
S(274)=sym('0');
S(275)=sym('0');
S(276)=sym('0');
S(277)=sym('0');
S(278)=sym('0');
S(279)=sym('0');
S(280)=sym('0');
S(281)=sym('0');
S(282)=sym('0');
S(283)=sym('0');
S(284)=sym('0');
S(285)=sym('0');
S(286)=sym('1');
S(287)=sym('1');
S(288)=sym('1');

for i=1:700
t1(i)=S(66)+S(91)*S(92)+S(93)+S(171);
t2(i)=S(162)+S(175)*S(176)+S(177)+S(264);
t3(i)=S(243)+S(286)*S(287)+S(288)+S(69);
S=[t3(i),S(1:92),S(94:288)];  
S=[S(1:93),t1(i),S(94:176),S(178:288)];  
S=[S(1:177),t2(i),S(178:287)];  
i
end

s=char(S(1));
fid=fopen('c:\char2.txt','w');
fprintf(fid,'%s',s);
toc;
clear S;
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

感谢生活让我慢慢学会控制自己的情绪,学会包容与忍耐,学会不再去期待
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

wangyuewu08

木虫 (著名写手)

【答案】应助回帖

★ ★
cw277(金币+8): 牛人写出来的程序就是不一样啊~~ 2011-12-08 23:16:45
jjdg(金币+2): 感谢参与 2011-12-09 00:53:08
cw277(金币+2): 希望前辈能不改我程序初始化部分(即end之前),能跑完1152步得到结果。 当然end后面的程序可以改。 辛苦了~~ 2011-12-12 22:49:09
给楼主写了个拆分字符串的程序,在ii = 500, 600, 700的情况下调试成功,可以自行设置单个文件的大小。楼主要做的就是耐心等待了。
本来以为系统会逐个刷新出新建的文件,但那些文件几乎是同时出现的。
看到楼主在循环体中加入了i用来显示程序的运行,我在输出的循环体中也加入了显示语句,这样就可以知道程序是否在执行,它们貌似也是一起出来。向楼主学习。
CODE:
%   修改时间:2011-12-08
%   修改内容:
%   1.  以选定的字符数为一个文件进行输出。

clc
clear
tic;

S = zeros(1, 288);
S = sym(S);
for ii = 1 : 80
    S(ii) = sym(['k', num2str(ii)]);
end
%   S(81:93) = sym('0');
for ii = 94 : 173
    S(ii) = sym(['IV', num2str(ii - 93)]);
end
%   S(174 : 285) = sym('0');
S( 286 : 288 ) = sym('1');

for ii = 1:1152
t1 = S(66) + S(91) * S(92) + S(93) + S(171);
t2 = S(162) + S(175) * S(176) + S(177) + S(264);
t3 = S(243) + S(286) * S(287) + S(288) + S(69);
S = [t3, S(1:92), S(94:288)];
S = [S(1:93), t1, S(94:176), S(178:288)];
S = [S(1:177), t2, S(178:287)];
disp(ii)
end

s = char(S(1));
%   在文本文档中每个字符占1B,1M可以储存以下数量的字符,
%   通过unit可以自行设置单个文件的大小
unit = 1024 * 1024;
len = size(s, 2);
%   通过向正无穷取整,可以包含整除和非整除的情况。
fileNumber = ceil(len / unit);
%   输出前面的n-1个文件,这些文件肯定是填满的。
%   第一个文件名为char1.txt
%   第二个文件名为char2.txt
%   ……
jj = 1;
for ii = 1 : fileNumber - 1
    fid = fopen(['E:\char', num2str(ii), '.txt'], 'w');
    fprintf(fid,'%s',s(jj : jj + unit - 1));
    jj = jj + unit;
    fclose(fid);
    fprintf(['输出第', num2str(ii), '个文件\n']);
end
%   输出最后一个文件,有可能没有填满,所以要用到end
fid = fopen(['E:\char', num2str(fileNumber), '.txt'], 'w');
fprintf(fid,'%s',s(jj : end));
fclose(fid);
fprintf(['输出第', num2str(fileNumber), '(最后一个)个文件\n']);

toc;

往事并不如烟
14楼2011-12-08 18:11:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

lshok

铁杆木虫 (著名写手)


jjdg(金币+1): 感谢参与 2011-12-06 02:00:03
不太明白,不过你代码最后没有关闭文件
2楼2011-12-05 22:44:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangyuewu08

木虫 (著名写手)

【答案】应助回帖


cw277(金币+1): 这个可以考虑。。 其实主要原因是在 s=char(S(1)); 这一句。 S(1)的表达式太多了,以致于时间花很久 2011-12-06 22:57:04
jjdg(金币+1): 感谢参与 2011-12-07 01:54:13
在PC上,二进制文件和格式化文件的打开是有区别的,打开文件的语句中需要指定文件为文本格式
fid=fopen('c:\char2.txt','wt');
楼主试试,看错误是不是出在这里。
给楼主提个建议,如果程序的其它地方不需要用t1,t2,t3,那么在循环中将t1(i),t2(i),t3(i)改为t1,t2,t3,这样可以节省大量的空间和时间。
如果要用到,那么在循环之前预定义一下比较好。
往事并不如烟
3楼2011-12-06 12:20:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangyuewu08

木虫 (著名写手)

【答案】应助回帖


cw277(金币+1): 其实主要原因是在 s=char(S(1)); 这一句。 S(1)的表达式太多了,以致于时间花很久 2011-12-06 22:57:43
jjdg(金币+1): 感谢参与 2011-12-07 01:54:06
如果是因为太长而无法写入的话,系统肯定会有提示的
往事并不如烟
4楼2011-12-06 19:09:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
5楼2011-12-07 00:08:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

alien1583

铜虫 (小有名气)

【答案】应助回帖

帮助顶一下,等待高手给你解答
6楼2011-12-07 10:00:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hxyue

至尊木虫 (职业作家)

【答案】应助回帖

★ ★
cw277(金币+3): 非常对。 所以这才是我求助的关键所在, 怎么去解决这个长字符串的问题? 2011-12-08 09:27:52
余泽成(金币+2): 谢谢参与应助!欢迎常来程序语言版! 2011-12-08 14:10:21
i =
   650
Elapsed time is 979.490715 seconds.
并且随着ii的增大程序用时急剧增加,可能我机子太烂了,呵呵
同时s的长度也在迅速增大

估计和txt无关,而是因为超过了matlab字符串长度的上限
你自己试试,z=zeros(1,2^(26))正常,而z=zeros(1,2^(26))就 Out of memory了
这世界只有回不去的,没有过不去的
7楼2011-12-07 15:56:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hxyue

至尊木虫 (职业作家)

【答案】应助回帖

cw277(金币+1): 具体怎么分呢,这个要请教高手了? 2011-12-08 09:28:43
分多个字符串处理吧,同时也要考虑不能超出txt文件的上限
这世界只有回不去的,没有过不去的
8楼2011-12-07 15:58:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangyuewu08

木虫 (著名写手)

【答案】应助回帖

★ ★
cw277(金币+8): 谢谢高手指点~~ 多给点 2011-12-07 23:19:58
cw277: 回帖置顶 2011-12-07 23:20:05
xzhdty(金币+2): 欢迎常来程序语言看看 2011-12-08 16:22:09
在我的电脑上运行出结果了,楼主程序的结果存放在附件char2.txt中。
我修改之后,运行的结果存放在char2_version_2.txt中。
修改后的程序是program_version_2.txt。

针对matlab的提示,我对楼主的程序进行了修改,并对运行时间进行了比较。因为运行时间比较长,只比较了一次,所以时间比较的结果可能不准确。

我主要简化了S,t1,t2,t3的初始化(楼主对S的初始化太费时费力,还容易出错),其它部分与楼主源程序一样,除了输出路径改为E(我不太习惯在C盘放文件)。
CODE:
%   修改之前的运行时间
%   Elapsed time is 427.892359 seconds.
%   修改之后的运行时间
%   Elapsed time is 333.992927 seconds.
clc
clear
tic;

S = zeros(1, 288);
S = sym(S);
for ii = 1 : 80
    S(ii) = sym(['k', num2str(ii)]);
end
%   S(81:93) = sym('0');
for ii = 94 : 173
    S(ii) = sym(['IV', num2str(ii - 93)]);
end
%   S(174 : 285) = sym('0');
S( 286 : 288 ) = sym('1');

t1 = zeros( 700, 1 );
t1 = sym(t1);
t2 = t1;
t3 = t1;

for i=1:700
t1(i)=S(66)+S(91)*S(92)+S(93)+S(171);
t2(i)=S(162)+S(175)*S(176)+S(177)+S(264);
t3(i)=S(243)+S(286)*S(287)+S(288)+S(69);
S=[t3(i),S(1:92),S(94:288)];  
S=[S(1:93),t1(i),S(94:176),S(178:288)];  
S=[S(1:177),t2(i),S(178:287)];  
i
end

s=char(S(1));
fid=fopen('E:\char2.txt','w');
fprintf(fid,'%s',s);
toc;
clear S;

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : program_version_2.txt
  • 2011-12-07 19:45:46, 796 bytes
  • 附件 2 : char2.txt
  • 2011-12-07 19:46:05, 3.27 M
  • 附件 3 : char2_version_2.txt
  • 2011-12-07 19:46:27, 3.27 M
往事并不如烟
9楼2011-12-07 19:46:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangyuewu08

木虫 (著名写手)

★ ★ ★
余泽成(金币+3): 谢谢参与应助!欢迎来本版担任专家 2011-12-08 14:11:57
这程序对电脑的要求太高了,我中间也死过一次机,建议楼主换高级的电脑
往事并不如烟
10楼2011-12-07 19:49:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 cw277 的主题更新
信息提示
请填处理意见