matlab多元函数求极值应用

matlab多元函数求极值应用,第1张

显然长宽相等,否则可使用更少的材料制造出相同容积的箱盒

记边长为x,高y

则x^2 y=100, y>=5;

材料 f(x,y)=4xy+x^2=400/x+x^2

因x不大于根号20,上述值在x取根号20时 最小 ,此时y等于5

  建议用解非线性方程组的方法求解,fsolve()函数,先设定初值,知道解的大致的范围后,再以此值为初值,在设定的精度下求解。

  用matlab解一道复杂的多元非线性方程组;

  参考如下:

  建立

Myfunm

文件

  function

F

=

myfun(x,a)

  E

=

a(1);

  I

=

a(2);

  R0

=

a(3);

  R1

=

a(4);

  T

=

a(5);

  A

=

a(6);

  v

=

a(7);

  rho

=

a(8);

  F

=

[

(T

-

rho

A

v^2)

sin(x(3))

x(1)

-

(T

cos(x(3))

+

rho

A

v^2

-

rho

A

v^2

cos(x(3)))

x(2)

-

EI/(R0

+

R1);

  (1/3)

(T

-

rho

A

v^2)

sin(x(3))

x(1)^3

-

(1/2)

(T

cos(x(3))

+

rho

A

v^2

-

rho

A

v^2

cos(x(3)))

x(2)

x(1)^2

-

E

I

x(2);

  (T

-

rho

A

v^2)

sin(x(3))

x(1)^2

-

(T

cos(x(3))

+

rho

A

v^2

-

rho

A

v^2

cos(x(3)))

x(2)

x(1)

-

E

I

x(3)];

  建立一个执行文件

  clc

  clear

  a

=

zeros(8);

  display('#

Pls

input

the

known

parameters:

#')

  a(1)

=

input('E

=

');

  a(2)

=

input('I

=

');

  a(3)

=

input('R0

=

');

  a(4)

=

input('R1

=

');

  a(5)

=

input('T

=

');

  a(6)

=

input('A

=

');

  a(7)

=

input('v

=

');

  a(8)

=

input('rho

=

');

  display('#

Pls

input

the

initial

point:

#')

  x0

=

zeros(3);

%

Make

a

starting

guess

at

the

solution

  x0(1)

=

input('x1

=

');

  x0(2)

=

input('y1

=

');

  x0(3)

=

input('phi

=

');

  options

=

optimset('Display','iter');

%

Option

to

display

output

  [x,fval]

=

fsolve(@(x)

myfun(x,a),x0,options)

%

Call

solver

  运行,输入已知的几个参数,再输入初始搜索点,即可。

这是二次规划,用quadprog函数解决。不过要首先把目标函数前加负号,然后写成标准的二次型样式。这是因为quadprog求解的是最小值。

先直接定义x1=50:500;x2=50:500;x3=50:500;x4=50:500;x5=50:500,然后定义y=284213+162x1-489x2-579x3

+328x4-220x5+0001x1^2+0003x2^2+0004x3^2+0003x4^2+0001x5^2-0004x1x2-00008x1x3+0004x1x4

-0001x1x5+0008x2x3-0003x2x4+0004x2x5-0008x3x4+00008x3x5-0004x4x5此处请注意,x1,x2,x3,x4,x5之间的互乘和自身的2次方均用用“ ”,即点乘最后,max(y),即可得出最大值。

注意:

“变量”不同于“未知数”,不能说“二次函数是指未知数的最高次数为二次的多项式函数”。“未知数”只是一个数(具体值未知,但是只取一个值),“变量”可在一定范围内任意取值。

在方程中适用“未知数”的概念(函数方程、微分方程中是未知函数,但不论是未知数还是未知函数,一般都表示一个数或函数——也会遇到特殊情况),但是函数中的字母表示的是变量,意义已经有所不同。从函数的定义也可看出二者的差别。

用线性规划可以解决这个问题

不过你的问题只有函数和上下限,太简单了

观察都可以知道,n1取最大,n2,n4取最小的时候,函数最小

如果要编程解决,就可以用线性规划,首先y的常数项首先可以忽略

我们考虑yy=-2760×n1+23278×n2+5938×n4的最小值

>>f=[-2760 23278 5938];%线性系数

>>lb=[0 0 0];%下限

>>ub=[10 15 10];上限

>>n=linprog(f,[],[],[],[],lb,ub)

n =

100000

00000

00000

返回的意思是说 n1=10,n2=0,n4=0时能取到最小

这时候y最小值

>> ymin=fn+1064

ymin =

7880000

function y = f(x1,x2,x3);

if(x1>x2)

if(x1>x3)

y=x1;

else

y=x3;

end

else if(x2>x3)

y=x2;

else

y=x3;

end

end

差不多应该是这样,这种比较大小的写法很多。可以自己写逻辑。

然后存成fm就应该可以调用了。

用 max = f(1,2,3); 应该可以得到 max = 3

不好意思,没有拿matlab跑一下。有问题再说

刚才跑了一下,应该没有问题的。就是逻辑你可以自己修改。

>> fun = @(x) (sqrt((13-2x(1)-x(2))^2+15^2)+x(1))72+272sqrt(x(2)^2+25);

>> x0 = [4,4];

>> op = optimset('Algorithm','interior-point');

>> [x,w] = fmincon(fun,x0,[],[],[],[],[0,0],[8,8],[],op)

x =

18361 06676

w =

2751343

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12182670.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存