导航:首页 > 源码编译 > 进化算法进行非线性方程组求解

进化算法进行非线性方程组求解

发布时间:2022-09-24 09:07:18

① 如何求解复杂非线性方程

Newton流线法是近两年提出的一种从Newton场的观点出发,沿流线的追踪算法。与传统求解非线性方程组的方法类似,Newton流线法基于迭代方向的收敛性进行求解,但普通的求解方法只在根附近有二次收敛性,对初值比较敏感。而Newton流线法建立了与问题维数和函数的具体性质无关的4个判断参数:减幅指标 ,降速指标 ,最大斜率 ,斜率比 ,这4个参数是可计算量,基于这些可计算的判断参数,沿Newton流可以自适应地追踪或者识别奇点,在计算过程中可以跳过奇点,所以降低了算法对初始值的敏感度;在很大程度上克服了常规方法的局部收敛性,是一种全局收敛的算法;并且可以自适应实时确定合适的步长,使得计算更精确。

② matlab解带参数的非线性方程组

由于方程个数3>未知数个数2,且涉及到距离的计算,所以原问题是求解一个超定(非线性)方程组.平方和形式这里采用最小二乘法解决(n个定点与未知点的计算,n>=2):

先建立pfun.m文件:

%给出待求点p(x,y)的初值p0

%n个定点的坐标x0,y0

%中间相邻两定点到p的距离差(最后一个点与起点求差)

function[p,norm,res,exit,out]=pfun(p0,x0,y0,det)

%判断det输入的正确性

n=length(det);

fori=1:n-1

ifabs(det(i))>sqrt((x0(i)-x0(i+1))^2+(y0(i)-y0(i+1))^2);

error('abs(det)')

end

end

ifabs(det(n))>sqrt((x0(n)-x0(1))^2+(y0(n)-y0(1))^2)

error('abs(det)')

end

%下降算法采用Levenberg-Marquardt法

%函数调用最大次数为1000

%由用户定义目标函数的雅可比矩阵

opt1=optimset('LargeScale','off','MaxFunEvals',1000,'Jacobian','on');

%用非线性最小二乘命令求p(x,y),x=p(1),y=p(2)

[p,norm,res,exit,out]=lsqnonlin(@dfun,p0,[],[],opt1,x0,y0,det);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%建立含雅可比矩阵的pfun.m文件

function[f,g]=dfun(p,x0,y0,det)

n=length(det);

fori=1:n-1

f(i)=sqrt((p(1)-x0(i))^2+(p(2)-y0(i))^2)-...

sqrt((p(1)-x0(i+1))^2+(p(2)-y0(i+1))^2)-det(i);

end

f(n)=sqrt((p(1)-x0(n))^2+(p(2)-y0(n))^2)-...

sqrt((p(1)-x0(1))^2+(p(2)-y0(1))^2)-det(n);

%当函数用两个输出参数调用时

ifnargout>1

%计算雅可比矩阵

fori=1:n-1

g(i,1)=(p(1)-x0(i))/sqrt((p(1)-x0(i))^2+(p(2)-y0(i))^2)-...

(p(1)-x0(i+1))/sqrt((p(1)-x0(i+1))^2+(p(2)-y0(i+1))^2);

g(i,2)=(p(2)-y0(i))/sqrt((p(1)-x0(i))^2+(p(2)-y0(i))^2)-...

(p(2)-y0(i+1))/sqrt((p(1)-x0(i+1))^2+(p(2)-y0(i+1))^2);

end

g(n,1)=(p(1)-x0(n))/sqrt((p(1)-x0(n))^2+(p(2)-y0(n))^2)-...

(p(1)-x0(1))/sqrt((p(1)-x0(1))^2+(p(2)-y0(1))^2);

g(n,2)=(p(2)-y0(n))/sqrt((p(1)-x0(n))^2+(p(2)-y0(n))^2)-...

(p(2)-y0(1))/sqrt((p(1)-x0(1))^2+(p(2)-y0(1))^2);

end

例如各点关系如下:

输入:

x0=[0.5,0,0];

y0=[2+sqrt(3)/2,2,0];

det=[sqrt(3)-2,2-2*sqrt(2),2*sqrt(2)-sqrt(3)];

p0=[1,1];

[p,norm,res,exit,out]=pfun(p0,x0,y0,det)

输出:

p=

2.0000 2.0000

③ PSO如何求解非线性方程组求解

PSO搜索需要一个适应度函数,粒子的好坏是根据其适应度来的,一个非线性方程组,比如说,
f1(x,y)=0;
f2(x,y)=0;

你要搜索它的解,需要定义一个适应度函数,你可以定义
|f1|+|f2|或者定义(f1)^2+(f2)^2,这样再搜索时寻找适应度函数值最小的那个解,最优粒子的适应度会越来越趋进0,当适应度函数值为0时,必有f1(x,y)=0;f2(x,y)=0;因此,就得到了方程组的解。

当然,你也可以根据侧重点的不同来定义适应度函数,例如,若希望优先考虑方程1,则可把适应度函数定义为10*|f1|+|f2|或者10*(f1)^2+(f2)^2,这里的10是我随意定的,实际中可根据需求来定。

另外,适应度函数,也不是一定向上面那么定义,你要定义为(f1)^4+(f2)^2等等也是可以的,只是最终的侧重点不同了,比如说,f1=0.1,f2=0.15,没有f1=0.3,f2=0.1的适应度好,显然是不合乎实际的。

再者,你还可以定义适应度函数为1/|f1| + 1/|f2| ,但是这样定义后,适应度函数值越大,粒子的适应度越好,在搜索的过程中,最优粒子的适应度函数值越来越大,但理论上适应度函数值为无穷大才行,实际搜索永远都达不到。

该说的我都说明了,以前写过PSO算法,这些都是自己的心得,不知道能否帮上你~~

④ 如何用matlab解多元非线性方程组

使用solve函数。

举个例子,解非线性方程组 x^2+y^3=10 x^3-y^2=1 其中x,y为方程组的未知量 在Matlab的命名窗口中输入:

syms x y [x y]=solve('x^2+y=10','x^2-y^2=1','x','y') 即可 输出计算结果为:

x = (37^(1/2)/2 + 21/2)^(1/2) (21/2 - 37^(1/2)/2)^(1/2) -(21/2 - 1/2*37^(1/2))^(1/2) -(1/2*37^(1/2) + 21/2)^(1/2)

y = - 37^(1/2)/2 - 1/2 37^(1/2)/2 - 1/2 37^(1/2)/2 - 1/2 - 37^(1/2)/2 - 1/2

具体solve函数的使用方法,通过输入help solve来学习。

⑤ Matlab解非线性方程组

对于带变量的非线性方程组,可以用Matlab的for循环语句和vpasolve函数联合求解。实现方法:

m=0:0.01:1;

for i=1:length(m)

syms x y z

f1=cos(x)-cos(y)+cos(z)-m(i);

f2=cos(5*x)-cos(5*y)+cos(5*z);

f3=cos(7*x)-cos(7*y)+cos(7*z);

[x1(i),y1(i),z1(i)]=vpasolve(f1,f2,f3);

end

x=double(x1);y=double(y1);z=double(z1);

plot(m,x,m,y,m,z)

⑥ 20个非线性方程20个未知数 MATLAB 求解

对于非线性方程组求解,可以使用fsove函数。其求解方法:

1、自定义非线性方程组函数,即

function y = func(x)

n1=x(1);n2=x(2);n3=x(3);n4=x(4);n5=x(5);......

。。。。。。

end

2、初定x0的初值,如 x0=rand(1,20)

3、[x,h]=fsolve(@func,x0)

这里,x为方程组的解,h为每个等式的值,如h≈0,说明得到的解是正确的。

⑦ 非线性方程组的解法matlab

用matlab求解非线性方程组方法,可以用下列方法来实现:
方法一,使用solve函数求解
x = optimvar('x');
y = optimvar('y');
prob = optimproblem;
prob.Objective = -x - y/3;
prob.Constraints.cons1 = x + y <= 2;
prob.Constraints.cons2 = x + y/4 <= 1;
prob.Constraints.cons3 = x - y <= 2;
prob.Constraints.cons4 = x/4 + y >= -1;
prob.Constraints.cons5 = x + y >= 1;
prob.Constraints.cons6 = -x + y <= 2;
sol = solve(prob)

方法二,使用fsolve函数求解
F = @(x) [2*x(1) - x(2) - exp(-x(1)); -x(1) + 2*x(2) - exp(-x(2))];

x0=[-5;-5];

[x,fval] = fsolve(F,x0)

方法三,使用迭代法求解,如Newton迭代法
m=3;
x0=zeros(m,1);
tol=1e-6;
x=x0-dfun(x0)\fun(x0);
n=1;
while(norm(x-x0>tol)) & n<1000
x0=x;
x=x0-dfun(x0)\fun(x0);
n=n+1;
end
x
这里,fun是原方程组,dfun是导数方程组

⑧ 如何将非线性方程线性化,以便用矩阵求解

比如

x''+omega0^2*sinx=0;
设x1=x, x2=x'
x''=-omega0^2*sinx
x1'=x2 (1)
x2'=-omega0^2*sinx1 (2)
另这个方程组等于0
可以得到x1=0 或者 pi,x2=0;
线性化:两个方程分别对x1 x2求偏导,把并写进2×2的矩阵里。
0 1
-omega0^2*cosx1 0
再把两组解带进去
可以得到
0 1
+(-)omega0^2 0
这是一种线性化
第二种是把原方程直接线性化
把非线性的项线性化即可
x''+omega0^2*sinx=0;
这里非线性的是sinx
当然你还是要选取在哪里线性化,比如在x=0的地方线性化
f(x,x',x'')=x''+omega0^2*sinx;
df/dx''=1, 1*deltax''=deltax''
df/dx'=0, 0*deltax'=0
df/dx=omega0^2*cosx=omega0^2, omega0^2*deltax=omega0^2*deltax
另deltax=y
所以y''+omega0^2*y=0;
线性化完成。

阅读全文

与进化算法进行非线性方程组求解相关的资料

热点内容
程序员中的荣誉 浏览:270
java的封装性 浏览:385
命令提示符垃圾清理 浏览:801
javachar1 浏览:1001
lcd单片机投影仪用久了会发黄 浏览:751
王者荣耀游戏内进攻主宰命令 浏览:215
周立功单片机发展有限公司 浏览:612
iphone未成年怎么付款app 浏览:988
苹果app是英文怎么改 浏览:837
51单片机485通信 浏览:270
符咒全书pdf 浏览:565
海底捞app签到怎么弄不成了 浏览:862
安卓php服务器搭建 浏览:259
京东直营网挣用什么APP 浏览:825
杰克豆车机怎么安装app 浏览:32
app查余额怎么有两个金额 浏览:305
小程序仿今日头条源码 浏览:277
框架源码研读 浏览:447
仙侣奇缘3如何架设服务器 浏览:954
单片机RRC指令 浏览:889