Найти численное решение уравнения

spasi

Найти численное решение уравнения c точностью до 0,00001 cos(x)=tg(x/2) Угол x задается в градусах.
5 ответов

spasi

Что спросить то хотели?


spasi

Хотел бы убедиться в правильности кода.
#include<stdafx.h>
#include<iostream>
#include"math.h"
//#define PI 3.1415926535897932384626433832795
using namespace std;
 
****** func(****** x)
{
    return (cos(x) - tan(x)/2);
}
****** find(****** x0, ****** x1, ****** eps) {
    ****** left = x0, right = x1, x, fl, fr, f;
    int iter = 0;
    cout<<"x0 = "<<x0<<" x1 = "<<x1<<"\n";
    do {
        fl = func(left); fr = func(right);
        x = (left + right) / 2;
        f = func(x);
        if (f > 0) right = x;
        else left = x;
        iter++;
    } while (fabs(f) > eps && iter<20000);
    cout<<iter<<" iteracii\n";
    return x;
}
 
int main(){
    ****** z=find(1.0,10.0,0.00001);
    cout<<z<<"\n";
    getchar();
getchar();
    return 0;
}


spasi

do {
        fl = func(left); fr = func(right);
        if(fl*fr>0)
        {
             cout<<"No root";
            return 0;
        }
        x = (left + right) / 2;
        f = func(x);
        if (f*fr > 0) 
            right = x;
        else 
            left = x;
        iter++;
    } while (fabs(f) > eps && right-left>eps /*&& iter<20000*/);


spasi

do {
        fl = func(left); fr = func(right);
        if(fl*fr>0)
        {
             cout<<"No root";
            return 0;
        }
        x = (left + right) / 2;
        f = func(x);
        if (f*fr > 0) 
            right = x;
        else 
            left = x;
        iter++;
    } while (fabs(f) > eps && right-left>eps /*&& iter<20000*/);
При внесении данных исправлений программа выдает два значения х1 и х0 и "No root0" вместо итерации.


spasi

Это значит, что вы задали начальные точки так, что значения функции в них одного знака. Соответственно, либо корня нет, либо их там четное число.
 ****** z=find(0.5,1.0,1e-8);