⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0_618.cpp

📁 运筹学中使用黄金分割方法求放程组的一个小程序~!
💻 CPP
字号:
#include <iostream>
#include <string>
#include <ctype.h>
#include <stack>
#include <stdlib.h>
using namespace std;

int transnum(char a)
{
	switch (a)
	{
	case'0':return 0;
	case'1':return 1;
	case'2':return 2;
	case'3':return 3;
	case'4':return 4;
	case'5':return 5;	
	case'6':return 6;
	case'7':return 7;
	case'8':return 8;
	case'9':return 9;
	default :return -1;
	}
}

float fx(string str,float t)
{
	int num=0;
	float fx=0;
	int ip=0;
	string opexp;
	stack<int> mystack;
	float sum1=0;
	while(ip!=str.length())
	{
		
		float mul=t;
		if(isdigit(str[ip]))
		{
			int tempip=ip;
			sum1=transnum(str[ip]);
			while(isdigit(str[ip+1]))
			{
				sum1=sum1*10+transnum(str[++ip]);
				num++;
			}
			if((!isdigit(str[ip+1]))&&(ip+1<str.length())&&(str[ip+1]!='+')&&(str[ip+1]!='-'))
				mystack.push(sum1);
			if(str[tempip-1]=='^'&&str[ip-num-4]=='+')
			{
				for (int i=1;i<sum1;i++)
				{
					mul=mul*t;
				}
				fx=mystack.top()*mul+fx;
				mystack.pop();
				num=0;
			}
			else if (str[tempip-1]=='^'&&str[ip-num-4]=='-')
			{	
				float result=sum1*mystack.top();
				for (int i=1;i<sum1;i++)
				{
					mul=mul*t;
				}
				fx=fx-mystack.top()*mul;
				mystack.pop();
				num=0;
			}
			else if (!isalpha(str[ip+1])&&str[tempip-1]=='+')
			{
				fx=fx+sum1;
			}
			else if (!isalpha(str[ip+1])&&str[tempip-1]=='-')
			{
				fx=fx-sum1;
			}
		}
		ip++;
	}
//	cout<<fx<<endl;
	return fx;
}

void main()
{
	string exp;
	float a=0.5,b=3.5;
	float f1,f2;
	float t1,t2;
	float E=0.8;
	int k=0;
	exp="-2x^3+21x^2-60x^1+50";
	t1=b-0.618*(b-a);
	t2=a+0.618*(b-a);
	f1=fx(exp,t1);f2=fx(exp,t2);
	cout<<"the result is:"<<endl;
	while (1)
	{
		k++;
		if (f1<=f2)
		{
			if (t2-a<=E)
			{
				f1=fx(exp,t1);
				cout<<"t1="<<t1;
				cout<<"\tf1="<<f1<<endl;
				break;
			}
			else
			{
				b=t2;
				t2=t1;
				t1=b-0.618*(b-a);
				f2=f1;
				f1=fx(exp,t1);
			}

		}else
		{
			if (b-t1<=E)
			{
				f2=fx(exp,t2);
				cout<<"t2="<<t2;
				cout<<"\tf2="<<f2<<endl;
				break;
			}
			else
			{
				a=t1;
				t1=t2;
				t2=a+0.618*(b-a);
				f1=f2;
				f2=fx(exp,t2);
			}
		}
	}
	cout<<"k="<<k<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -