ある条件をクリアするまで、演算を繰り返すにはどうすればよいでしょうか。
Afficher commentaires plus anciens
以下のプログラミングにおいて、条件をクリアするまで演算を繰り返すようにするには、どのようにすればよいのでしょうか。
変数Nを固定し、Qを15~で小数第三位で増分していき(15,15.001,15.002…)、Aがもっとも0に近似した段階のQを求めるという形にしたいのです。(方程式でQをダイレクトに求める方法(A=0の)では、式が複雑すぎて、途中でフリーズしてしまいます。)
以下のプログラミングでは、15~16でQを増分し、算出されたAのなかからもっとも0に近いものを手作業で見つけ、その時のQを採用するというやり方になり、非常に困っております。
どうぞよろしくお願い致します。
syms N Q;
N=2*pi^2;
index = 0:0.001:1;
m = length(index);
A = sym(zeros(m,1));
n = 0;
for i = 0:0.001:1;
n = n+1;
Q=15+i;
Z1=(N+2^0.5*Q/2)^0.5;
Z2=(-(-N+2^0.5*Q/2))^0.5;
Z3=(N-2^0.5*Q/2)^0.5;
Z4=(-(-N-2^0.5*Q/2))^0.5;
ah1=(Z1*sinh(Z1)-Z1^2*cosh(Z1))/(2*cosh(Z1)-2-Z1*sinh(Z1));
bh1=(Z1^2-Z1*sinh(Z1))/(2*cosh(Z1)-2-Z1*sinh(Z1));
a2=(Z2*sin(Z2)-Z2^2*cos(Z2))/(2-2*cos(Z2)-Z2*sin(Z2));
b2=(Z2^2-Z2*sin(Z2))/(2-2*cos(Z2)-Z2*sin(Z2));
ah3=(Z3*sinh(Z3)-Z3^2*cosh(Z3))/(2*cosh(Z3)-2-Z3*sinh(Z3));
bh3=(Z3^2-Z3*sinh(Z3))/(2*cosh(Z3)-2-Z3*sinh(Z3));
a4=(Z4*sin(Z4)-Z4^2*cos(Z4))/(2-2*cos(Z4)-Z4*sin(Z4));
b4=(Z4^2-Z4*sin(Z4))/(2-2*cos(Z4)-Z4*sin(Z4));
K1=2*(2+3/2)+(3/4+3*(ah1+a2+ah3+a4)/4);
K2=2*(2+3/2)+(3/4+3*(ah1+a2+ah3+a4)/4);
K3=8+3/2+(ah1+a2+ah3+a4)/2;
K4=-(ah1-a2+ah3-a4)/4;
K5=(ah1-a2-ah3+a4)/(2*2^0.5);
K6=3*(bh1-b2+bh3-b4)/4;
K7=-3/4-(bh1+b2+bh3+b4)/4;
K8=(bh1+b2-bh3-b4)/(2*2^0.5);
K9=(ah1+a2-ah3-a4)/(2*2^0.5);
K10=(bh1-b2-bh3+b4)/(2*2^0.5);
K11=(bh1-b2+bh3-b4)/2;
K=[K1 K4 K5 K6 K7 K8;K4 K2 K9 K7 K6 K10;K5 K9 K3 K8 K10 K11;...
K6 K7 K8 K1 K4 K5;K7 K6 K10 K4 K2 K9;K8 K10 K11 K5 K9 K3];
A(n) =det(K);
end
Réponse acceptée
Plus de réponses (0)
Catégories
En savoir plus sur 最適化 dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!