kevinhcj 发表于 2006-3-14 15:03

符号积分的一个奇怪的问题!

我有如下循环<BR>for i = 1:n<BR>   C = C+element_C(N);<BR>end<BR><BR>其中 N为符号Xi的6×6的矩阵,element_C(N)主要就是对N在0~1之间积分,其余运算不涉及矩阵size的变化。但是改循环只能循环30~40次,而且各次执行其次数还不一致,出现的问题说计算失败那一次reshape时矩阵单元数目不一致!<BR>注;<BR>maple在做完符号积分后对结果有一次reshape(因为做之前将矩阵变成列向量,其后又还原为矩阵),因此,这里的问题相当于6×6--&gt; 36×1-?-&gt; 6×6<BR>但是我在int.m&maple.m里面读出被积函数的size一直没有变化<BR><BR>我在自己的计算中一致不涉及矩阵size的变化,难道这种计算又次数的限制(我用的是D版)<BR><BR>程序debuge到此,也有2天无法进行了,高手们给点建议。<BR><BR>thanx   in advance!!<BR>   

suffer 发表于 2006-3-14 15:18

回复:(kevinhcj)符号积分的一个奇怪的问题!

最好把详细的代码贴出来

kevinhcj 发表于 2006-3-14 18:36

回复:(suffer)回复:(kevinhcj)符号积分的一个奇...

<P>ok!<BR><BR>%subrution<BR>function C_b1 = element_Cb2(z0,z1,t,bb)<BR>syms Xi <BR>psi = bb;</P>
<P>N1 = 1-10*Xi^3+15*Xi^4-6*Xi^5;<BR>N2 = 10*Xi^3-15*Xi^4+6*Xi^5;<BR>N3 = Xi-6*Xi^3+8*Xi^4-3*Xi^5;<BR>N4 = -4*Xi^3+7*Xi^4-3*Xi^5;<BR>N5 = 1/2*(Xi^2-3*Xi^3+3*Xi^4-Xi^5);<BR>N6 = 1/2*(1*Xi^3-2*Xi^4+Xi^5);</P>
<P>N= ;</P>
<P>NN1 = diff(N,Xi,1);<BR>cc = (psi'*(NN1'*NN1)*psi)*(N'*N);<BR>C_b1 = int(cc,Xi,0,1);<BR>C_b1 = C_b1;<BR>C_b1 = double(C_b1);</P>
<P>return</P>
<P>% main<BR>clear all; clc;<BR>format long;</P>
<P>n = 10<BR>m = 100;<BR>zz = ';<BR>delta_t = 0.1;</P>
<P>C_b1_u = zeros(3*n+3);<BR>psi_q_try = ones(3*(n+1),1);</P>
<P>for j = 1:m<BR>    <BR>    t = delta_t*j;<BR>       <BR>      for k = 1:n<BR>            bb = psi_q_try(3*k-2:3*(k+1));<BR>            C_b1 = element_Cb1(zz(k),zz(k+1),t,bb);<BR>            C_b1_u(3*k-2:3*(k+1),3*k-2:3*(k+1)) = C_b1_u(3*k-2:3*(k+1),3*k-2:3*(k+1)) + C_b1;<BR>      end <BR>end<BR></P>

happy 发表于 2006-3-15 09:26

回复:(kevinhcj)回复:(suffer)回复:(kevinhcj...

<DIV class=quote><B>以下是引用<I>kevinhcj</I>在2006-3-14 18:36:29的发言:</B><BR>
<P>ok!<BR><BR>%subrution<BR>function C_b1 = element_Cb2(z0,z1,t,bb)<BR>syms Xi <BR>psi = bb;</P>
<P>N1 = 1-10*Xi^3+15*Xi^4-6*Xi^5;<BR>N2 = 10*Xi^3-15*Xi^4+6*Xi^5;<BR>N3 = Xi-6*Xi^3+8*Xi^4-3*Xi^5;<BR>N4 = -4*Xi^3+7*Xi^4-3*Xi^5;<BR>N5 = 1/2*(Xi^2-3*Xi^3+3*Xi^4-Xi^5);<BR>N6 = 1/2*(1*Xi^3-2*Xi^4+Xi^5);</P>
<P>N= ;</P>
<P>NN1 = diff(N,Xi,1);<BR>cc = (psi'*(NN1'*NN1)*psi)*(N'*N);<BR>C_b1 = int(cc,Xi,0,1);<BR>C_b1 = C_b1;<BR>C_b1 = double(C_b1);</P>
<P>return</P>
<P>% main<BR>clear all; clc;<BR>format long;</P>
<P>n = 10<BR>m = 100;<BR>zz = ';<BR>delta_t = 0.1;</P>
<P>C_b1_u = zeros(3*n+3);<BR>psi_q_try = ones(3*(n+1),1);</P>
<P>for j = 1:m<BR>    <BR>    t = delta_t*j;<BR>       <BR>      for k = 1:n<BR>            bb = psi_q_try(3*k-2:3*(k+1));<BR>         <FONT color=#ff0000> C_b1 = element_Cb1(zz(k),zz(k+1),t,bb);<BR></FONT>            C_b1_u(3*k-2:3*(k+1),3*k-2:3*(k+1)) = C_b1_u(3*k-2:3*(k+1),3*k-2:3*(k+1)) + C_b1;<BR>      end <BR>end<BR></P></DIV>
<P><FONT color=#ff0000>红色标记的是不是应该是<BR>C_b1 = element_Cb2(zz(k),zz(k+1),t,bb);<BR></FONT><BR>如果是的话,应该是你子程序中用int找不到积分<BR></P>

kevinhcj 发表于 2006-3-15 10:46

thank u!<BR>那里是笔误,对不起!我的子程序就是<FONT color=#ff0000>C_b1 = element_Cb1(zz(k),zz(k+1),t,bb);<BR></FONT>这个问题的奇怪之处在于,输入参数的size一直没有变化,退一万步讲,如果参数size变化了,那就应该一个外循环也不能执行啊。而这个程序可以执行很多次循环而后出错。更有甚者,不改变任何设置,每一次运行的总循环次数n×(j-1)+k不一致。所以我觉得是不是D版或者本身有循环数限制?<BR><BR>thanx again!

happy 发表于 2006-3-16 10:18

回复:(kevinhcj)thank u!那里是笔误,对不起!我的...

<DIV class=quote><B>以下是引用<I>kevinhcj</I>在2006-3-15 10:46:00的发言:</B><BR>thank u!<BR>那里是笔误,对不起!我的子程序就是<FONT color=#ff0000>C_b1 = element_Cb1(zz(k),zz(k+1),t,bb);<BR></FONT>这个问题的奇怪之处在于,输入参数的size一直没有变化,退一万步讲,如果参数size变化了,那就应该一个外循环也不能执行啊。而这个程序可以执行很多次循环而后出错。更有甚者,不改变任何设置,每一次运行的总循环次数n×(j-1)+k不一致。所以我觉得是不是D版或者本身有循环数限制?<BR><BR>thanx again!</DIV>
<br>你说的现象是很奇怪,不过我运行没有你说的总循环次数不一致的问题

kevinhcj 发表于 2006-3-16 13:01

呵呵,这个问题另外一个高手也没有解决,不会是MATLAB的bug把?不过看来也不太像。

happy 发表于 2006-3-17 07:46

回复:(kevinhcj)呵呵,这个问题另外一个高手也没有...

<DIV class=quote><B>以下是引用<I>kevinhcj</I>在2006-3-16 13:01:52的发言:</B><BR>呵呵,这个问题另外一个高手也没有解决,不会是MATLAB的bug把?不过看来也不太像。</DIV>
<P>可以去mathwork问问看,那里专业,呵呵</P>

kevinhcj 发表于 2006-3-18 08:59

<P>it's a good idea!</P>
页: [1]
查看完整版本: 符号积分的一个奇怪的问题!