c语言试探法求函数最优解 对数函数求解方法
已知目标函数f(x)=x +20/x,取初始区间[a,b]=[2,10],用0.618法求最优解
这里是求目标函数的极小值对应的x值吧?理论分析可知,x = 2√5 ≈ 4.472136 。直接看代码:
郴州ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!
#include stdio.h
#include conio.h
double x618(double x1,double x2){ //求x1,x2之间靠近x1的黄金分割点
return x1*0.618+x2*0.382;
}
double f(double x){ //目标函数
return x+20.0/x;
}
int main(){
double x1=2.0,x2=10.0,xt1,xt2,ft1,ft2,x;
int cnt=0;
xt1=x618(x1,x2);
xt2=x618(x2,x1);//得到初始试探点,xt1靠近x1,xt2靠近x2
while(x2-x11e-6){//这里假设精度达到0.001即退出
++cnt;//统计迭代次数
ft1=f(xt1);
ft2=f(xt2);
if(ft1ft2){//这里要找极小值,所以要保留小的,如果要找极大值,只需把""改成""
x2=xt2; xt2=xt1; xt1=x618(x1,x2);
}else{
x1=xt1; xt1=xt2; xt2=x618(x2,x1);
}
}
x=(x1+x2)/2;
printf("x=%lg, f(x)=%lg, count=%d",x,f(x),cnt);
printf("\nFinished!\n");
getch();
return 0;
}
程序运行结果与理论解相符。
C语言最优解算法
#includestdio.h
int result[100][6];
int data[100000][2];
int main()
{
int i,j,T,f,temp,rlen=0,dlen,swap;
scanf("%d",T);
while(T--0)
{
for(dlen=0;1;dlen++)
{
scanf("%d %d",data[dlen][0],data[dlen][1]);
if(0==data[dlen][0] 0==data[dlen][1])
break;
}
scanf("%d",f);
for(i=0;idlen-1;i++)
{
for(j=0;jdlen-i-1;j++)
{
swap=0;
if(0==f)
{
if(data[j][0]data[j+1][0] || (data[j][0]==data[j+1][0] data[j][1]data[j+1][1]))
{
swap=1;
}
}
else if(1==f)
{
if(data[j][1]data[j+1][1] || (data[j][1]==data[j+1][1] data[j][0]data[j+1][0]))
{
swap=1;
}
}
if(1==swap)
{
temp=data[j][0];
data[j][0]=data[j+1][0];
data[j+1][0]=temp;
temp=data[j][1];
data[j][1]=data[j+1][1];
data[j+1][1]=temp;
}
}
}
if(dlen=3)
{
for(i=0;i3;i++)
{
result[rlen][2*i]=data[i][0];
result[rlen][2*i+1]=data[i][1];
}
rlen++;
}
}
for(i=0;irlen;i++)
{
printf("Case #%d:\n",i+1);
for(j=0;j3;j++)
printf("%d %d\n",result[i][2*j],result[i][2*j+1]);
}
return 0;
}
C语言编程用试探法(要求从大到小试探)实现函数gcd(m,n),其功能为求解正整数m、n的最大公约数。
#includestdio.h
void gcd(int m, int n) {
int temp = m, i, max;
if(temp n) {
temp = n;
}
max = temp;
for(i=temp; i=1; i--) {
if(m%max==0 n%max==0) {
printf("The result is [%d]", max);
return;
}
max--;
}
}
int main() {
int M, N;
scanf("[%d],[%d]", M, N);
gcd(M, N);
return 0;
}
【C语言算法】求最优解
#include stdio.h
void main()
{
double V;
printf_s("请输入V:\n");
scanf_s("%lf", V);
int m, n, p;
int M, N, P;
double delta = 10000.0;
for(m = 0; m = 16; m++)
{
for(n = 0; n = 256; n++)
{
for(p = 1; p = 4096; p++)
{
double d = m*n/(double)p - V;
if(d 0)
d = -d;
if(d delta)
{
delta = d;
M = m;
N = n;
P = p;
}
}
}
}
printf_s("最优解:M = %d, N = %d, P = %d\n", M, N, P);
}
文章名称:c语言试探法求函数最优解 对数函数求解方法
网站地址:http://scyanting.com/article/dooesco.html