Cần gợi ý cho bài tập giải phương trình


Em cần ý tưởng cho bài này, ai có cho em xin key để em tìm hiểu với ạ :smiley:

Bài gì nhét hết hàm siêu việt lẫn hàm lượng giác vào thế này :stuck_out_tongue:

Trên x \in [0, 1] thì e^{-x},\ \cos x giảm; \sin x,\ \tan x,\ x^2 tăng. Với p, r \le 0 \le q, s, t thì hàm f(x) = p e^{-x} + q \sin x + r \cos x + s \tan x + tx^2 + u trở thành hàm giảm.

Bài này áp dụng Bisection Method thôi.

3 Likes

Úi, em cảm ơn bác nhaaaaaaaaaaa :>> Để em đọc :smiley:

Gợi ý xong bạn làm được đến đâu rồi?

1 Like

Em có tìm hiểu và code thì hay bị time out :<

#include<bits/stdc++.h>
#define eps 0.00001
using namespace std;
int p, q, r, s, t, u;

double pt(double x)
    {
    double kq = p * exp(-x) + q * sin(x) + r * cos(x) + s * tan(x) + t * x * x + u;
    return kq;
    }
int main()
    {
    int dem = 0;
    double x, x0, x1, fx;
    x0 = 0.0000;
    x1 = 1.0000;
    x = x0;
    while (cin >> p >> q >> r >> s >> t >> u) {
        dem++;
        if (dem > 2100) {
            break;
            }
        if (p == 0 && q == 0 && r == 0 && s == 0 && t == 0 && u == 0) {
            cout << "0.0000\n";
            }
        else if ((pt(x) > 0) && (x == 1) || (p == 0 && q == 0 && r == 0 && s == 0 && t == 0 && u != 0))
            cout << "No solution\n";
        else
            {
            do
                {
                x = (x0 + x1) / 2.0;
                fx = pt(x);
                if (fx > eps)
                    {
                    x0 = x;
                    }
                else if (fx < -eps)
                    {
                    x1 = x;
                    }
                } while (fx<-eps || fx>eps);
                cout << fixed << setprecision(4) << x << endl;
            }
        }

    return 0;
    }

đây là code của em, mọi người cho em key để em tối ưu với :<

1 Like

Bạn không cần phải dùng biến dem làm gì, đề cho giới hạn số test thì sẽ tự kiểm soát số lượng test đầu vào, bạn không phải kiểm tra.

Đề nói nghiệm chính xác đến 4 chữ số thập phân, không phải là f(x) xấp xỉ 0 đến 4 chữ số thập phân, do vậy điều kiện kiểm tra f(x) là so sánh với 0, không phải là 10^{-4}. Điều kiện dừng của vòng while trong trường hợp này là |x_0 - x_1| < 10^{-4}.

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?