matlab 求三元函数y=f(x1,x2,x3)最大值的程序怎么写

如题所述

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

差不多应该是这样,这种比较大小的写法很多。可以自己写逻辑。
然后存成f.m就应该可以调用了。
用 max = f(1,2,3); 应该可以得到 max = 3
不好意思,没有拿matlab跑一下。有问题再说

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

这是求三个数的程序,现在是一个函数:y=35.1-5.9833*x1-7.0833*x1^2+0.1333*x2-1.8677x2^2-1.6833*x3+4.7833*x3^2+1.5*x1*x2+3.3*x1*x3-2.6667*x2*x3;该怎么办呢?谢谢了!

追答

说实话,怎么没有太看懂你给的这个式子呢? 这个是函数么? 看着全部是数? 能简单把目的再说一下不?

追问

*代表乘号,x1,x2,x3是变量,所以上面是一个函数,现想求它的最大值,x1,x2,x2的区间都是[-1,1]。

追答

恩,我明白了。不过这种题目我感觉可是有点难。
你最近有在学习什么算法么? 还是说不要求算法只要答案的?
如果我写的话,可能需要一小点点时间,不能现在给你写出来。 我matlab也不是特别熟练的那种。我帮你问问。稍等一下。

刚才和问了一个同学,讨论了一下。因为是三元的变量所以就不画出来,因为画出来是4维的也不直观。如果只是要结果的话,最好的方法就是用for循环来做,那这样就可以得到一个可接受误差以内的最大值。下面的程序就可以满足,不过我为了节省时间,用了一个0.1的步长,估计误差就稍微大了一点。我用i,j,k代表的你的x1,x2,x3
max = 0.00; 这个我乱写的,估计可以写0.
for i = -1:0.1:1
for j = -1:0.1:1
for k = -1:0.1:1
y=35.1-5.9833*i-7.0833*i*i+0.1333*j-1.8677*j*j-
1.68338*k+4.7833*k*k+1.5*i*j+3.3*i*k-2.6667*j*k;
if(y>max)
max=y;
end
end
end
end
如果要求答案,可以把循环的步长稍微调整一下。换成0.01或者更小0.001.这样得到的肯定更精确。

然后,如果要求算法的话。我最近学习了基因算法,是可以解决这种类型的题目的。如果有需要,你可以给我留言。我可以给你写一下。

追问

十分感谢!我主要要结果就OK了。

追答

额,那不给这个问题做个结么? 我看着我的回答里面那个问号觉得囧囧的~

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-13
对于多元函数的最值,使用fminsearch函数
相似回答