遺傳演算法求解方程
A. 如何用matlab遺傳演算法求解方程最優問題
在用ga()遺傳演算法函數時,除了考慮x1、x2的上、下界的限制值,還應考慮增加ymax<200的限回制條件,即
140.6+2.31x1-0.61x2-0.015x1^2+0.005x1x2<200
按此要求答修改,運行可以得到
x 1= 42.7066 ; x 2=30.0015;y=199.9999
B. 遺傳演算法解方程組 matlab
老鐵 你這個太猛了,我確實是懵逼了,我看只有極少人能做出來吧
C. 遺傳演算法解非線性方程組能解准嗎
如果maple數值解求解不出來,可能的情況有二。1、方程組矛盾,檢查方程組列寫是否錯誤,如果正確嘗試用最小二乘法求解。2、數值解由於搜索空間太大,沒法找到,嘗試用啟發式演算法,例如遺傳演算法,類似你寫的這些方程,可以用matlab中的遺傳演算法工具箱,應該也寫成最小二乘的形式。
這樣的問題,我沒有遇到過,fsolve命令已經很強大了,如果方程組正確,fsolve求不出來,我就不知道如何處理了。
希望以上對你有幫助。
D. 目標方程和約束條件有微分方程,應該怎麼用遺傳演算法擬合
用遺傳演算法ga函數是可以擬合帶有目標方程和約束條件且含有微分方程的系數,其擬合原則是誤差最小估計原則。
解決問題的方法:1、建立自定義目標函數;2、建立自定義約束函數;3、建立自定義微分方程函數;4、誤差最小控制函數;5、利用遺傳演算法ga函數求解擬合系數,利用ode45函數求解微分方程;6、建立嵌套函數計算
E. 遺傳演算法求解超越方程,matlab程序,tanx=1/x, x∈[0,60],需要程序代碼,謝謝!
用遺傳演算法求解超越方程可以按下列方法來編寫代碼。
1、求解此問題時,首先可以將方程表內示成y=tanx-1/x的形式,當容y=0時,得到的解即為x。
該方程可以按這樣來定義,func=@(x) tanx-1/x
2、由於該方程在[0,60]間有若干個解,所以可以用循環語句來得。如按遺傳演算法ga()函數求解超越方程,可以按下列命令來求解。
[x, fval] =ga(func,1);
y=func(x) ;
3、當abs(y)<=0.005(誤差)時,顯示x、y值。
按上述方法編程後運行可以得到如下x值。
F. matlab中用遺傳演算法擬合方程
例如:
已知數據隊列 buf=【.】
x取值 1:n n是隊列長度
函數 f(x)=a+b*sin(c*x+d) .
avg 是隊列平均值
a b c d 為參數 a范圍 (2/3,1)*avg
b范圍 (0,1/3)*avg
c的范圍 (0,24*pi)
d (0,2*pi)
1、首先定義目標函數
function y=ga_curfit(x)
global ydata n
t=1:n;
y=0;
for i=1:n
y=y+(ydata(i)-(x(:,1)+x(:,2).*sin(x(:,3).*t(i)+x(:,4)))).^2/n;
end
y=sqrt(y);
end
2、把數據b.txt放在工作空間目錄中
然後再命令窗口中輸入
clear
global ydata n
format long g
load b.txt
ydata=b';
n=length(ydata);
avg=sum(ydata)/n;
LB=[2/3*avg 0 0 0];
UB=[1*avg 1/3*avg 24*pi 2*pi];
nvars=4;
options=gaoptimset;
options=gaoptimset(options,'PopulationSize',300);
options=gaoptimset(options,'CrossoverFraction',0.8);
options=gaoptimset(options,'MigrationFraction',0.1);
options=gaoptimset(options,'Generations',500);
options = gaoptimset(options,'TolFun',1e-50);
%options = gaoptimset(options,'InitialPopulation',final_pop);
options = gaoptimset(options,'Display','final');
options = gaoptimset(options,'PopInitRange',[LB;UB]);
options = gaoptimset(options,'PlotFcns',@gaplotbestf);
options=gaoptimset(options,'Vectorize','on');%目標函數向量化
[x,fval,exitflag,output,final_pop,scores]=ga(@ga_curfit,nvars,[],[],[],[],LB,UB,[],options);
t=1:n;
plot(t,ydata,'r*');
hold on
plot(t,x(1)+x(2)*sin(x(3)*t+x(4)))
legend('數據','擬合')