如何解决在C中找到局部最大值
| 我想在此Sin(x)函数的0到3.1416的区间内找到局部最大值。但它始终显示0作为最大值。即最大值= 0;请帮助我发现我的缺点。 谢谢。#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#ifndef max
#define max(a,b) ((a)>(b)?(a):(b))
#endif
double f(double x){
return sin(x);
}
double bisection(double a,double b)
{
double Fa=f(a);
double Fb=f(b);
double midpoint=(a+b)/2;
double Fmidpoint=f(midpoint);
while(abs(b-a)>1e-6){
double left=(a+midpoint)/2;
double right=(b+midpoint)/2;
double Fleft=f(left);
double Fright=f(right);
if(midpoint>max(Fleft,Fright)){
a=left;
Fa=Fleft;
b=right;
Fb=Fright;
}
else{
if(Fleft>Fright)
{
b=midpoint;
Fb=Fmidpoint;
midpoint=left;
Fmidpoint=Fleft;
}
else{
a=midpoint;
Fa=Fmidpoint;
midpoint=right;
Fmidpoint=Fright;
}
}
}
return midpoint;
}
int main(){
double maximum;
double rangeleft=0;
double rangeright=3.1416;
maximum=bisection(rangeleft,rangeright);
printf(\"%d\",maximum);
return 0;
}
解决方法
调用
printf
函数时出错。
您不应该在此处使用ѭ2identifier格式标识符,因为这意味着maximum
变量为double时printf
应该输出整数。
改用ѭ5and,您的程序将输出1.5708,这是正确的。
您可以在Wikipedia上找到所有可能的“ 1”格式标识符的列表。
, 如果您将其调试,则可以看到变量具有正确的值,因此问题必须通过打印该值来实现
%d用您的双精度整数-使用%f
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。