MATLAB全局优化原理,matlab利用全局优化思想求解复杂非线性方程的解

我的求解过程分为两部分:1、求出方程表达式;2、求解方程。

求解方程表达式的代码:

V=sym('[2,2,2,3,3,3,4,4,4]');

T=sym('[651,496,1543,95,174,319,81,61,23]');

syms a n m;

ITA=(a./V).^n;

Lnf=-(T./ITA).^m+(m-1).*log(T./ITA)+log(m./ITA);

f=-sum(Lnf);

得到f 的表达式之后,利用第二部分的randwalk函数求解方程未知数。此时需要重新对f做出定义,即在命令窗口输入

f=@(a,n,m) 23^m*(2^(2*n)/a^n)^m - 3*log((3^n*m)/a^n) - 3*log((2^(2*n)*m)/a^n) - 3*log((2^n*m)/a^n) + 61^m*(2^(2*n)/a^n)^m - log((95*3^n)/a^n)*(m - 1) - log((319*3^n)/a^n)*(m - 1) - log((651*2^n)/a^n)*(m - 1) - log((1543*2^n)/a^n)*(m - 1) + 3^(4*m)*(2^(2*n)/a^n)^m - log((23*2^(2*n))/a^n)*(m - 1) - log((61*2^(2*n))/a^n)*(m - 1) - log((81*2^(2*n))/a^n)*(m - 1) - log((31*2^(n + 4))/a^n)*(m - 1) - log((58*3^(n + 1))/a^n)*(m - 1) + 95^m*(3^n/a^n)^m + 174^m*(3^n/a^n)^m + 319^m*(3^n/a^n)^m + 496^m*(2^n/a^n)^m + 651^m*(2^n/a^n)^m + 1543^m*(2^n/a^n)^m;%此表达式为第一部分求出

再在命令窗口输入:[ mx,minf ] = randwalk( f,[9.5,4,3],0.5,0.0001,1000,3)即可求出各未知数。其中randwalk.m的代码为:

function [ mx,minf ] = randwalk( f,x,lamda,epsilon,N,n)

F=zeros(n,1);

X=zeros(n,3);

f1=f(x(1),x(2),x(3));

while(lamda>=epsilon)

k=1;

while(k<=N)

u=unifrnd(-1,1,n,3);

for ii=1:n

X(ii,:)=x+lamda*(u(ii,:)/norm(u(ii,:)));

F(ii)=f(X(ii,1),X(ii,2),X(ii,3));

end

[f11,kk]=min(F);

if f11

f1=f11;

x=X(kk,:);

k=1;

else

k=k+1;

end

end

lamda=lamda/2;

end

mx=x;

minf=f1;

end

如果不加f=@(a,n,m)的话,randwalk无法知道要求解哪三个未知数,会出错。请问,我该如何把两部分变成一部分实现,即可以生成表达式后,不需要重新输入我的表达式是

f=@(a,n,m)......,而直接得到三个未知数的值呢?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值