dachaochao1 2015-01-20 07:55 采纳率: 0%
浏览 795

C++ 弦截法 有些疑问求解答

弦截法中,函数各种嵌套调用,例题中所给的一元三次方程是给定的,系数定好的,那么假如我希望一元三次方程的系数是由自己输入的,但调用的函数不是不能存的么,写在主函数里,那后面的 f 函数好像也用不到了,假如 f 函数再调用一个“定系数的函数”,总不能每次计算都输入一次吧。。。

 #include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

double f(double);
double xpoint(double,double);
double root(double,double);

int main(){
double x1,x2,f1,f2,x;
do{
cout<<"input x1,x2:";
cin>>x1>>x2;
f1=f(x1);
f2=f(x2);
}while(f1*f2>=0);
x=root(x1,x2);
cout<<setiosflags(ios::fixed)<<setprecision(7);
cout<<"A root of equation is"<<x<<endl;
return 0;
}

double f(double x){             //这里能输入么,或者再调用一个函数。
double y;
y=x*x*x-5*x*x+16*x-80;
return y;
}

double xpoint(double x1,double x2){
double y;
y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
return y;
}

double root(double x1,double x2){
double x,y,y1;
y1=f(x1);
do{
x=xpoint(x1,x2);
y=f(x);
if(y*y1>0){
y1=y;
x1=x;
}
else
x2=x;
}while(fabs(y)>=0.0000001);
return x;
}
  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-05-27 00:04
    关注

    该回答引用ChatGPT-3.5,仅供参考,不保证完全正确

    在使用弦截法求解方程时,函数的嵌套调用是为了在每次迭代中获取函数在不同点上的函数值。如果你希望一元三次方程的系数由用户输入,你可以在主函数中读取系数,并将它们作为参数传递给函数。


    以下是修改后的代码示例:

    #include <iostream>
    #include <iomanip>
    #include <cmath>
    using namespace std;
    
    double f(double, double, double, double, double);
    double xpoint(double, double, double, double, double);
    double root(double, double, double, double, double);
    
    int main() {
        double a, b, c, d, x1, x2, f1, f2, x;
        
        cout << "Enter the coefficients (a, b, c, d) of the cubic equation: ";
        cin >> a >> b >> c >> d;
        
        do {
            cout << "Input x1, x2: ";
            cin >> x1 >> x2;
            f1 = f(a, b, c, d, x1);
            f2 = f(a, b, c, d, x2);
        } while (f1 * f2 >= 0);
        
        x = root(a, b, c, d, x1, x2);
        
        cout << setiosflags(ios::fixed) << setprecision(7);
        cout << "A root of the equation is " << x << endl;
        
        return 0;
    }
    
    double f(double a, double b, double c, double d, double x) {
        double y = a * pow(x, 3) + b * pow(x, 2) + c * x + d;
        return y;
    }
    
    double xpoint(double a, double b, double c, double d, double x1, double x2) {
        double y = (x1 * f(a, b, c, d, x2) - x2 * f(a, b, c, d, x1)) / (f(a, b, c, d, x2) - f(a, b, c, d, x1));
        return y;
    }
    
    double root(double a, double b, double c, double d, double x1, double x2) {
        double x, y, y1;
        y1 = f(a, b, c, d, x1);
        
        do {
            x = xpoint(a, b, c, d, x1, x2);
            y = f(a, b, c, d, x);
            
            if (y * y1 > 0) {
                y1 = y;
                x1 = x;
            } else {
                x2 = x;
            }
        } while (fabs(y) >= 0.0000001);
        
        return x;
    }
    

    在上述修改后的代码中,你可以输入一元三次方程的系数,然后将这些系数作为参数传递给函数。这样,在每次函数调用时,都会使用输入的系数进行计算。这样你就可以实现自己输入系数的功能,并进行弦截法的求解。

    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能