tongjiayan 发表于 2005-11-5 11:34

[求助]真诚请教:0.618法的一维搜索

这是MATLAB中的优化问题,用0.618法做,需要编个程序:
求min y(x)=(x*x-1)(x*x-1) 在区间 上的一个解,要求精度为10^(-1)。
由于在下是第一次遇到这样的问题,所以不怎么懂,还望各位前辈不吝指教!
谢谢!

linda 发表于 2005-11-5 11:40

#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语言写的,你改写一下就行了

绿荷雨丝 发表于 2005-11-5 11:42

不用这么麻烦

matlab自带了函数的

用fminbnd就行了

tongjiayan 发表于 2005-11-5 12:51

您好!
感谢您的解答,我会好好研究的。再请教一个问题,只在C++中编写完程序后再导入MATLAB吗?怎么操作比较好?因为我从来没有操作过类似的情况。
非常谢谢!

tongjiayan 发表于 2005-11-5 12:54

您好!
请问您所指的命令该如何使用?这个命令本身就是用0.618法做的吗?还要不要添加别的程序?敢问您有没有现成的例子能让我学习一下的?
非常感谢!

frogfish 发表于 2005-11-5 14:16

写一个fun1.m文件:
function f=fun1(x);
f=(x*x-1)*(x*x-1);

然后才命令窗口输入
=fminbnd('fun1',0,2)就行了

frogfish 发表于 2005-11-5 14:19

二楼的不是这个意思
他的意思是讲C语言的程序翻译成matlab的代码
相当于是自己编程,只是有一个C语言程序作为参照

tongjiayan 发表于 2005-11-5 14:39

您好!
谢谢您的解答,我会试一下的,若再有什么问题再来请教。
另外我想再请教一问:在优化中,是否各种探索法都对应有各自的命令,只要在使用时输入命令和参数就行?
非常感谢!You are my teacher!

tongjiayan 发表于 2005-11-5 14:42

原来如此。看来我太孤陋寡闻了。

tongjiayan 发表于 2005-11-5 14:47

您好!
对不起,又来打扰了,我刚才根据您的指导,把第一行的命令输入,打了回车后系统给了如下的提示:
function f=fun1(x);
??? Strings passed to EVAL cannot contain function declarations.

请教这句话是什么意思?
谢谢!

frogfish 发表于 2005-11-5 15:04

请仔细看6楼,要先写一个.m文件
在命令窗口输入的是=fminbnd('fun1',0,2)

frogfish 发表于 2005-11-5 15:05

看你要用什么?用来做什么?

如果你真要用matlab建议先拿本matlab的书先看看,大致了解一下

很简单一般一两天就能初步掌握了

tongjiayan 发表于 2005-11-5 15:20

您好!
谢谢!原来是这个意思,先新建一个M文件,然后再使用。我第一次玩这个东西,多多指教!
虽然您这样批评我感觉很受打击,但还是要谢谢您!

frogfish 发表于 2005-11-5 15:25

没有批评的意思,只是给我的感觉你是刚刚用matlab
很多基本的东西书上都写得很详细了,所以建议你先看看书
有利于你使用matlab

zhj111111 发表于 2005-11-18 18:11

xiexie
页: [1] 2
查看完整版本: [求助]真诚请教:0.618法的一维搜索