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

Метод Милна - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
defender.star
Сообщений: n/a
15.09.2012, 14:54     Метод Милна #1
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iomanip> 
#include <math.h>
#include <iostream>
double f(double x, double y)
{ return (x*x+y*y); }
using namespace std;
void main ()
{
    int i,n=10;
    double A,B,h,E; 
    h=0.05;
    E=0.001;
    double x[10],y[10],y1[10],k1,k2,k3,k4;
    x[0]=0;
    y[0]=1;
    y1[0]=f(x[0],y[0]);
    /*cout<<"x[0]=";cin>>x[0];cout<<"y[0]=";cin>>y[0];cout<<"h=";cin>>h;cout<<"E=";cin>>E;*/
    for (i=1;i<=3;i++)
        
        {   
            k1= h*f(x[i-1],y[i-1]);
            k2= h*f(x[i-1]+h/2,y[i-1]+k1/2);
            k3= h*f(x[i-1]+h/2,y[i-1]+k2/2);
            k4= h*f(x[i-1]+h,y[i-1]+k3);
            x[i]= x[i-1]+h;
            y[i]= y[i-1]+(k1+2*k2+2*k3+k4)/6;
            y1[i]=f(x[i],y[i]);
    }
    for(i=1;i<=3;i++)
    {cout<<" x= "<<x[i]<<" , y= "<<y[i]<<endl;}
    
 
    i=3;
    [B]do 
    {  
        y[i+1]= y[i-3]+(4/3)*h*(2*y1[i]-y1[i-1]+2*y1[i-2]);
        x[i+1]=x[i]+h;
 
        B=y[i+1];
        
        do 
        {
            A=B ;
            y1[i+1]= f(x[i+1],A);
            B=y[i-1]+h*(y1[i+1]+4*y1[i]+y1[i-1])/3;
            ++i;
        }
        while(fabs(A-B)>=E);
    
        y[i+1]= B;
       
        
    }
    while(i<=10);[/B]
 
        for(i=4;i<=10;i++)
        {cout<<" x = "<<x[i]<<" , y = "<<y[i]<<endl;}
    
 
}
первые три точки находит правильно,начиная с i=3; do { это часть программы считает остальные значения x,y выводит значения = 1.03052352e-32 или типа этого
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2012, 14:54     Метод Милна
Посмотрите здесь:

Метод Милна. Расчет по нескольким уравнениям. C++
метод деления отрезка пополам и метод итерации C++
Метод Эйлера, и Метод Лагранжа, в долгу не останусь C++
Метод деления отрезка пополам для решения нелинейных уравнений (метод дихотомии) C++
C++ Метод медиан из трех элементов VS улучшенный быстрый метод сортировки(метод Бентли-Макилроя)
C++ Производный класс: метод возведения в произвольную степень, и метод для вычисления логарифма числа
Класс vector (поля: координаты, 2 конструктора, метод нахождения длины вектора и метод вывода координат на экран) C++
C++ СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя
Нахождения корней уравнения: метод половинного деления (бисекции) или метод хорд C++
C++ Мой код - метод бисекции, метод секущих (метод хорд)
C++ Не сходится теория и практика метод Шелла и метод простого выбора
C++ Исследовать итерационный метод- метод касательных для решения нелинейных уравнений

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cmath
Модератор
 Аватар для cmath
2419 / 1638 / 132
Регистрация: 11.08.2012
Сообщений: 3,258
Завершенные тесты: 5
16.09.2012, 11:57     Метод Милна #2
индексация элементов массива в C++ с нуля начинается.
Цитата Сообщение от defender.star Посмотреть сообщение
y[i+1]= y[i-3]+(4/3)*h*(2*y1[i]-y1[i-1]+2*y1[i-2]);
у вас в y[i-3] индекс = 0 (т.е. обращаетесь к y[0], в котором как была всякая "хрень", так там и осталась), а также
Цитата Сообщение от defender.star Посмотреть сообщение
while(i<=10);
Цитата Сообщение от defender.star Посмотреть сообщение
y[i+1]= y[i-3]+(4/3)*h*(2*y1[i]-y1[i-1]+2*y1[i-2]);
т.е. вы делаете обращение к y[11], который не предусмотрен, уже на i = 9 (y[10]) должна выползти ошибка о нехорошем блоке памяти.
Yandex
Объявления
16.09.2012, 11:57     Метод Милна
Ответ Создать тему
Опции темы

Текущее время: 09:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru