| 查看: 1479 | 回复: 3 | ||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | ||
[求助]
怎样在fsolve中对初值进行循环并缩短运行时间?
|
||
|
本人在解四个非线性方程,每一个非线性方程需要给定对应初值才能解,本人给初值写了四个循环,分别对应的是t0i,t1i0,t2i0,t3i0。要求是当非线性方程解出的结果满足一定条件时则这组初值可选,问题在于四个for循环计算时间很长,请问大家有何方法可以改进?我用了fsolve解初值,把初值设置成了变量。以下为可运行程序,但是运行时间很长。 % Find the initial condition clc clear tic global t1i C1 C2 a d d1 d2 omega w yi t0i t2i t3i t4i t1i0 t2i0 t3i0 t4i0 j d3 d4 C3 C4 a=20; c=100; d=0.5; w=sqrt(c-d^2); j=0; m=0; n=1; A=zeros(10,n); omega=4.8; T=2*pi/omega; t4i0=t0i+T; d1=(c-omega^2)/((c-omega^2)^2+(2*d*omega)^2); d2=(2*d*omega)/((c-omega^2)^2+(2*d*omega)^2); d3=(-1)/(omega^2+4*d^2); d4=(2*d)/((omega)*(omega^2+4*d^2)); % 以下为循环 for yi=5:0.1:13 for t0i=0 (2*pi/omega)/500) 2*pi/omega)for t1i0=(1/5)*T+t0i:1 1/4)*T+t0ifor t2i0=(2/5)*T+t0i:1 1/2)*T+t0ifor t3i0=(3/5)*T+t0i:1 4/5)*T+t0iC1=-a*(d1*cos(omega*t0i)+d2*sin(omega*t0i)); C2=(1/w)*(yi-a*((d2*d-d1*omega)*sin(omega*t0i)+(d1*d+d2*omega)*cos(omega*t0i))); t1i=fsolve(@(t1i) (C1*cos(w*(t1i-t0i))+C2*sin(w*(t1i-t0i)))*exp(-d*(t1i-t0i))+a*(d1*cos(omega*t1i)+d2*sin(omega*t1i)),t1i0); x2=((C2*w-C1*d)*cos(w*(t1i-t0i))-(C1*w+C2*d)*sin(w*(t1i-t0i)))*exp((-d)*(t1i-t0i))-a*omega*(d1*sin(omega*t1i)-d2*cos(omega*t1i)); C3=(1/(-2*d))*(x2+(a*omega)*(d3*sin(omega*t1i)-d4*cos(omega*t1i))); C4=(1/(2*d))*(x2+2*d*1-(a/omega)*sin(omega*t1i)); t2i=fsolve(@(t2i) C3*exp(-2*d*(t2i-t1i))+C4+a*(d3*cos(omega*t2i)+d4*sin(omega*t2i))+1,t2i0); x4=-2*d*C3*exp(-2*d*(t2i-t1i))-a*omega*(d3*sin(omega*t2i)-d4*cos(omega*t2i)); C1=-a*(d1*cos(omega*t2i)+d2*sin(omega*t2i)); C2=(1/w)*(x4-a*((d2*d-d1*omega)*sin(omega*t2i)+(d1*d+d2*omega)*cos(omega*t2i))); t3i=fsolve(@(t3i) (C1*cos(w*(t3i-t2i))+C2*sin(w*(t3i-t2i)))*exp(-d*(t3i-t2i))+a*(d1*cos(omega*t3i)+d2*sin(omega*t3i)),t3i0); x6=((C2*w-C1*d)*cos(w*(t3i-t2i))-(C1*w+C2*d)*sin(w*(t3i-t2i)))*exp((-d)*(t3i-t2i))-a*omega*(d1*sin(omega*t3i)-d2*cos(omega*t3i)); C3=(1/(-2*d))*(x6+(a*omega)*(d3*sin(omega*t3i)-d4*cos(omega*t3i))); C4=(1/(2*d))*(x6-2*d-(a/omega)*sin(omega*t3i)); t4i=fsolve(@(t4i) C3*exp(-2*d*(t4i-t3i))+C4+a*(d3*cos(omega*t4i)+d4*sin(omega*t4i))-1,t0i+T); x8=-2*d*C3*exp(-2*d*(t4i-t3i))-a*omega*(d3*sin(omega*t4i)-d4*cos(omega*t4i)); %选初值的条件 if abs(t4i-T-t0i)<0.1 && abs(x8-yi)<0.1 && t4i>t3i && t3i>t2i && t2i>t1i && x2<0 && x4<0 && x6>0 && x8>0 figure(1) hold on axis([0 8 0 20]) plot(omega,yi,'o') A(:,n)=[t0i;yi;t1i;x2;t2i;x4;t3i;x6;t4i;x8]; n=n+1; end j=j+1; j end end end end end toc load chirp sound(y,Fs) |
» 猜你喜欢
全日制(定向)博士
已经有5人回复
假如你的研究生提出不合理要求
已经有10人回复
萌生出自己或许不适合搞科研的想法,现在跑or等等看?
已经有4人回复
Materials Today Chemistry审稿周期
已经有4人回复
参与限项
已经有3人回复
实验室接单子
已经有4人回复
对氯苯硼酸纯化
已经有3人回复
求助:我三月中下旬出站,青基依托单位怎么办?
已经有12人回复
所感
已经有4人回复
要不要辞职读博?
已经有7人回复
4楼2018-09-12 08:55:39
2楼2018-09-12 07:49:16
3楼2018-09-12 08:12:40












(2*pi/omega)/500)
回复此楼