[求助]真诚请教:0.618法的一维搜索
这是MATLAB中的优化问题,用0.618法做,需要编个程序:求min y(x)=(x*x-1)(x*x-1) 在区间 上的一个解,要求精度为10^(-1)。
由于在下是第一次遇到这样的问题,所以不怎么懂,还望各位前辈不吝指教!
谢谢! #include
#include
/*黄金分割法求最小值的C++程序,部分变量及函数书写并不规范*/
//δ为题给精度
int n = (lnδ/ln0.618 + 1) + 1;
int i;
float f(float ai, float bi)
{
a(i + 1) = ai + 0.618(bi - ai);
return ai + 1;
}
float g(float ai, float bi)
{
b(i + 1) = ai + 0.382(bi - ai);
return b(i + 1);
}
float F(float ai, float bi)
{
//题给的f(x)函数式;
return ;
}
float A(float ai, float bi)
{
int i = 1;
float result;
L:do
{
a(i + 1) = f(float ai, float bi);
b(i + 1) = g(float ai, float bi);
float F1 = F(float ai, float bi);
float F2 = F(float a(i + 1), float b(i + 1));
ai = ai, bi = b(i + 1);
i ++;
}while(i <= n && F1 >= F2)
if(i < n)
{
B(float ai, float bi);
}
else
result = F2;
return result;
}
float B(float ai, float bi)
{
do
{
a(i + 1) = f(float ai, float bi);
b(i + 1) = g(float ai, float bi);
float F1 = F(float ai, float bi);
float F2 = F(float a(i + 1), float b(i + 1));
ai = a(i + 1), bi = bi;
i ++;
}while(i <= n && F1 <= F2)
if(i < n)
{
goto L;
}
else
result = F1;
return result;
}
void main()
{
int i = 1;
float A(float ai, float bi);
cout<<"最小值为:"<}
这是C语言写的,你改写一下就行了 不用这么麻烦
matlab自带了函数的
用fminbnd就行了 您好!
感谢您的解答,我会好好研究的。再请教一个问题,只在C++中编写完程序后再导入MATLAB吗?怎么操作比较好?因为我从来没有操作过类似的情况。
非常谢谢! 您好!
请问您所指的命令该如何使用?这个命令本身就是用0.618法做的吗?还要不要添加别的程序?敢问您有没有现成的例子能让我学习一下的?
非常感谢! 写一个fun1.m文件:
function f=fun1(x);
f=(x*x-1)*(x*x-1);
然后才命令窗口输入
=fminbnd('fun1',0,2)就行了 二楼的不是这个意思
他的意思是讲C语言的程序翻译成matlab的代码
相当于是自己编程,只是有一个C语言程序作为参照 您好!
谢谢您的解答,我会试一下的,若再有什么问题再来请教。
另外我想再请教一问:在优化中,是否各种探索法都对应有各自的命令,只要在使用时输入命令和参数就行?
非常感谢!You are my teacher! 原来如此。看来我太孤陋寡闻了。 您好!
对不起,又来打扰了,我刚才根据您的指导,把第一行的命令输入,打了回车后系统给了如下的提示:
function f=fun1(x);
??? Strings passed to EVAL cannot contain function declarations.
请教这句话是什么意思?
谢谢! 请仔细看6楼,要先写一个.m文件
在命令窗口输入的是=fminbnd('fun1',0,2) 看你要用什么?用来做什么?
如果你真要用matlab建议先拿本matlab的书先看看,大致了解一下
很简单一般一两天就能初步掌握了 您好!
谢谢!原来是这个意思,先新建一个M文件,然后再使用。我第一次玩这个东西,多多指教!
虽然您这样批评我感觉很受打击,但还是要谢谢您! 没有批评的意思,只是给我的感觉你是刚刚用matlab
很多基本的东西书上都写得很详细了,所以建议你先看看书
有利于你使用matlab xiexie
页:
[1]
2