user-0 提问: C语言求不等式与等式的解

回复:
user: user-0
content: 引用 7 楼 GKatHere的回复:   // 推理 // 0.038f + 0.46e <= 2.56*10^9 此为直线，且其一面有效 // q = f^0.4 * E^0.6 此为曲线 //  如图，当Q越大时，曲线向直线无效方向移动，故最大Q时，当为曲线与直线的相切点 double LIM_ = 2.56e9; double getlim(double _f, double _e) { 	return 0.038* _f + 0.46*_e; } double getf(double _e) { 	return (LIM_ - 0.46*_e) / 0.038; }  double gete(double _f) { 	return (LIM_ - 0.038*_f) / 0.46; } double getq(double _f, double _e) { 	return pow(_f, 0.4) * pow(_e, 0.6); } // 此处采用 log2快速逼近 void feq() { 	double e = 0, f=0, lim, q, lastq = -1; 	double d = 1; 	int n = 0, m = 0; 	do  	{ 		n++; 		e = gete(f+d); 		q = getq(f+d, e); 		if (!d)				// double最小极限为0 		{ 			m++; 			//	如果此点处q是最大， 			//		1: 则此点为曲线直线唯一相交点，即为相切点 			//		2: 此点两侧任意点的q值必比原q小 			//		3: 如果任意一侧q值比原值大，那么此点为相交点，不是切点 			double PRI = 1e-4;		//	检测精度，太大无效，太小则double精度有限 			double fc = f + PRI; 			double ec = gete(fc); 			double qc = getq(fc, ec); 			if (qc > q) 			{ 				d = PRI; 				continue; 			} 			 fc = f - PRI; 			 ec = gete(fc); 			 qc = getq(fc, ec); 			 if (qc > q) 			 { 				 d = -PRI; 				 continue; 			 }  			break; 		} 		if (q > lastq) 		{ 			f += d; 			d *= 2; 			lastq = q; 		} 		else 			d /= 2; 	} while (1);  	printf("\n迭代次数：%d, %d, ", n, m);  	e = gete(f); 	lim = getlim(f, e); 	q = getq(f, e);; 	printf("\n正解：%e, %e, %e,%e", f, e, lim, q);  	double fe = f / e; 	double feq = LIM_ /( 0.038 *fe + 0.46) * pow(fe, 04);  	f = 3.339e9; 	e = 2.65e10; 	lim = getlim(f, e); 	q = getq(f, e);; 	printf("\n原解：%e, %e, %e,%e", f, e, lim, q); }  迭代次数：2305, 2,  正解：2.688306e+010, 3.344443e+009, 2.560000e+009,7.698139e+009 原解：3.339000e+009, 2.650000e+010, 1.231688e+010,1.157162e+010  注意：原解有误， f 与e 值大误，Q值小误 你用你的代码，然后，他没有数据哇，我在前面加了一个includemath和stdio，不然运行不了

user: user-0
content: 你用你的代码，然后，他没有数据哇，我在前面加了一个includemath和stdio，不然运行不了

user: user-1
content: // 推理 // 0.038f + 0.46e <= 2.56*10^9 此为直线，且其一面有效 // q = f^0.4 * E^0.6 此为曲线 //  如图，当Q越大时，曲线向直线无效方向移动，故最大Q时，当为曲线与直线的相切点 double LIM_ = 2.56e9; double getlim(double _f, double _e) { 	return 0.038* _f + 0.46*_e; } double getf(double _e) { 	return (LIM_ - 0.46*_e) / 0.038; }  double gete(double _f) { 	return (LIM_ - 0.038*_f) / 0.46; } double getq(double _f, double _e) { 	return pow(_f, 0.4) * pow(_e, 0.6); } // 此处采用 log2快速逼近 void feq() { 	double e = 0, f=0, lim, q, lastq = -1; 	double d = 1; 	int n = 0, m = 0; 	do  	{ 		n++; 		e = gete(f+d); 		q = getq(f+d, e); 		if (!d)				// double最小极限为0 		{ 			m++; 			//	如果此点处q是最大， 			//		1: 则此点为曲线直线唯一相交点，即为相切点 			//		2: 此点两侧任意点的q值必比原q小 			//		3: 如果任意一侧q值比原值大，那么此点为相交点，不是切点 			double PRI = 1e-4;		//	检测精度，太大无效，太小则double精度有限 			double fc = f + PRI; 			double ec = gete(fc); 			double qc = getq(fc, ec); 			if (qc > q) 			{ 				d = PRI; 				continue; 			} 			 fc = f - PRI; 			 ec = gete(fc); 			 qc = getq(fc, ec); 			 if (qc > q) 			 { 				 d = -PRI; 				 continue; 			 }  			break; 		} 		if (q > lastq) 		{ 			f += d; 			d *= 2; 			lastq = q; 		} 		else 			d /= 2; 	} while (1);  	printf("\n迭代次数：%d, %d, ", n, m);  	e = gete(f); 	lim = getlim(f, e); 	q = getq(f, e);; 	printf("\n正解：%e, %e, %e,%e", f, e, lim, q);  	double fe = f / e; 	double feq = LIM_ /( 0.038 *fe + 0.46) * pow(fe, 04);  	f = 3.339e9; 	e = 2.65e10; 	lim = getlim(f, e); 	q = getq(f, e);; 	printf("\n原解：%e, %e, %e,%e", f, e, lim, q); }  迭代次数：2305, 2,  正解：2.688306e+010, 3.344443e+009, 2.560000e+009,7.698139e+009 原解：3.339000e+009, 2.650000e+010, 1.231688e+010,1.157162e+010  注意：原解有误， f 与e 值大误，Q值小误

user: user-2
content: 给你一个参考思路： 在前提 0.038 F + 0.46 E <= 2.56 * 10^9 下，因为求的是 Q = F^0.4 * E^0.6 的最大值，易得 F 和 E 越大越好，那么可以转化前提为0.038 F + 0.46 E == 2.56 * 10^9，可求得 F 和 E 的关系式，代入 Q 中，得到一个表达式，可通过数学方法得知其有极值，再大致预估根的位置，然后迭代求解即可。

user: user-0
content: 引用 3 楼 user-2的回复:[quote=引用 2 楼 22% 的回复:] 我不会用你说的第二个软件，我想看看C语言代码怎么写这种题，怎么得到答案 题目是什么？从你的图片里完全看不出。你应该精确地定义一下。[/quote] 就是最上面的两个式子，求最大Q值，得出下面三个结果

user: user-2
content: 引用 2 楼 22% 的回复:我不会用你说的第二个软件，我想看看C语言代码怎么写这种题，怎么得到答案 题目是什么？从你的图片里完全看不出。你应该精确地定义一下。

user: user-0
content: 引用 1 楼 user-2的回复:看不懂，你是想用 C 语言计算 Mathematica 表达式还是直接求解这些式子？ 我不会用你说的第二个软件，我想看看C语言代码怎么写这种题，怎么得到答案

user: user-2
content: 看不懂，你是想用 C 语言计算 Mathematica 表达式还是直接求解这些式子？