powell法c/c++程序

以下代码的vs2019工程文件打包点此下载去掉运行部分的注释即可

/*powell.cpp*/
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include "Powell.h"
#include <iostream>
#define m 10              /*数组长度m  >=  维数n    */


float powell::powell_f(float x[])
{
   
	float result;
	//result = (x[0] - 2)*(x[0] - 2) + (x[1] - 3)*(x[1] - 3) + (x[2] - 4)*(x[2] - 4);
	result = x[0] * x[0] + 2 * x[1] * x[1] - 2 * x[0] * x[1] - 4 * x[0];
	return result;
}

/*多维进退法子程序*/
void powell::mjtf(int n, float x0[], float h, float s[], float a[], float b[])
{
   
	int i;
	float x1[m], x2[m], x3[m], powell_f1, powell_f2, powell_f3;
	for (i = 0; i<n; i++)         /*计算初始两试点*/
	{
   
		x1[i] = x0[i];
		x2[i] = x0[i] + h*s[i];
	}
	powell_f1 = powell_f(x1);
	powell_f2 = powell_f(x2);
	if (powell_f2 >= powell_f1)               /*判断搜索方向*/
	{
                          /*搜索方向为反向,转身*/
		h = (-1)*h;
		for (i = 0; i<n; i++)
			x3[i] = x1[i];
		powell_f3 = powell_f1;
		for (i = 0; i<n; i++)
			x1[i] = x2[i];
		powell_f1 = powell_f2;
		for (i = 0; i<n; i++)
			x2[i] = x3[i];
		powell_f2 = powell_f3;
	}                       /*搜索方向为正向*/

	for (i = 0; i<n; i++)         /*计算第三试点*/
		x3[i] = x2[i] + h*s[i];
	powell_f3 = powell_f(x3);
	while (powell_f3<powell_f2)             /*判断是否未完成搜索*/
	{
                          /*未完成,继续搜索*/
		h = 2 * h;
		for (i = 0; i<n; i++)
			x1[i] = x2[i];
		powell_f1 = powell_f2;
		for (i 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值