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

Метод Адамса - исправить ошибки - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
yangicher
0 / 0 / 0
Регистрация: 11.12.2010
Сообщений: 29
26.11.2011, 02:30     Метод Адамса - исправить ошибки #1
в коде программы 3 ошибки, тот кто шарит, помогите исправить)
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
#include <math.h>
#include <stdio.h>
const float a=0,b=2;             // bounds of the interval
const int num_points=10,         // number of points to solve
          num_starting_points=4; // number of points to solve with Runge-Kutta method
float x0=0,y0=1;                 // starting conditions
float f(float x, float y)
{
  return x+y;  // y'=x+y
}
// this function realises Runge-Kutta method for n starting points
void calculate(float *y)
{
  float k1,k2,k3,k4,x,yi,h;
  h=(b-a)/num_points;  // step
  yi=y0; x=x0;
  for (int i=0;i<num_starting_points;i++)
  {
    k1=h*f(x,yi);
    k2=h*f(x+h/2,yi+k1/2);
    k3=h*f(x+h/2,yi+k2/2);
    k4=h*f(x+h,yi+k3);
    yi+=(k1+2*k2+2*k3+k4)/6;
    x+=h;
    *(y+i+1)=yi;
  }
}
void main(void)
{
  float y[num_points+1],h;
  y[0]=y0;
  // apply Runge-Kutta method
  calculate(y);
  h=(b-a)/num_points;
  // extrapolating
  for (int i=num_starting_points;i<num_points;i++)
    y[i] = y[i-1]+h/24*(55*f(x0+(i-1)*h,y[i-1])-
             59*f(x0+(i-2)*h,y[i-2])+
             37*f(x0+(i-3)*h,y[i-3])-
             9*f(x0+(i-4)*h,y[i-4]));
  printf("X\t\tY\t\tExact solution\n");
  for (i=0;i<num_points;i++)
    printf("%f\t%f\t%f\n",(x0+i*h),y[i],(2*exp(x0+i*h)-(x0+i*h)-1));
}
вот такие ошибки:

c:\program files\microsoft visual studio\myprojects\8834\98.cpp(6) : error C2373: 'y0' : redefinition; different type modifiers
c:\program files\microsoft visual studio\vc98\include\math.h(434) : see declaration of 'y0'
c:\program files\microsoft visual studio\myprojects\8834\98.cpp(16) : error C2440: '=' : cannot convert from 'double (__cdecl *)(double)' to 'float'
There is no context in which this conversion is possible
c:\program files\microsoft visual studio\myprojects\8834\98.cpp(31) : error C2440: '=' : cannot convert from 'double (__cdecl *)(double)' to 'float'
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2011, 02:30     Метод Адамса - исправить ошибки
Посмотрите здесь:

C++ Исправить ошибки
Исправить ошибки C++
Исправить ошибки в коде C++
Не работает код C++
Метод Гаусса C++, исправить ошибки в коде C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
bootleanC
 Аватар для bootleanC
6 / 6 / 1
Регистрация: 28.04.2009
Сообщений: 106
19.11.2012, 09:54     Метод Адамса - исправить ошибки #2
это метод рунге-кутта, а не адамса!

Добавлено через 5 минут
хотя конец решение адамса
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
19.11.2012, 09:54     Метод Адамса - исправить ошибки #3
у0() уже есть в файле math.h, подключенным как заголовок. не знаю, что он там делает правда. но второй раз объявлять переменную нельзя.
bootleanC
 Аватар для bootleanC
6 / 6 / 1
Регистрация: 28.04.2009
Сообщений: 106
19.11.2012, 10:02     Метод Адамса - исправить ошибки #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Все заработало когда сменил перемененную y0 на yl

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
#include "stdafx.h"
#include <math.h>
#include <stdio.h>
#include <conio.h>
const float a=0,b=2;             // bounds of the interval
const int num_points=10,         // number of points to solve
          num_starting_points=4; // number of points to solve with Runge-Kutta method
float x0=0;
float yl=1; 
 
float f(float x, float y)
{
  return x+y;  // y'=x+y
}
// this function realises Runge-Kutta method for n starting points
void calculate(float *y)
{
  float k1,k2,k3,k4,x,yi,h;
  h=(b-a)/num_points;  // step
  yi=yl; x=x0;
  for (int i=0;i<num_starting_points;i++)
  {
    k1=h*f(x,yi);
    k2=h*f(x+h/2,yi+k1/2);
    k3=h*f(x+h/2,yi+k2/2);
    k4=h*f(x+h,yi+k3);
    yi+=(k1+2*k2+2*k3+k4)/6;
    x+=h;
    *(y+i+1)=yi;
  }
}
void main(void)
{
  float y[num_points+1],h;
  y[0]=yl;
  // apply Runge-Kutta method
  calculate(y);
  h=(b-a)/num_points;
  // extrapolating
  for (int i=num_starting_points;i<num_points;i++)
    y[i] = y[i-1]+h/24*(55*f(x0+(i-1)*h,y[i-1])-
             59*f(x0+(i-2)*h,y[i-2])+
             37*f(x0+(i-3)*h,y[i-3])-
             9*f(x0+(i-4)*h,y[i-4]));
  printf("X\t\tY\t\tExact solution\n");
  for (int i=0;i<num_points;i++)
    printf("%f\t%f\t%f\n",(x0+i*h),y[i],(2*exp(x0+i*h)-(x0+i*h)-1));
  _getch();
}
Yandex
Объявления
19.11.2012, 10:02     Метод Адамса - исправить ошибки
Ответ Создать тему
Опции темы

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