我使用二分法找到了方程的解。
我需要在某些迭代中找到a和b的值。因此,我分別為這些點制作了兩個陣列。
為了從函式中“拉出”迭代次數,我沒有問題。它們顯示在螢屏上。但是如何“拉出”這兩個陣列呢?請告訴我怎么做。先感謝您!

double f1(double x){
return x*x-5*sin(x);
}
double f2(double x){
return exp(x)-pow(10,x);
}
double f3(double x){
return sin(x)-x 0.15;
}
double f4(double x){
return x-pow(9 x,0.5) x*x-4;
}
double dihotom (double a , double b , double e , double(*fp)(double),int &iter,double &points_a[],double &points_b[]){
double c , fc , fa = fp(a);
iter=(log10((b-a)/e))/log10(2);
int step = iter/3;
int step_current = step;
int it=0;
int k=0;
do{
c=(a b)/2;
fc=fp(c);
if (fa*fc<=0) b = c ; else a = c;
it ;
if(it==step_current){
points_a[k]=a;
points_b[k]=b;
k ;
step_current=step_current step;
}
fa=fp(a);
printf ("it %d: a = %lf,b = %lf\n",iter,a,b);
}while (fabs(a-b)>=e);
return c;
}
int main(int argc, char *argv[]) {
int int_s=0;
double points_a[3];
double points_b[3];
double k3= dihotom (0.5,1,0.0001,f3,int_s,points_a[3],points_b[3]);
printf("For F3 - root = %lf, F3(%.2lf)=%lf ;iter =%d\n", k3, k3 ,f3(k3),int_s);
int i=0;
for(i=0;i<3;i ){
printf("step : %d , a: %lf, b: %lf ", i,points_a[i],points_b[i]);
}
return 0;
}
uj5u.com熱心網友回復:
在您的情況下,您應該通過參考獲取陣列:
double dihotom(double a, double b, double e, double (*fp)(double), int &iter,
double (&points_a)[3], double (&points_b)[3]) {
// ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^
您還可以讓陣列衰減為指標:
double dihotom(double a, double b, double e, double (*fp)(double), int &iter,
double points_a[], double points_b[]) {
或者
double dihotom(double a, double b, double e, double (*fp)(double), int &iter,
double* points_a, double* points_b) {
但是通過參考它們,您可以確保只接受正確大小的陣列。
在任何一種情況下,對該函式的呼叫都將是:
double k3 = dihotom(0.5, 1, 0.0001, f3, int_s, points_a, points_b);
演示
uj5u.com熱心網友回復:
如果你想從一個函式中回傳兩個陣列,那么用兩個向量創建一個結構體。像這樣的東西。你這樣做的方式更難維護,例如誰來分配和洗掉陣列?
// todo for you : create better names then points_a and points_b
struct my_result_t
{
std::vector<double> points_a;
std::vector<double> points_b;
};
my_result_t function();
{
my_result_t result;
result.points_a.push_back(1.0);
result.points_b.push_back(2.0);
return result;
}
int main()
{
auto result = function();
std::cout << result.points_a[0];
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/361807.html
