xiaomiao416 发表于 2009-4-20 11:12

求助 程序有问题

function w=kx2(x)
global D1 D2 a b k1 k2 tao1 tao2 lamda p q h g1 A B G G1 xs H;
w=H/(D2*(G1^2)+2*lamda*sqrt(D1*D2)*G1/B+D1);



global D1 D2 a b k1 k2 tao1 tao2 lamda p q h g1 A B G G1 xs H;
D1=0.1;
D2=0.2;                                                                           
a=5.6;
b=0.4;
k1=10;
k2=1.0;
tao1=0.5;
tao2=0.25;
lamda=0.4;
dx=0.16;
fid=fopen('99.dat','wt')
for ii=1:25   
   x=0.01+dx*ii;
   xx(ii)=x;
   p=k2-(a+b)^2/(3*k1^2);
   q=-2*(a+b)^3/(27*k1^3)+k2*(a+b)/(3*k1)-b;
   A=1-tao1.*(2*a*k1.*x./((x.^2+k1).^2)-k2)+tao1*2*k1*(a.*x.^2./(x.^2+k1)-k2.*x+b)./(x.*(x.^2+k1));
   h=a.*(x.^2)./(x.^2+k1)-k2.*x+b;
   g1=x.^2./(x.^2+k1);
   xs=(-q/2+sqrt((q/2)^2+(p/3)^3))^(1/3)+(-q/2-sqrt((q/2)^2+(p/3)^3))^(1/3);
   B=1-tao2*(2*a*k1*xs/((k1+xs)^2)-k2);
   H=h./A;
   G1=g1./A;
   G=sqrt(D2*(G1^2)+2*lamda*sqrt(D1*D2)*G1/B+D1);
   m=quad(@kx2,0,x);
   yy(ii)=exp(m-log(abs(G)));
end
sump=sum(yy);
for jj=1:25
    yy(jj)=yy(jj)/sump;
    Q=yy(jj);
    fprintf(fid,'%f\n',Q/dx);
end
plot(xx,yy/dx);
fclose(fid);
hold on;


出错提示:
??? Attempted to access y(7); index out of bounds because numel(y)=1.
Error in ==> quad at 71
if ~isfinite(y(7))
Error in ==> xm2 at 27
   m=quad(@kx2,0,x);


新手上路请多指教,谢谢!

lqbtbs 发表于 2009-4-20 12:01

回复 楼主 xiaomiao416 的帖子

变量的值没有完全给齐
请把组件也给标示出来~
有问题的地方也标出来
错误指的是第71行
咱家可看不出来哪行是71阿
尽量把问题整理一下,多问问针对性的问题
毕竟不是每个人都有时间把整支程序看一便的
你可以把程序运行到一部份,把有问题的部份需要的变量列出来
这样你对问题会比较了解点,也可以节省大家的回复时间

xiaomiao416 发表于 2009-4-20 12:10

回复 楼主 xiaomiao416 的帖子

好的
谢谢lqbtbs
我再看看

ChaChing 发表于 2009-4-20 21:32

回复 沙发 lqbtbs 的帖子

LZ的意见很对, 发问者若想得到别人的关注, 的确也需要自己多注意些!
还有错误指的不在第71行而是在第27行!:@)

lqbtbs 发表于 2009-4-21 14:29

回复 地板 ChaChing 的帖子

哈哈
俺還有的學
他寫Error in ==> quad at 71
就以為錯在71~哈

ChaChing 发表于 2009-4-21 21:15

回复 楼主 xiaomiao416 的帖子

不太清楚LZ的问题, 真的没头没尾又太杂乱! 凭感觉请LZ自己检查
1.kx2函数里头根本无x, 对吗
2.B会出现复数合理吗
页: [1]
查看完整版本: 求助 程序有问题