gpt4 book ai didi

c++ - 在 C++ 中求解两个具有两个未知数的非线性方程

转载 作者:行者123 更新时间:2023-11-30 05:42:26 24 4
gpt4 key购买 nike

我有两个包含两个未知数的非线性方程,即 taup。两个方程是:p=1-(1-tau).^(n-1)tau = 2*(1-2*p) ./( (1-2*p)*(W+1)+(p*W).*(1-(2*p).^m) )

我有兴趣找到 tau 的值。我如何使用 C++ 代码找到这个值,我已经使用 MATLAB 完成了,这里是我使用的代码:

function result=tau_eq(tau)

n=6;
W=32;
m=5;

p=1-(1-tau).^(n-1);
result=tau - 2*(1-2*p) ./ ( (1-2*p)*(W+1)+(p*W).*(1-(2*p).^m));

Statement at the command window:
result=fzero(@tau_eq,[0,1],[])

有人可以帮助我吗,因为我是 C++ 的新手。提前致谢

最佳答案

1.函数fzero求解非线性方程而不是方程组。

2.最简单的方法是二分法。这是您的等式的实现变体。

#include <iostream>
#include <cmath>
#include <functional>

std::pair<bool,double> SimpleSolve(std::function<double(double)> &func,
const double xbegin,
const double xend);
int main()
{
std::function<double(const double)> func = [](const double &tau)
{
auto n=6;
auto W=32;
auto m=5;

auto p=1-pow((1-tau),(n-1));
return tau - 2*(1-2*p) / ( (1-2*p)*(W+1)+(p*W)*(1-pow((2*p),m)));
};
auto R = SimpleSolve(func,0,1);
if(R.first)
std::cout<<R.second<<std::endl;
else
std::cout<<"Error"<<std::endl;
return 0;
}

std::pair<bool,double> SimpleSolve(std::function<double(double)> &func,
const double xbegin,
const double xend)
{
double a=xbegin;
double b=xend;
const double epsilon=0.0001;
const double delta=0.0001;
double f1=func(a);
int it=0;
while(true)
{
++it;
double c=(b+a)/2;
if((b-a)<epsilon*2.0)
return std::make_pair(true,c);

if(fabs(func(c))<delta)
return std::make_pair(true,c);
((func(a)*func(c))<0) ? b=c : a=c ;
if(it>1000)
{
return std::make_pair(false,c);
}
}
}

3。在 Matlab 帮助函数中编写:

The algorithm, created by T. Dekker, uses a combination of bisection, secant, and inverse quadratic interpolation methods. An Algol 60 version, with some improvements, is given in Brent, R., Algorithms for Minimization Without Derivatives, Prentice-Hall, 1973. A Fortran version, upon which fzero is based, is in Forsythe, G. E., M. A. Malcolm, and C. B. Moler, Computer Methods for Mathematical Computations, Prentice-Hall, 1976.

你可以实现它。

4.看到这个问题: What good libraries are there for solving a system of non-linear equations in C++?

关于c++ - 在 C++ 中求解两个具有两个未知数的非线性方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30646371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com