Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Метод линейной интерполяции - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создать массив в базовом абстрактном классе, и его передать функциям производных классов http://www.cyberforum.ru/cpp-beginners/thread68351.html
есть полностью абстрактный (виртуальный) класс. там все функции виртуальные и равны 0. Назовем его class A есть 3 производных ОТ НЕГО класса. Например class X, class Y, class Z. сложность в том,...
C++ Структуры+модульное ошибка компиляции помоогите разобраться При компиляции выдает ошибку на описании структуры в файле inputMarki.h ,в чем проблема помогите разобраться? Файл main.cpp #include <iostream.h> #include "command.h" #include <windows.h>... http://www.cyberforum.ru/cpp-beginners/thread68328.html
По массивам... C++
Задан случайный массив. Нужно получить без повторений элементы, встречающиеся в массиве более одного раза. Вот что получилось: #include <stdlib.h> #include <iomanip.h> #include <conio.h>...
C++ массив, как элемент класса
как создать элемент класса - массив? в структурах это было можно, а в классах?
C++ Создать базовый класс список http://www.cyberforum.ru/cpp-beginners/thread68286.html
Помогите....нужно написать проги(ТЕМА НАСЛЕДОВАНИЯ)...Непонял задания...если кто прочтает и поймет что нужно сделать то обьясните.....РЕШАТЬ ЗАДАЧКИ НЕНАДО!!... но если решите то не откажусь ;) ...
C++ Вычислить функцию F. Помогите пожалуйста решить http://www.progu.at.ua/5.bmp Дополнительное условие. Функция F должна принимать действительное значение, если выражение (Ац ИЛИ Вц) И Сц не равняется нулю, и целое... подробнее

Показать сообщение отдельно
Том Ардер
Модератор
Эксперт по математике/физике
3742 / 2355 / 293
Регистрация: 15.06.2009
Сообщений: 4,219
30.11.2009, 15:22
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Пришлось почитать про метод линейной интерполяции
Вот код который правильный:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# define M_PI ((float)3.141592653589793)
# include <stdio.h>
# include <conio.h>
# include <math.h>
 
void main()
{
        double x2,x1,x,fx1,fx2,e,n;
        printf("Vvedite tochnost ");
        scanf("%lf",&e);
        n=0;
        x1=0.8;
        x2=1.2;
        do
        {
        fx1=1-sin(x1)-log(x1);
        fx2=1-sin(x2)-log(x2);
        x=x2-(x2-x1)*fx2/(fx2-fx1);
        x1=x2;
        n+=1;
        x2=x;
        }
        while ((fabs(x1-x2)>e));
        printf("Koren=%lf,kolvo operatsii=%.1lf",x,n);
        getch();
        return;
}
Да, код рабочий. Более того, исходный код (с поправками) на интервале (2,4) не сходится, хотя х2 очень близко к корню 3.353. Сходится на интервале (3,4).
Этот код и на интервале (2,4) даёт правильный корень.

Другое название метода: комбинированный метод секущих-хорд.

Небольшая оптимизация, вдвое уменьшающая количество вычислений функции:
C
1
2
3
4
5
6
7
8
9
10
        fx1=1-sin(x1)-log(x1);
        do
        {
            fx2=1-sin(x2)-log(x2);
            x=x2-(x2-x1)*fx2/(fx2-fx1);
            x1=x2;
            fx1 = fx2;
            n+=1;
            x2=x;
        }
Добавлено через 31 минуту
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Согласен, но реализация алгоритма все равно была не правильна!!! Проверьте все что написал в 9 посте.
Да, ошибка в критерии сходимости - интервал (х1,х2) не сужается, но одно из граничных значений подходит к корню. Если в строке 26 исходного кода сделать так:

C
1
while (fabs(fx2) > e);
,

то сходимость нормальная
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru